Variablen werden aus Mysql-Datenbank nicht ausgelesen
Starkoch
- php
Hallo,
wer kann mir auf die Sprünge helfen?
Folgender Code liefert keine Werte:
<table>
<form action="kundenliste/suche.php" method="post">
<tr>
<td style="width: 200px; font-size:13px">Suche nach</td>
<td><select name="suche"style="width: 205px; font-size:13px">
<option value="name">Nachname</option>
<option value="bearbeiter">Bearbeiter</option>
<option value="kundennummer">Kundennummer</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="text" name="suchfeld" style="width: 200px; font-size:13px"></td>
<td><input type="submit" style="width: 100px " name="sub_suche" value="Suche"></td>
</tr>
</form>
</table>
--------------------------------------------------------------------------
suche.php:
$verbindung = mysql_connect ("xy","ab", "xyz")
or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db("xxx")
or die ("Die Datenbank existiert nicht.");
$suche = $_POST["suche"];
$suchfeld = $_POST["suchfeld"];
$abfrage = "SELECT * FROM kundenlogin WHERE $suche LIKE '$suchfeld'";
$ergebnis = mysql_query($abfrage);
while ($row = mysql_fetch_object($ergebnis));
{
echo "$row->name <br>";
echo mysql_errno() . ": " . mysql_error() . "\n";
}
-------------------------------------------------------------------------
Übergabe der Variablen $suche und $suchfeld
Mahlzeit Starkoch,
$verbindung = mysql_connect ("xy","ab", "xyz")
or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
mysql_select_db("xxx")
or die ("Die Datenbank existiert nicht.");
"die()" ist ebenso sehr eine Fehlerbehandlung, wie Suizid eine Heilmethode ist.
Falls irgendwas beim Verbindungsaufbau schiefgeht, wirst Du SO niemals erfahren, was. Nutze error_reporting() sinnvoll!
$suche = $_POST["suche"];
$suchfeld = $_POST["suchfeld"];
Unnötig und fahrlässig.
$abfrage = "SELECT * FROM kundenlogin WHERE $suche LIKE '$suchfeld'";
Du hast vergessen, die von IRGENDWOHER an das Skript übergebenen Werte dem Kontext entsprechend zu behandeln - in diesem Fall mit mysql_real_escape_string(). Merke: ALL INPUT IS EVIL!
echo "$row->name <br>";
Ob das so funktioniert? Wieso schreibst Du nicht:
echo $row->name."<br>";
MfG,
EKKi
Hello,
echo "$row->name <br>";
Ob das so funktioniert? Wieso schreibst Du nicht:
echo $row->name."<br>";
oder doch besser
echo htmlspecialchars($row->name)."<br />\r\n";
?
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
htmlspecialchars hilft nix bei SQL Injection, oder?
Hallo!
htmlspecialchars hilft nix bei SQL Injection, oder?
Nein, aber bei "HTML Injection".
mfg
frafu
»»<td><input type="submit" style="width: 100px " name="sub_suche" value="Suche"></td>
Ich habe keine Ahnung was du mit all den Backslashs vor hast, und man sollte auch keine Tabellen für so etwas verwenden, aber du kannst sicher nicht $_POST["suche"] aus dem Feld name="sub_suche" auslesen.
Ich habe keine Ahnung was du mit all den Backslashs vor hast, und man sollte auch keine Tabellen für so etwas verwenden, aber du kannst sicher nicht $_POST["suche"] aus dem Feld name="sub_suche" auslesen.
Ach sorry, ich hab mich komplett verlesen! Ohne Syntax-Highlighting und mit den ganzen ""s...
Hör lieber auf EKKi!
$suche = $_POST["suche"];
das ist kein Zahlenwert, daher sollte in der Abfrage
$abfrage = "SELECT * FROM kundenlogin WHERE '$suche' LIKE '$suchfeld'";
die $suche auch in Hochkommas sein.
kannst auch mal zwischen
$abfrage = "SELECT * FROM kundenlogin WHERE $suche LIKE '$suchfeld'";
und $ergebnis = ...
ein echo $abfrage; einfügen um zu sehen, ob die abfrage richtig ist und die variablen übergeben wurden.
$suche = $_POST["suche"];
das ist kein Zahlenwert, daher sollte in der Abfrage
$abfrage = "SELECT * FROM kundenlogin WHERE '$suche' LIKE '$suchfeld'";
die $suche auch in Hochkommas sein.
Danke Alex. Jetzt springt die Kuh übers Messer ;-)
Vielen Dank für Eure Hilfe.
Also, habe versucht die Hinweise umzusetzen ...
$verbindung = mysql_connect ("xx","xx", "xx")
or die(mysql_error());
mysql_select_db("xx")
or die(mysql_error());
//--------------------Abfrage der Kundendaten aus Datenbank----------//
$abfrage = "SELECT * FROM kundenlogin WHERE {$_POST['suche']}='{$_POST['suchfeld']}'";
$ergebnis = mysql_query($abfrage);
while ($row = mysql_fetch_object($ergebnis));
{
echo $_POST['suche'];
echo $row->name;
echo $_POST['suchfeld'];
}
echo mysql_errno() . ": " . mysql_error() . "\n";
Ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in xx/suche.php on line 16
1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '=''' at line 1
...was sagt mir das?
Die DB-Abfrage/Auslesung von anderen Seiten funktioniert jedoch.
Mahlzeit Starkoch,
$abfrage = "SELECT * FROM kundenlogin WHERE {$_POST['suche']}='{$_POST['suchfeld']}'";
Ich sehe hier IMMER NOCH eine scheunentorgroße Sicherheitslücke - wenn Du angeblich die Hinweise umgesetzt hast, wieso hast Du dann meine Empfehlungen bzw. mysql_real_escape_string() ignoriert?
1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '=''' at line 1
...was sagt mir das?
Dass Deine zusammengebaute SQL-Anweisung irgendwie fehlerhaft ist. Lass sie Dir doch einfach mal zum Debuggen ausgeben ...
Die DB-Abfrage/Auslesung von anderen Seiten funktioniert jedoch.
Mit der gleichen Syntax? Ich wette eine Badewanne voll Schampus, dass nicht!
MfG,
EKKi