Nobody: Variable in SQL-Befehl - wie gehts?

Tag,

wieso wird folgender Code nicht angenommen?

$art_sql="SELECT * FROM art WHERE art_ID = $id";
 $art_result=mysql_query($art_sql);

Anmerkung: Die Mysql-Verbindung klappt, die Übersicht wird korrekt ausgeführt. Nur wollte ich den Viewer per

www.seite.de/pfad/view_art.php?id=1

konfigurieren, das geht allerdings nicht.
Wo ist der Fehler?

Danke,
Nobody

  1. Hallo

    wieso wird folgender Code nicht angenommen?

    Nein? Wie macht sich das bemerkbar? Wird er (vielleicht vom Drucker) wieder ausgeworfen? ;)

    $art_sql="SELECT * FROM art WHERE art_ID = $id";

    Setze das "$id" einmal in einfache Anführungszeichen (').
    Lies auch dies:
    16.14. Warum soll ich nicht SELECT * schreiben?
    http://www.dclp-faq.de/q/q-sql-select.html

    www.seite.de/pfad/view_art.php?id=1

    Du bedenkst sicherlich auch, dass Register_gobals auf (hoffentlich) off ist und du an id per $_GET[#id'] heran kommst.

    Wo ist der Fehler?

    Eine Fehlerbeschreibung (was passiert? Was soll eigentlich passieren? MySQL-Fehlermelungen) deinerseits wäre sehr hilfreich.

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. Du bedenkst sicherlich auch, dass Register_gobals auf (hoffentlich) off ist

      Uhm.. auf meinem lokalen WAMP nicht.. schlecht?

      und du an id per $_GET[#id'] heran kommst.

      Muss ich das in den SQL-Befehl einbauen oder
      $id=$_GET[#id'];
      eingeben?

      MySQL-Fehlermelungen) deinerseits wäre sehr hilfreich.

      Keine, das ist ja der Spaß. Es wird einfach eine leere Seite mit verkrüppeltem <img> zurückgegeben.

      Gruß
      Nobody

      1. Hallo

        Du bedenkst sicherlich auch, dass Register_gobals auf (hoffentlich) off ist

        Uhm.. auf meinem lokalen WAMP nicht.. schlecht?

        Ja. Lies ein wenig im Archiv dazu, das wurde scon otmal behandelt "register_globals" wie gesagt als Suchbegriff nehmen.

        Muss ich das in den SQL-Befehl einbauen oder $id=$_GET['id']; eingeben?

        Wenn du einfach dort immer $_GET['id'] schreibst und id nun nicht überliefert wurde, bekommst du eine Warnmeldung. Es empfiehlt sich also immer, die Daten entsprechend zu überprüfe. zB so:
        $id = isset($_GET['id']) ? $_GET['id'] : "WertWennIDnichtGesetzt";
        das überprüft, ob id gesetzt ist. wenn ja, wird in $id jener parameter gespeichert, ansonsten hinten der defaultwert. Danach kannst du im Script mit $id arbeiten.
        Lies vielleicht auch
        12.1. Wie unterscheide ich böse Variablen von guten?
        http://www.dclp-faq.de/q/q-security-variablen.html
        und
        12.11. Prüfe importierte Parameter. Traue niemandem
        http://www.dclp-faq.de/q/q-sicherheit-parameter.html

        Keine, das ist ja der Spaß. Es wird einfach eine leere Seite mit verkrüppeltem <img> zurückgegeben.

        Ah, eine wertvolle Info, die bisher noch nicht da war. Aber es sollte eigentlich wie geschrieben an den ' liegen.

        Grüße
          David

        --
        >>Nobody will ever need more than 640k RAM!<<
        1981 Bill Gates
        1. Hallo,

          ich testete das Script auf einem Server mit register_globals = off, setzte die 's und probierte die id=isset($GET['id']..-Methode. Leider wurde weiterhin die leere Seite ausgegeben. Ich poste mal den ganzen Code (den php-Teil / URLs/Namen z.T. ersetzt), vielleicht liegt der Fehler an einer ganz anderen Stelle:

          <?php
           $id = isset($_GET['id']) ? $_GET['id'] : "1";
           require("mysql.inc.php");
           $db = mysql_connect("$sqlhost","$sqluser","$sqlpass") or
           die ("Verbindung fehlgeschlagen");
           mysql_select_db("$database",$db);
           $art_sql="SELECT * FROM art WHERE art_ID = '$id'";
           $art_result=mysql_query($art_sql);
           print $art_result['title'] ;
           print "<br><br>" ;
           print "<img src="http://www.url.de/" ;
           print $art_result['file'] ;
           print ""><br><br>" ;
           print $art_result['comment'] ;
           mysql_close();
           ?>

          Anmerkung 1: Mir ist bekannt, dass sich die print-Befehle stark vereinfachen lassen.

          Anmerkung 2: Die Inhalte/Arrays der Datenbank stimmen, sie wurden bereits in einem Testscript erkannt.

          Gruß
          Nobody

          1. Hallo

            Schaue einmal, was nah dem Auswerten in $id steht.
            Schraube einmal das error_reporting auf E_ALL und schaue, ob es Fehlermeldungen gibt.

            Du macht meine ich folgendes falsch: $art_result ist ein Zeiger auf Datenbankabfrageergebnis. Die Daten musst du normal mit mysql_fetch_array() oder so auswerten. Wenn sichergestellt ist, dass immer nur ein Ergebnis möglich ist, geht auch mysql_result(). Schaue dir die Funktionen einmal im Manual an.

            Grüße
              David

            --
            >>Nobody will ever need more than 640k RAM!<<
            1981 Bill Gates
            1. Hallo,

              ich fügte nun

              while($art=mysql_fetch_array($art_result)) {

              hinter

              $art_result=mysql_query($art_sql);

              ein und deaktivierte die $GET-Methode, da diese immer "1" ausgab, nun funktioniert alles.

              Vielen Dank für die Geduld
              Nobody

  2. Tag,

    wieso wird folgender Code nicht angenommen?

    $art_sql="SELECT * FROM art WHERE art_ID = $id";  $art_result=mysql_query($art_sql);

    der fehler ist, dass $id nochmal in einzelnen hochkomma stehen muss. bisher setzt php folgenden befehl ab, wenn 4711 in der variable $id drinne steht: SELECT * FROM art WHERE art_ID = 4711 das ist für die datenbank so, als wenn es noch eine spalte "4711" gäbe, die den selben wert enthalten kann wie die spalte art_ID. mit den hochkome wird dann daraus: SELECT * FROM art WHERE art_ID = '4711' was die datenbank dann verstehen wird.

    manuel