Wo liegt der Fehler im Skript?

Ich bin nicht gerade ein Experte auf dem Gebiet php. Darum wende ich mich nun an dieses Forum.

Ich habe einmal die html-Datei ud09.htm mit folgendem Inhalt:

Anzeige der Personen mit folgenden Anfangsbuchstaben:

und dann noch die php-Datei ud09.php mit folgendem Inhalt:

<?php // mysql_connect();
// mysql\_select\_db("firma"); $server = "localhost"; $user = "root"; $pass = "master"; $database = "firma"; $table = "personen"; //Verbindung aufnehmen $verbindung = @mysql\_connect($server, $user, $pass) or die ("Konnte Verbindung zur Datenbank nicht herstellen !"); //Datenbank auswählen mysql\_select\_db($database, $verbindung) or die ("Fehler beim Zugriff auf die Datenbank $database!"); $sqlab = "select name, vorname from personen"; $sqlab .= " where name like '$anfang%'"; $res = mysql\_query($sqlab); $num = mysql\_num\_rows($res); if ($num==0) echo "keine passenden Datensätze gefunden"; while ($dsatz = mysql\_fetch\_assoc($res)) { echo $dsatz["name"] . ", " . $dsatz["vorname"] . " "; } ?\> Das komplette Skript ist aus einem Buch übernommen, außer der serverconnect. den habe ich so geändert, weil ich eine Datenbank mit Passwort, etc. habe. Könnt ihr mir sagen wo das Problem liegt? Gruß jojoAction

also wenn das buch das 1 zu 1 so geschrieben hat werf das mal ganz schnell weg :smile:

 $sqlab .= " where name like '$anfang%'";

änder das mal in

 $sqlab .= " where name like '".mysql\_real\_escape\_string($\_POST['anfang'])."%'";

dann sollte es gehen.

Gruß
Phillip

Ich habe alles mal in einer Datei (www.php) geschrieben und so funktioniert es. Bei dir ist eigentlich der Fehler, dass die 2. aufgerufene Seite gar nichts mit „$anfang“ anfangen kann. Du musst es erst rüber holen. Wenn du am Anfang schreibst: $anfang=$_POST[‚anfang‘]; dann wird er erst deklariert und initialisiert.
Du solltest das Buch weg schmeißen und die Tutorials im Netz benutzen. So was wie irgendwo einfach zu schreiben ist nicht nur völlig sinnlos, sondern verschmutzt dir auch deine Skripte und Übersicht. Auch sollte man sich von vorne herein angewöhnen die Tags zu schließen, d.h. wenn ich einen Tag (Bsp.: ) so sollte ich den auch wieder schließen ( ). Das gilt auch für alleinstehende Tags, wie z. B.:

etc.

Anzeige der Personen mit folgenden Anfangsbuchstaben:

<?php if(isset($_POST['ok']) AND $_POST['ok']=='ok')
{ $server="localhost"; $user="root"; $pass = ""; $database="testwww"; $table = "personen"; $anfang=$\_POST['anfang']; $verbindung=mysql\_connect($server, $user, $pass) or die ("Konnte Verbindung zur Datenbank nicht herstellen!"); mysql\_select\_db($database, $verbindung) or die ("Fehler beim Zugriff auf die Datenbank ".$database."!"); $abfrage=mysql\_query("SELECT `name`, `vorname` FROM `personen` WHERE `name` LIKE '".$anfang."%';"); while($ergebnis=mysql\_fetch\_assoc($abfrage)) { echo $ergebnis['name'].", ".$ergebnis['vorname']." "; } } ?\>

Ach ja, fast vergessen:
Wenn du die Abfrage so gestaltest, hast du natürlich das Problem, dass bei einer leeren Eingabe (also nur ok klicken) alle Namen ausgeschmissen werden, da das %-Zeichen in der SQL-Syntax alle weiteren Zeichenketten sucht. Umgehen kannst du das, indem du abfragst, ob die Eingabe nicht gleich leer ist:

<?php if(isset($_POST['ok']) AND $_POST['ok']=='ok' AND $_POST['anfang']!='')
{ ... } ?\> oder so: <?php if(isset($_POST['ok']) AND $_POST['ok']=='ok')
{ if($\_POST['anfang']!='') { echo "Bitte tragen Sie etwas ein!"; } else { ... } } ?\>

(). Das gilt auch für alleinstehende Tags, wie z.
B.:

etc.

Das ist so nicht richtig.

HTML kennt keine

das kennt nur XHTML

bei HTML ist und bleibt es