Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Script zur Ausgabe von Datenbankeinträgen funktioniert nicht

Frage Entwicklung PHP

Mitglied: v3rtico

v3rtico (Level 1) - Jetzt verbinden

01.09.2008, aktualisiert 02.09.2008, 4260 Aufrufe, 4 Kommentare

Ich habe für mein aktuelles Projekt ein Script zur Ausgabe von Datenbankeinträgen in PHP erstellt, welches aber nicht Funktioniert. Könnt ihr es euch mal anschauen? Ich verzweifle noch daran!

Das folgende Script soll die Suchergebnisse in Gruppen zu je 10 Einträgen Bündeln und dann unten eine Seitennavigation generieren (Seite 1, 2, 3 etc). Ganz oben wird angezeigt, wie viele Einträge in der Datenbank vorhanden sind und falls es mehr als 20 sind soll noch zusätzlich auf die Suchfunktion verwiesen werden. Die Verbindung mit der Datenbank wird in dem include header.php hergestellt. Ich habe im Quelltext mal kurz notiert was was machen soll und an welcher Stelle er abbricht!


01.
<?php 
02.
	include("../../include/header.php"); 
03.
		$sql = mysql_query("SELECT id, firma, ort FROM vc_branchenbuch ORDER BY firma ASC");	 
04.
		$zahl = mysql_num_rows($sql); //Zählen der Einträge 
05.
		if (!empty($zahl)) {	      //Ausgabe wie viele Einträge vorhanden sind 
06.
			Echo "Es sind <b>".$zahl."</b> Eintrage in unserer Datenbank vorhanden.<br />"
07.
			If ($zahl > 20) { 
08.
				Echo "Tipp: Nutzen Sie doch unsere Suchfunktion!";} 
09.
		}else
10.
			Echo "<br /><br />Es sind keine Einträge in unserer Datenbank vorhanden";		 
11.
12.
      //------------------ Hier bricht er schon ab ---------------------- 
13.
		if ($zahl < 11) {             //Falls keine Navigation erfolderlich ist (max. 10 Einträge) 
14.
			while ($row = mysql_fetch_array($sql)) { 
15.
					echo "<a href=\"detail.php?id=$row[id]\"><b>$row[firma]</b></a><br />$row[ort]<br /><br /><br />"
16.
					$temp = $row[id]; 
17.
			}		 
18.
		}else
19.
			if (empty($_GET[page])){ //Wurde eine Seite übergeben sprich wurde schon navigiert? 
20.
				$page = 1; 
21.
			}else
22.
				$page = $_GET[page]; 
23.
24.
			$last = $page * 10 - 10;  
25.
			$sqlm = mysql_query("SELECT id, firma, ort FROM vc_branchenbuch LIMIT $last, 10 ORDER BY firma ASC"); //Abfrage 
26.
			while ($row = mysql_fetch_array($sqlm)) { //Ausgabe 
27.
					echo "<a href=\"detail.php?id=$row[id]\"><b>$row[firma]</b></a><br />$row[ort]<br /><br /><br />"
28.
					$temp = $row[id];}		 
29.
             // Ab hier wird nur noch die navigation erstellt			 
30.
                        $counter = 0; 
31.
			while ($counter > $zahl){ 
32.
				if ($counter + 1 == $page) { 
33.
					$c = $counter + 1; 
34.
					Echo " ".$c." "
35.
				}else
36.
					$c = $counter + 1; 
37.
					Echo " <a href=\"liste2b.php?zahl=".$c."\">".$c."</a> "
38.
39.
				if ($counter + 1 != $zahl) {	 
40.
					Echo "|"
41.
42.
				$counter = $counter + 1; 
43.
44.
45.
	//Der Footer wird wieder included. Alles dazwischen wird offensichtlich nicht ausgeführt.		 
46.
	include("../../include/footer.php"); 
47.
?>
Wäre nett wenn ihr mir hier helfen könntet, ich sitze schon seit Tagen (!) an diesem Script und komme nicht weiter. Ich habe es bereits mehrmals neu erstellt aber es funktioniert nie, egal was ich versuche!
Mitglied: Arano
01.09.2008 um 12:28 Uhr
Moin,

sah __eigentlich__ funktionstüchtig aus und einen logischen Fehler, warum es abbricht, habe ich nicht sehen können. Aber vielleicht sind die anderen kleinen Fehler schuld dran.

"$row[firma]"
Du verwendest 'firma' hier als Konstante, diese ist aber nirgends definiert (define("firma","administrator.de");)
Möchtest du "firma" hier aber als String verwenden, schreibt sich das so:
01.
<?php 
02.
  $row['firma']; 
03.
  // oder 
04.
  $key = 'firma'
05.
  $row[$key]; 
06.
  // oder 
07.
  $row["$key"]; // wobei ich die anführungszeichen hier überflüssig finde 
08.
   
09.
  // mit konstante 
10.
  define("FIRMA","firma"); 
11.
  $row[FIRMA]; 
12.
?>
Ich habe das und ein paar andere Dinge in deinem Script mal geändert, vielleicht klappt es ja.
Gibt es eigentlich keine Fehlermeldungen, auch nicht um Logfile ?
("error_reporting(E_ALL | E_STRICT);")

Deine Datenbankabfragen habe ich auch ein bisschen umgestaltet.
z.B. die Erste mit der du alle Einträge gezählt hast, warum ALLE Einträge auslesen (Speicherverbrauch) und dann noch mal extra zählen lassen? Es gibt doch "COUNT()".
Dazu habe ich den Query in eine extra Variable geschrieben und seiner Struktur entsprechend umgebrochen. Das hat den Vorteil, dass wenn der Query fehlschlägt, es nicht immer heist: "Check your syntax at line 1 near..." nun kann es auch "..line 2 near..." sein oder eine andere Zeile - Fehler lassen sich so natürlich auch schneller finden.

Fehlen tun noch die Kontrollen ob der Query auch wirklich ausgeführt wurde, oder ob es zu einem Fehler kam. ;)

Un dann gibt es noch ein paar weitere Kommentare die ich reingepfuscht habe ^^
01.
<?php 
02.
	include("../../include/header.php"); 
03.
            $query     = "SELECT COUNT(*) AS gesamt 
04.
                            FROM vc_branchenbuch"; 
05.
            $result    = mysql_query($query); 
06.
            $eintraege = mysql_fetch_assoc($result); 
07.
		if (!empty($eintraege['gesamt'])) {	      //Ausgabe wie viele Einträge vorhanden sind 
08.
			Echo "Es sind <b>".$eintraege['gesamt']."</b> Eintrage in unserer Datenbank vorhanden.<br />"
09.
			If ($eintraege['gesamt'] > 20) { 
10.
				Echo "Tipp: Nutzen Sie doch unsere Suchfunktion!"
11.
12.
		}else
13.
			Echo "<br /><br />Es sind keine Einträge in unserer Datenbank vorhanden"
14.
15.
		 
16.
      //------------------ Hier bricht er schon ab ---------------------- 
17.
		if ($eintraege['gesamt'] < 11) {             //Falls keine Navigation erfolderlich ist (max. 10 Einträge) 
18.
                  $query  = "SELECT id, firma, ort 
19.
                               FROM vc_branchenbuch 
20.
                           ORDER BY firma ASC"; 
21.
                  $result = mysql_query($query); 
22.
			while ($firma = mysql_fetch_array($result)) { 
23.
				echo "<a href=\"detail.php?id=$firma['id']\"><b>$firma['firma']</b></a><br />$firma['ort']<br /><br /><br />"
24.
				$temp = $firma['id']; 
25.
26.
		}else
27.
                  #if (empty($_GET[page])){ 
28.
                  /* #################################################### 
29.
                     schoen waere hier noch, wuerdest du die uebergebenen 
30.
                     seitenzahl mit der hoechst moeglichen vergleichen 
31.
                     (alle eingaben die vom benutzer kommmen sind BOESE) 
32.
                  */ 
33.
			if (isset($_GET['page']) && is_numeric($_GET['page'])){ //Wurde eine Seite übergeben sprich wurde schon navigiert? 
34.
				$page = (int)$_GET['page']; 
35.
			}else
36.
				$page = 1; 
37.
38.
			$last   = $page * 10 - 10; 
39.
                  $query  = "SELECT id, firma, ort 
40.
                               FROM vc_branchenbuch 
41.
                           ORDER BY firma ASC 
42.
                              LIMIT $last, 10"; 
43.
			$result = mysql_query($query); //Abfrage 
44.
			#while ($row = mysql_fetch_array($sql)) { //Ausgabe 
45.
                  /* ###################################### 
46.
                     gib der variable doch einen vernünftigen 
47.
                     namen, einem mit dem man auf den ersten 
48.
                     blick erkennen kann was dessen inhalt 
49.
                     ist. 
50.
                  */ 
51.
			while ($firma = mysql_fetch_array($result)) { //Ausgabe 
52.
				echo "<a href=\"detail.php?id=$firma['id']\"><b>$firma['firma']</b></a><br />$firma['ort']<br /><br /><br />"
53.
				$temp = $firma['id']; 
54.
55.
             // Ab hier wird nur noch die navigation erstellt 
56.
                  #$counter = 0; 
57.
			#while ($counter > $eintraege['gesamt']){ 
58.
                  /* ###################################### 
59.
                     wieso denn groesser als ? wenn $counter 
60.
                     vorher auf 0 gesetzt wird, wird die 
61.
                     while doch niemals durchlaufen ! 
62.
                     ausserdem koennen wir doch auch bei 1 
63.
                     anfangen, dan muss nicht immer einer 
64.
                     dazu addiert werden. 
65.
                  */ 
66.
                  $counter = 1; 
67.
			while ($counter < $eintraege['gesamt']){ 
68.
				if ($counter == $page) { 
69.
					Echo " ".$counter." "
70.
				}else
71.
					Echo " <a href=\"liste2b.php?zahl=".$counter."\">".$counter."</a> "
72.
                              /* ##################################################### 
73.
                                 warum wir der seitenparameter den "zahl" genannt wenn 
74.
                                 wir weiter oben mit "page" gearbeitet haben !? 
75.
                              */ 
76.
77.
				if ($counter != $eintraege['gesamt']) { 
78.
                        /* #################################### 
79.
                           $counter wird niemals so gross wie 
80.
                           $eintraege['gesamt'] weil die while 
81.
                           nur laeuft wen $counter kleiner ist. 
82.
                        */ 
83.
					Echo "|"
84.
85.
				$counter++; // vorher: "$counter = $counter + 1;" 
86.
                  /* ############################################################################# 
87.
                     irre ich mich, oder wird hier ein link pro eintrag ausgegeben ? das sollte 
88.
                     doch ein link pro seite (10 eintraege) sein - oder nicht !? 
89.
                  */ 
90.
91.
92.
	//Der Footer wird wieder included. Alles dazwischen wird offensichtlich nicht ausgeführt.		 
93.
	include("../../include/footer.php"); 
94.
?>
Schönen Gruß
Arano
Bitte warten ..
Mitglied: v3rtico
01.09.2008 um 13:21 Uhr
Juchu, Super, danke! Ich musste nur noch eine variable umbenennen (In der Navigation unten statt liste2b.php?zahl= musste ich page= nehmen), die Variablen im Link zu den einzelnen Einträgen "outsourcen" (immer mit ".$firma['id'].") und beim counter in Zeile 77 durch 10 teilen und dann 1 addieren (Er hat doch pro eintrag eine Seite angelegt) und dann hats einwandfrei geklappt

Viiiielen Dank!!!

Max

PS: Hier nochmal der entgültige Code wie er funktioniert:

01.
<?php 
02.
	include("../../include/header.php"); 
03.
            $query     = "SELECT COUNT(*) AS gesamt 
04.
                            FROM vc_branchenbuch"; 
05.
            $result    = mysql_query($query); 
06.
            $eintraege = mysql_fetch_assoc($result); 
07.
		if (!empty($eintraege['gesamt'])) {	      //Ausgabe wie viele Einträge vorhanden sind 
08.
			Echo "Es sind <b>".$eintraege['gesamt']."</b> Eintrage in unserer Datenbank vorhanden.<br />"
09.
			If ($eintraege['gesamt'] > 20) { 
10.
				Echo "Tipp: Nutzen Sie doch unsere Suchfunktion!<br /><br /><br />"
11.
12.
		}else
13.
			Echo "<br /><br />Es sind keine Einträge in unserer Datenbank vorhanden"
14.
15.
		 
16.
      //------------------ Hier bricht er schon ab ---------------------- 
17.
		if ($eintraege['gesamt'] < 11) {             //Falls keine Navigation erfolderlich ist (max. 10 Einträge) 
18.
                  $query  = "SELECT id, firma, ort 
19.
                               FROM vc_branchenbuch 
20.
                           ORDER BY firma ASC"; 
21.
                  $result = mysql_query($query); 
22.
			while ($firma = mysql_fetch_array($result)) { 
23.
				echo "<a href=\"detail.php?id=".$firma['id']."\"><b>".$firma['firma']."</b></a><br />".$firma['ort']."<br /><br /><br />"
24.
				$temp = $firma['id']; 
25.
26.
		}else
27.
                  #if (empty($_GET[page])){ 
28.
                  /* #################################################### 
29.
                     schoen waere hier noch, wuerdest du die uebergebenen 
30.
                     seitenzahl mit der hoechst moeglichen vergleichen 
31.
                     (alle eingaben die vom benutzer kommmen sind BOESE) 
32.
                  */ 
33.
			if (isset($_GET['page']) && is_numeric($_GET['page'])){ //Wurde eine Seite übergeben sprich wurde schon navigiert? 
34.
				$page = (int)$_GET['page']; 
35.
			}else
36.
				$page = 1; 
37.
38.
			$last   = $page * 10 - 10; 
39.
                  $query  = "SELECT id, firma, ort 
40.
                               FROM vc_branchenbuch 
41.
                           ORDER BY firma ASC 
42.
                              LIMIT $last, 10"; 
43.
			$result = mysql_query($query); //Abfrage 
44.
			#while ($row = mysql_fetch_array($sql)) { //Ausgabe 
45.
                  /* ###################################### 
46.
                     gib der variable doch einen vernünftigen 
47.
                     namen, einem mit dem man auf den ersten 
48.
                     blick erkennen kann was dessen inhalt 
49.
                     ist. 
50.
                  */ 
51.
			while ($firma = mysql_fetch_array($result)) { //Ausgabe 
52.
				echo "<a href=\"detail.php?id=".$firma['id']."\"><b>".$firma['firma']."</b></a><br />".$firma['ort']."<br /><br /><br />"
53.
				$temp = $firma['id']; 
54.
55.
             // Ab hier wird nur noch die navigation erstellt 
56.
                  #$counter = 0; 
57.
			#while ($counter > $eintraege['gesamt']){ 
58.
                  /* ###################################### 
59.
                     wieso denn groesser als ? wenn $counter 
60.
                     vorher auf 0 gesetzt wird, wird die 
61.
                     while doch niemals durchlaufen ! 
62.
                     ausserdem koennen wir doch auch bei 1 
63.
                     anfangen, dan muss nicht immer einer 
64.
                     dazu addiert werden. 
65.
                  */ 
66.
                  $counter = 1; 
67.
			while ($counter < ($eintraege['gesamt'] / 10 + 1)){ 
68.
				if ($counter == $page) { 
69.
					Echo " ".$counter." "
70.
				}else
71.
					Echo " <a href=\"liste2b.php?page=".$counter."\">".$counter."</a> "
72.
                              /* ##################################################### 
73.
                                 warum wir der seitenparameter den "zahl" genannt wenn 
74.
                                 wir weiter oben mit "page" gearbeitet haben !? 
75.
                              */ 
76.
77.
				if ($counter != $eintraege['gesamt']) { 
78.
                        /* #################################### 
79.
                           $counter wird niemals so gross wie 
80.
                           $eintraege['gesamt'] weil die while 
81.
                           nur laeuft wen $counter kleiner ist. 
82.
                        */ 
83.
					Echo "|"
84.
85.
				$counter++; // vorher: "$counter = $counter + 1;" 
86.
                  /* ############################################################################# 
87.
                     irre ich mich, oder wird hier ein link pro eintrag ausgegeben ? das sollte 
88.
                     doch ein link pro seite (10 eintraege) sein - oder nicht !? 
89.
                  */ 
90.
91.
92.
	//Der Footer wird wieder included. Alles dazwischen wird offensichtlich nicht ausgeführt.		 
93.
	include("../../include/footer.php"); 
94.
?>
Bitte warten ..
Mitglied: Arano
01.09.2008 um 23:57 Uhr
Schön schön, dann haben meine Kommentare ja doch ein bisschen geholfen ^^

Eine Kleinigkeit habe ich da aber jetzt noch (oder wieder):
In Zeile 67. hast du "while ($counter < ($eintraege['gesamt'] / 10 + 1)){ " stehen, der rechte Teil des veergleichs (die Rechnung) wir bei jedem durchlaufen der Schleife berechnet, das ist bei vielleicht unwesentlich, aber wie heisst es doch so schön: "Kleinvieh macht auch misst !"
Hier also das Ergebnis in einer Variablen speichern und diese verwenden:
01.
<?php 
02.
  $maxSeite = ceil($eintraege['gesamt'] / 10); 
03.
  while ($counter < $maxSeite){  
04.
     [...] 
05.
06.
  /* 
07.
    mit ceil() wird aufgerundet, daher brauchst du dein "+1" nicht mehr, das, wenn ich mich nicht irre, sowieso einen zuviel addiert hätte wenn eine passende Anzahl von eintraegen vorhanden ist: 
08.
    div     ceil   maxSeite   richtig? 
09.
    10/10 = 1    = 1        = ja 
10.
    15/10 = 1,5  = 2        = ja 
11.
    div     +1     maxSeite   richtig? 
12.
    10/10 = 1    = 2        = nein 
13.
    15/10 = 1,5  = 2,5      = nein 
14.
  */ 
15.
?>
~Arano
Bitte warten ..
Mitglied: masterG
02.09.2008 um 12:12 Uhr
Thread closed
masterG(Moderator)
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Systemvariable funktioniert im Script nicht (4)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell Datei kopieren mit ACL Script funktioniert nicht (4)

Frage von xpxy15 zum Thema Batch & Shell ...

Linux
LTSP: PXE Boot funktioniert nicht (16)

Frage von Fenris14 zum Thema Linux ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...