• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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?
 

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
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.
 
Registriert
19.01.07
Beiträge
116
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";
 

drok

Klarapfel
Registriert
02.06.07
Beiträge
278
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:
Registriert
19.01.07
Beiträge
116
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!
 

drok

Klarapfel
Registriert
02.06.07
Beiträge
278
Vielleicht auch den SQL-String auf doppelte Leerzeichen überprüfen. SQL ist da sehr empfindlich.
 

fealXX

Granny Smith
Registriert
05.02.08
Beiträge
15
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'])."
 
Registriert
19.01.07
Beiträge
116
Habe die SELECT-Abfragen bei einer anderen DB durchprobiert - alles hat auf Anhieb geklappt!
 

TaTonka

Neuer Berner Rosenapfel
Registriert
19.03.06
Beiträge
1.975
ist das thema jetzt erledigt? sonst würd ich noch sagen, lass die doppelten anführungszeichen und die verbindungspunkte bei der variable weg.
 

drok

Klarapfel
Registriert
02.06.07
Beiträge
278
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.