• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Datenauswahl über Suchformular (php/mysql)

Registriert
19.01.07
Beiträge
116
Hallo Leute!

Ich versuche gerade Daten mit Hilfe eines Formulars aus einer DB auszulesen. Leider klappt das Ganze nicht so recht, da immer die Meldung 'keine passenden Datensätze gefunden' erscheint!
Mein höchst einfaches Beispiel bezieht sich auf eine DB (namen) mit einer Tabelle (gruppe) und zwei Spalten (vor, nach).
Hier der Sourcecode für das Formular:
Code:
<html>
<body>
Suche nach Namen in der Datenbank
<form action ="Ausgabe2.php" method "post">
	<input name ="nn"> Nachname<p>
	<input type ="submit">
	<input type ="reset">
</form>
</body>
</html>
Und hier der PHP bzw Mysql Code:
Code:
<html>
<body>
<?php
mysql_connect("localhost","root","root");
mysql_select_db("namen");

$sqlab="select vor, nach from gruppe where nach like '".$_POST["nn"]."' order by nach";
$res=mysql_query($sqlab);
$num=mysql_num_rows($res);
if ($num==0) echo "keine passenden Daten gefunden";
while ($dsatz=mysql_fetch_assoc($res))
{
	echo $dsatz["vor"] . ", "
		.$dsatz["nach"] . "<br>";
}
?>
</body>
</html>
Die Anzeige aller Datensätze mit Select * hat übrigens funktioniert! Wo liegt nur mein Fehler? Stimmt etwas mit meiner Select-Anweisung nicht?
 
Also ich kenne mich mit PHP nicht so gut aus, aber ich glaube, das muss so heissen:
$sqlab="select vor, nach from gruppe where nach like '%".$_POST["nn"]."%' order by nach";
Zudem würde ich SQL Befehle generell groß schreiben.
 
Habe ich gerade ausprobiert. Dieses Statement führt dazu, dass alle Datensätze angezeigt werden - Unabhängig vom Wert im Formular!
Code:
$sqlab="select vor, nach from gruppe where nach like '%".$_POST["nn"]."%' order by nach";
 
Was gibt denn

Code:
$sqlab="SELECT vor, nach FROM gruppe WHERE nach LIKE '".$_POST["nn"]."%' ORDER BY nach";
aus ?

Jetzt müsste er alle ausgeben die mit dem Inhalt aus "nn" anfangen.
Davor hat er alle ausgegeben in denen der Inhalt aus der Variable "nn" enthalten war.

Wenn Du wissen möchtest ob ein bestimmter Nachnahme vorhanden ist, dann müsstest du fragen:

Code:
 $sqlab="SELECT vor, nach FROM gruppe WHERE nach='wert'";
Die Anzeige aller Datensätze mit Select * hat übrigens funktioniert! Wo liegt nur mein Fehler? Stimmt etwas mit meiner Select-Anweisung nicht?

Die ist eigentlich in Ordnung, hast du auch immer nach dem gleichen Namen gesucht ?
Kann sein dass es vllt einmal geklappt hat, weil die Suche auch erfolgreich war.



Mal davon abgesehen: Ich hoffe Dir ist bewusst, dass das Script aus sicherheitstechnischer Sicht ein Disaster ist ;)
 
Zuletzt bearbeitet:
Code:
$sqlab="SELECT vor, nach FROM gruppe WHERE nach like '" . $_POST["nn"] . "%'";
Führt dazu, dass alle Namen der DB ausgegeben werden - also auch jene, die gar nicht mit der eingegeben Zeichenkette beginnen!
Code:
$sqlab="SELECT vor, nach FROM gruppe WHERE nach = '" . $_POST["nn"] . "'";
Bei dieser Anfrage, also der Suche nach einem bestimmten Namen kommt die Meldung : keine Datensätze gefunden! Zufällige Fehler sind ausgeschlossen, da ich es schon so oft versucht habe.
Ich hoffe Dir ist bewusst, dass das Script aus sicherheitstechnischer Sicht ein Disaster ist
War mir ehrlich gesagt nicht bewusst! Ist mir als Anfänger, der nicht einmal die einfachsten SELECT-Anweisungen hinbekommt, aber momentan auch ziemlich egal. Da muss ich schon noch andere Prioritäten setzen!
 
Vielleicht auch den SQL-String auf doppelte Leerzeichen überprüfen. SQL ist da sehr empfindlich.
 
War mir ehrlich gesagt nicht bewusst! Ist mir als Anfänger, der nicht einmal die einfachsten SELECT-Anweisungen hinbekommt, aber momentan auch ziemlich egal. Da muss ich schon noch andere Prioritäten setzen!
fang jetzt schon damit an!
sichs später anzugewöhnen ist schwierig, glaub mir!

in deinem script könnte ich ganz einfach es so generieren das der nachname immer gefunden wird
beim nachnamen vllt nicht so kritisch, aber stell dir mal vor man macht das mit nem adminpasswort ;)

deswegen:
Code:
".addslashes($_POST['nn'])."
 
Habe die SELECT-Abfragen bei einer anderen DB durchprobiert - alles hat auf Anhieb geklappt!
 
ist das thema jetzt erledigt? sonst würd ich noch sagen, lass die doppelten anführungszeichen und die verbindungspunkte bei der variable weg.
 
ist das thema jetzt erledigt? sonst würd ich noch sagen, lass die doppelten anführungszeichen und die verbindungspunkte bei der variable weg.

Falls du diesen Code meinst:

Code:
 $sqlab="SELECT vor, nach FROM gruppe WHERE nach like '" . $_POST["nn"] . "%'";

Dann würde doch die DB nach einem String "$_POST["nn"]" suchen, und nicht nach dem Variableninhalt.