Starkoch: Variablen werden aus Mysql-Datenbank nicht ausgelesen

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

  1. 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

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. 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

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. htmlspecialchars hilft nix bei SQL Injection, oder?

        1. Hallo!

          htmlspecialchars hilft nix bei SQL Injection, oder?

          Nein, aber bei "HTML Injection".

          mfg
            frafu

  2. »»<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.

    --
    ie:% fl:| br:^ va:} ls:& fo:| rl:( n4:( ss:| de:] js:| ch:? sh:( mo:| zu:)
    1. 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!

      --
      ie:% fl:| br:^ va:} ls:& fo:| rl:( n4:( ss:| de:] js:| ch:? sh:( mo:| zu:)
  3. $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.

    1. $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 ;-)

  4. 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.

    1. 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

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|