Stephan: Probleme bei einfacher Datenbankabfrage

Hallo alle zusammen.

Ich habe gerade mit PHP angefangen und wollte zwei Datenbankabfragen machen. Bei der ersten klappt es auch einwandfrei.

Hier der Code:

<?
$sql = 'SELECT * FROM zitate ORDER BY id';
$result = mysql_query($sql);
if ($result > 0){
 while ($author = mysql_fetch_array($result)){

echo "<table width='490' border='0' cellpadding='0' cellspacing='0' align='center'>";
      echo "<tr>";
      echo "<td width='245' align='center'><a href='?p=41&auswahl=".$author[1]."'>".$author[1]."</a></td>";
      echo "<td width='245' align='center'><a href='?p=41&auswahl=".$author[2]."'>".$author[2]."</a></td>";
      echo "</tr>";
      echo "<tr>";
      echo "<td colspan='2'>&nbsp;</td>";
      echo "</tr>";
      echo "</table>";
 }

}else{
      echo "Hier ist zur Zeit leider noch kein Inhalt!";
      }
?>

Die Ergebnisse werde mir einwandfrei ausgegeben. Nun möchte ich im Link echo "<td width='245' align='center'><a href='?p=41&auswahl=".$author[1]."'>".$author[1]."</a></td>"; eine weiter Variable mitgeben. Die auswahl Variable.
In HTML sieht der Link dann so aus: <a href="http://www.beispiel.de/?p=41&auswahl=AbrahamLincoln">AbrahamLincoln</a>

Auf der Seite habe ich dann diesen Code zu laufen:

<?
$sql = 'SELECT * FROM zitate WHERE author='.$auswahl;
$result = mysql_query($sql);
if ($result > 0){
     echo "<strong>".$auswahl."</strong>";
 while ($author = mysql_fetch_array($result)){

echo "<div align='center'>".$author[1]."</div>";
 }

}else{
      echo "Hier ist zur Zeit leider noch kein Inhalt!";
      }
?>

Allerdings wird mir hier keine Ergebnisse angezeigt.

Ich weiß nicht, wo der Fehler liegt. Für Eure Hilfe bedanke ich mich im voraus.

Gruß Stephan

  1. Gesünder wäre etwas wie:

    $my_query = "SELECT * FROM zitate WHERE author='".mysql_escape_string($auswahl)."'";

    Überprüfe SQL-Kommandos doch am besten mit einer Software wie phpmyadmin. Der gibt dir die mysql-Fehlermeldungen aus und formatiert dir dein Query.

    Fehler könnten hier sein: Das Leerzeichen zwischen und zitate - die fehlenden ' zur Maskierung deines SELECT-Strings.

    Zudem: Nutzereingaben immer mistrauen.

  2. Hello,

    $sql = 'SELECT * FROM zitate WHERE author='.$auswahl;

    1. Es ist sicherheitstechnisch inakzeptabel, Eingaben von außen ohne weiteres zu übernehmen. Bei Gelegenheit solltest du dich mit der Problematik der SQL-Injektion sowie Gegenmaßnahmen (z.B. http://uk.php.net/mysql_real_escape_string@title=mysql_real_escape_string]) auseinander setzen
    2. Dein Quellcode verlässt sich auf die veraltete Einstellung register_globals=on, durch die aus einem Parameter auswahl automatisch eine Variable $auswahl wird - das solltest du dir ebenfalls abgewöhnen, es wird schnell zu Problemen führen. Siehe hierzu PHP-FAQ.
    3. Lass dir mal per echo $sql; das fertige Statementausgeben - siehst du einen Fehler? Wenn nicht, lass das Statement in PHPMyAdmin laufen.

    $result = mysql_query($sql);

    prüfe, ob der Befehl erfolgreich ausgeführt wurde; falls nicht, prüfe mittels mysql_error, was schief gelaufen ist, siehe z.B. hier.

    Und ganz zum Schluss die entscheidende Frage: Hast du eine Tabelle " zitate" oder nur eine Tabelle "zitate"?

    MfG
    Rouven

    --
    -------------------
    There's no such thing as a free lunch  --  Milton Friedman
  3. $sql = 'SELECT * FROM zitate WHERE author='.$auswahl;

    Ich würde mal spontan tippen, dass es nicht $auswahl, sondern $_GET[auswahl] sein soll...

    1. $sql = 'SELECT * FROM zitate WHERE author='.$auswahl;

      Ich würde mal spontan tippen, dass es nicht $auswahl, sondern $_GET[auswahl] sein soll...

      Was soll ich sagen, so ist es. dein Tipp war richtig, und wieder habe ich hier durch die Antworten eine Menge gelernt. Ich danke euch allen vielmals.

      Gruß und einen schönen Abend

      Stephan

  4. Erstmal vielen Dank für die schnellen Antworten.

    Also, wenn ich das richtig verstanden habe, wird der Wert, den ich per auswahl weitergebe, nicht als Variable übernommen. Nun gut. Der Link PHP Faq hat mir zwar die Erkenntnis gebracht, das es so nicht funktioniert, aber da ich dem Englischen leider nicht mächtig bin, ich schäme mich wirklich dafür, bringt es mich nicht wirklich weiter.

    Wie müsste ich denn den Wert von der Auswahl abfragen, dass er als Variable übernommen und erkannt wird?

    1. Wie müsste ich denn den Wert von der Auswahl abfragen, dass er als Variable übernommen und erkannt wird?

      Mit superglobalen Variablen im Sinne von $_GET oder $_POST - je nach Übertragungsart.
      Grüße.