Mailinglisten-Archive |
Nadja Senoucci schrieb am Dienstag, den 7. September 1999: > Der Code sieht für mich absolut in Ordnung aus - hier kommt er, so > gut wie möglich von mir dokumentiert: > > <?php > if(!isset($pos)): > $pos=0; > endif; > mysql_connect(localhost,root); > mysql_select_db(hvz); Das funktioniert? Da die Parameter Strings sind, müssen die eigentlich alle in Anführungszeichen! Auch wenn's ohne funktioniert, ist's mit besserer Stil (meines Erachtens). mysql_connect('localhost', 'root'); mysql_select_db('hvz'); > /* Hier frage ich die Position $pos ab, falls der Anwender bereits > vorher 10 Einträge gesehen und auf "weiter" gedrückt > hat. Wenn nicht, wird $pos auf 0 gesetzt. Anschließend wird > die Datenbank geöffnet. */ > > /* Ausgabe der Einträge nach Städten */ > > if( $suchart == 1 ): > $anwid=mysql_query("select * from haendler where > (ort=\"$suchwert\") limit $pos,10"); Kein Fehler, nur ein Tip: Wenn Du zum Begrenzen der Strings in MySQL Apostrophe (') verwendest - was übrigens eh der allgemeine Standard in SQL ist - kannst Du Dir das häßliche Escapen der Anführungszeichen sparen: $anwid=mysql_query("select * from haendler where (ort='$suchwert') limit $pos,10"); Aber eine mögliche Fehlerquelle: Falls $suchwert selbst Anführungszeichen oder Apostrophe enthalten kann, wird's in MySQL einen Parse-Error geben (klar, die sich dann ergebende SQL-Anfrage ist dann ja auch defekt). Deshalb sollten diese Zeichen in $suchstring escapet werden. PHP hat dazu zwei Möglichkeiten: - manuell per AddSlashes() - automatisch, wenn die PHP-Option magic_quotes-gpc gesetzt ist. Dann sind alle über GET, POST oder COOKIES empfangenen Werte schon passend escaped. (Test der Option per get-magic-quotes-gpc.) Ich empfehle, magic-quotes-gpc in PHP grundsätzlich auszuschalten und Escaping dort, wo man;s braucht, explizit zu machen. Das spart Überraschungen. Somit meine empfohlene Variante: $sql = sprintf("select * from haendler where ort='%s' limit %d,10", AddSlashes($suchwert), $pos); $anwid = mysql_query($sql); Was hier noch fehlt, ist eine Fehlerabfrage, denn mysql_query könnte ja evtl. auch schiefgehen, wenn z.B. MySQL nicht läuft ... Als Minimum sollte zumindest sowas wie $anwid = mysql_query($sql) or die ("Fehler bei der SQL-Anfrage"); verwendet werden. > if( ( $zeile=mysql_fetch_row($anwid) ) == "" ): > echo('Kein solcher Eintrag vorhanden'); > else: > while($zeile=mysql_fetch_row($anwid)): > echo $zeile[1];?> <br> <? > echo $zeile[2];?> <br> <? > echo $zeile[3];?> <br> <? > echo $zeile[4];?> <? > echo $zeile[5];?> <br> <? > echo $zeile[6];?> <br> <? > echo $zeile[7];?> <p> <? > endwhile; > endif; Probier' mal eine Anfrage, die mehr als nur ein Ergebnis hätte! Dann müßtest Du sehen, daß der erste Datensatz übersprungen wird, es ansonsten aber funktioniert ... Das Problem ist, daß Du mit dem Test ( $zeile=mysql_fetch_row($anwid) ) == "" schon den ersten Datensatz abrufst, ihn aber nirgends ausgibst. In der while-Schleife wird dann bereits der zweite Datensatz samt seinen Nachfolgern geholt. Der bessere Test, ob die Anfrage Ergebnisse ergab, ist: if ( mysql_num_rows($anwid) == 0 ): > Bitte helft mir - ich bin Euch unendlich dankbar! > (Frustschieb...) Kopf hoch, gerade konzeptuelle Fehler wie diesen übersieht man selbst als Autor am längsten ... Ciao, Martin -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ > PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7
php::bar PHP Wiki - Listenarchive