tangotaenzer: mysql und php $_get

Hallo liebe Leute,

Vielleicht weiß jemand Rat für foldendes Problem:

Habe eine Tabelle in mysql angelegt

dann habe ich foldenden php-Code, welcher nach der Kategorie entsprechend (ist eine Zahl) nur die Datensätze anzeigen soll, die der Kategorie entsprechen. Aber leider funktioniert das nicht (wenn ich den Teil "AND kategorie=mysql_escape_string($kategorie)" weglasse werden alle Datensätze angezeigt. Daher vermute ich, dass das auswählen nach der Kategorie einen Fehler hat.

$kategorie =$_GET["kategorie"];
include("include.inc.php");
$result = mysql_query("SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news
WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)");

Vielen Dank schom mal für Eure Hilfe!

  1. Mach mal eine Kontrollausgabe von dem was in mysql_query() steht. Und noch eine Frage, fängst eventuelle Du mysql-Fehlermeldungen ab?

    Nebenbei, es wäre nicht verkehrt zu überprüfen, ob in $_GET["kategorie"] wirklich eine Zahl steht.

    1. Hallo Texter,

      Mach mal eine Kontrollausgabe von dem was in mysql_query() steht.

      Wie macht man das???

      Und noch eine Frage, fängst eventuelle Du mysql-Fehlermeldungen ab?

      meinst Du damit error_reporting(E_ALL)?? (da ist nichts)

      Nebenbei, es wäre nicht verkehrt zu überprüfen, ob in $_GET["kategorie"] wirklich eine Zahl steht.

      ja, in der Tabelle steht eine Zahl.

      viele Grüße

      1. Hi!

        » Mach mal eine Kontrollausgabe von dem was in mysql_query() steht.

        Wie macht man das???

        Mit print, oder echo.

        Und noch eine Frage, fängst eventuelle Du mysql-Fehlermeldungen ab?

        meinst Du damit error_reporting(E_ALL)?? (da ist nichts)

        Es existiert mysql_error()

        » Nebenbei, es wäre nicht verkehrt zu überprüfen, ob in $_GET["kategorie"] wirklich eine Zahl steht.

        ja, in der Tabelle steht eine Zahl.

        Verrate nicht zu viel auf einmal, sonst haben wir die Lösung zu schnell gefunden und Ostern ist sooo lang;)

        Mal anders:

          
        echo "23"; // diese Ausgabe ist für uns Menschen als Zahl erkennbar  
        // der Rechner behandelt aber einen String :-X  
        
        

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. Hallo Peter Pan,

          »» » Mach mal eine Kontrollausgabe von dem was in mysql_query() steht.
          »» Wie macht man das???
          Mit print, oder echo.

          (Na klar, manchmal denkt man komplizierter als es ist)

          echo $kategorie        brachte nur einen weißen Bildschirm
          echo $result           resource id #4 und alle vorhandenen Datensätze

          »» Und noch eine Frage, fängst eventuelle Du mysql-Fehlermeldungen ab?
          »» meinst Du damit error_reporting(E_ALL)?? (da ist nichts)
          Es existiert mysql_error()

          auch hier nur ein weißer Bildschirm

          »» » Nebenbei, es wäre nicht verkehrt zu überprüfen, ob in $_GET["kategorie"] wirklich eine Zahl steht.
          »» ja, in der Tabelle steht eine Zahl.
          Verrate nicht zu viel auf einmal, sonst haben wir die Lösung zu schnell gefunden und Ostern ist sooo lang;)
          Mal anders:

          echo "23"; // diese Ausgabe ist für uns Menschen als Zahl erkennbar
          // der Rechner behandelt aber einen String :-X

            
          Die Zahl ist die id (Primary Key) aus einer anderen Tabelle.  
            
          Warte schon gespannt auf Eure Nachrichten  
            
          Viele Grüße
          
          1. Ergänzung zum vorangegangen Text:

            mysql error ergab folgende Meldung für "echo $kategorie":

            Table 'usr_xxxxx_1.tabelle' doesn't exist           (xxxxx = Name habe ich ebend geändert)

            Die Ausgabe verwundert mich, denn es ist sind ja Tabellen vorhanden. Wie spricht man nun die Tabellen und im besonderen die Spalte "kategorie" richtig an, damit als Endergebnis die Datensätze nach den Kategorien sortiert und nur die ausgewählte am Bild angezeigt wird (s. auch allerersten Text)????

            Viele Grüße

            1. mysql error ergab folgende Meldung für "echo $kategorie":

              Hä? mysql_error() liefert Fehlermeldungen der letzten mysql Abfrage und ob überhaupt ein Fehler aufgetreten ist, ist $reault zu entnehmen.

          2. echo $begrüßung;

            » » » Mach mal eine Kontrollausgabe von dem was in mysql_query() steht.
            » » Wie macht man das???
            » Mit print, oder echo.
            echo $kategorie        brachte nur einen weißen Bildschirm

            Gegen weiße Bildschirme hilft var_dump() statt echo oder print, denn das gibt in jedem Fall etwas aus. Da auch der Typ der Variablen sichtbar wird, ist dies die genaueste Ausgabe.

            echo "$verabschiedung $name";

            1. Gegen weiße Bildschirme hilft var_dump() statt echo oder print, denn das gibt in jedem Fall etwas aus. Da auch der Typ der Variablen sichtbar wird, ist dies die genaueste Ausgabe.

              Hallo,

              die Ausgabe für $kategorie war "NULL", war da nicht der weiße Bildschirm besser?? NULL das will man doch garnicht haben oder??

              Viele Grüße

              1. echo $begrüßung;

                » Gegen weiße Bildschirme hilft var_dump() statt echo oder print, denn das gibt in jedem Fall etwas aus. Da auch der Typ der Variablen sichtbar wird, ist dies die genaueste Ausgabe.
                die Ausgabe für $kategorie war "NULL", war da nicht der weiße Bildschirm besser?? NULL das will man doch garnicht haben oder??

                Nein. Als Kontrollausgabe zum Fehlersuchen will man die Information so genau wie möglich haben. Nichts wird auch bei false und Leerstring ausgegeben. Mit der var_dump()-Ausgabe kann man alles voneinander unterscheiden. Das NULL kann ein Hinweis auf einen Leseversuch einer nicht vorhandenen Variable sein. Zusammen mit einem auf E_ALL gestellten error_reporting wird das deutlicher, dann gibt es noch eine Notice dazu.

                echo "$verabschiedung $name";

          3. Hallo Peter Pan,

            »» »» » Mach mal eine Kontrollausgabe von dem was in mysql_query() steht.
            »» »» Wie macht man das???
            »» Mit print, oder echo.
            (Na klar, manchmal denkt man komplizierter als es ist)

            echo $kategorie        brachte nur einen weißen Bildschirm
            echo $result           resource id #4 und alle vorhandenen Datensätze

            Du soltest eine Ausgabe von dem machen, was in mysql_query() steht.

            $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news
            WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)";
            echo $sql;

            »» »» Und noch eine Frage, fängst eventuelle Du mysql-Fehlermeldungen ab?
            »» »» meinst Du damit error_reporting(E_ALL)?? (da ist nichts)
            »» Es existiert mysql_error()

            auch hier nur ein weißer Bildschirm

            Wie hast Du mysql_error() eingesetzt?

  2. Hello,

    gemeint war weiter unten im thread:

    $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
            FROM news
            WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)");

    echo "<p>".htmlspecialchars($sql)."</p>\r\n";

    $result = mysql_query($sql, $con);

    if (!$result)
    {
        echo "<p>Fehler im SQL-Statement: ".mysql_error($con)."</p>\r\n";
    }

    Nun müsste Dir entgegenspringen, was in Deinem SQL-Satement falsch ist.

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Lieber Tom vom Berg

      habe für folgenden Code

      <?php
      $kategorie =$_GET["kategorie"];
      include("include.inc.php");

      $sql = ("SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
              FROM news
              WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)");

      echo "<p>".htmlspecialchars($sql)."</p>\r\n";

      $result = mysql_query($sql, $con);

      if (!$result)
      {
          echo "<p>Fehler im SQL-Statement: ".mysql_error($con)."</p>\r\n";
      }
      ?>

      folgende Meldung erhalten:

      SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_escape_string()

      Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/www/xxxxx/html/webmeisterin/content-test.php on line 24

      Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in /home/www/xxxxx/html/webmeisterin/content-test.php on line 28

      Fehler im SQL-Statement:

      ---------------------------
      line 24 = $result = mysql_query($sql, $con);
      line 28 = echo "<p>Fehler im SQL-Statement: ".mysql_error($con)."</p>\r\n";

      Mir springt leider nichts ins Auge.

      Viele Grüße

      1. Hello,

        habe für folgenden Code

        $sql = ("SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                FROM news
                WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)");

        echo "<p>".htmlspecialchars($sql)."</p>\r\n";

        folgende Meldung erhalten:

        SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_escape_string()

        Ist "mysql_escape_string()" hier eine MySQL- oder eine PHP-Funktion?
        Wenn es eine PHP-Funktion ist, sollte man sie dann durch MySQL oder durch PHP ausführen lassen?

        echo "<p>Fehler im SQL-Statement: ".mysql_error($con)."</p>\r\n";

        Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/www/xxxxx/html/webmeisterin/content-test.php on line 24

        Du hast vermutlich Dein "include.inc.php" nicht angepasst.

        Dort müsste die Linkressource '$con' auch erzeugt werden durch das

        $con = mysql_connect(....);

        Liebe Grüße aus dem Cyberspace

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hallo Tom vom Berg,

          »» habe für folgenden Code

          »» $sql = ("SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
          »»         FROM news
          »»         WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)");
          »»
          »» echo "<p>".htmlspecialchars($sql)."</p>\r\n";
          »»
          »» folgende Meldung erhalten:
          »»
          »» SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_escape_string()

          Ist "mysql_escape_string()" hier eine MySQL- oder eine PHP-Funktion?
          Wenn es eine PHP-Funktion ist, sollte man sie dann durch MySQL oder durch PHP ausführen lassen?

          »»     echo "<p>Fehler im SQL-Statement: ".mysql_error($con)."</p>\r\n";

          »» Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/www/xxxxx/html/webmeisterin/content-test.php on line 24

          Du hast vermutlich Dein "include.inc.php" nicht angepasst.

          Dort müsste die Linkressource '$con' auch erzeugt werden durch das

          $con = mysql_connect(....);

          stimmt, das hatte ich nicht, danach kam dann folgendes:

          SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_real_escape_string()

          Fehler im SQL-Statement: FUNCTION usr_xxxxx.mysql_escape_string does not exist

          Allerdings hatte ich auch mal probiert, die Variable $kategorie auszugeben mit var_dump() (der Tip kam aus dem Forum) und die Ausgabe war "NULL". Ist das nicht ein Wert, den man so garnicht haben sollte??

          Die Funktion existiert nicht, bin leider meiner Lösung immer noch nicht näher, hast Du noch eine Idee?

          Viele Grüße

          1. Hello,

            »» Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/www/xxxxx/html/webmeisterin/content-test.php on line 24

            Du hast vermutlich Dein "include.inc.php" nicht angepasst.

            Dort müsste die Linkressource '$con' auch erzeugt werden durch das

            $con = mysql_connect(....);

            stimmt, das hatte ich nicht, danach kam dann folgendes:

            SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_real_escape_string()

            Fehler im SQL-Statement: FUNCTION usr_xxxxx.mysql_escape_string does not exist

            Nun bescheinigt MySQL Dir, dass Du Dein Statement falsch zusammengebaut hast. MySQL kennt die Funktion nicht, die du in der Textschnittstelle zur Ausführung übergeben hast. Richtig wäre aber, sie _ausgeführt_ zu übergeben, also nur ihr Ergebnis.

            $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                        FROM news
                        WHERE intro=1 AND kategorie = '" .
                        mysql_escape_string($kategorie) . "'";

            Nun wird die Funktion von PHP ausgeführt und nur noch das Ergebnis in den Query-String eingebaut.

            Ich habe hier angenommen, dass die Variable $kategorie auch einen Text und keine Zahl enthält und die Spalte kategorie in der Tabelle ein Textfomat hat.

            Wenn die Spalte kategorie ein numerisches Format hat, kannst Du anders abfragen:

            $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                        FROM news
                        WHERE intro=1 AND kategorie = " . intval($kategorie);

            Das setzt voraus, dass die Kategorie 0 als ungültig erkannt wird, also nicht existiert.

            Wenn der Parameter für die Kategorie per URL übergeben wird, dann taucht er im PHP-Script bei vernünftiger Einstellung im Array $_GET auf, also als $_GET['kategorie']. Das Element des Arrays kann ganz normal als Variable verwendet werden! Du kannst also gleich diese Variable in die Abfrage einsetzen.

            $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                        FROM news
                        WHERE intro=1 AND kategorie = " . intval($_GET['kategorie']);

            oder eben entsprechend mit mysql_escape_string() behandelt, wenn es keine numerische Spalte ist in der Tabelle.

            Allerdings hatte ich auch mal probiert, die Variable $kategorie auszugeben mit var_dump() (der Tip kam aus dem Forum) und die Ausgabe war "NULL". Ist das nicht ein Wert, den man so garnicht haben sollte??

            Dann hast Du in Deinem GET-Request keinen Parameter 'kategorie' angegeben.

            Liebe Grüße aus dem Cyberspace

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hallo Tom,

              erstmal danke für Deine ausführliche Antwort, aber es hat leider alles nichts geholfen.

              Als Meldung erhalte ich immer nur:

              SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie = 0
              Keine Artikel vorhanden

              folgender Code steht im BODY:

              <body style="background-color:white;">

              <?php
              error_reporting(0);
              $kategorie =$_GET["kategorie"];
              include("include.inc.php");
              /*$result = mysql_query("SELECT ID, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news
              WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)");*/

              /*$sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                      FROM news
                      WHERE intro=1 AND kategorie=mysql_escape_string($kategorie)";*/

              /*    $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                          FROM news
                          WHERE intro=1 AND kategorie = '" .
                          mysql_escape_string($kategorie) . "'";*/

              /*    $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                          FROM news
                          WHERE intro=1 AND kategorie = " . intval($kategorie);*/

              $sql = "SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie
                          FROM news
                          WHERE intro=1 AND kategorie = " . intval($_GET['kategorie']);

              echo "<p>".htmlspecialchars($sql)."</p>\r\n";

              $result = mysql_query($sql, $verbindung);

              if (!$result)
              {
                  echo "<p>Fehler im SQL-Statement: ".mysql_error($verbindung)."</p>\r\n";
              }

              // restlicher php-Code

              if(mysql_num_rows($result)==0)
              {
                echo "<h2>Keine Artikel vorhanden</h2>";
              }

              else
              {
               $menge = mysql_num_rows($result);
               while($rows =mysql_fetch_row($result))
               {

              ?>
                <div style="border-bottom: 0.1em solid gray" padding: 1.0em>
                <h2><?php echo $rows[2] ?></h2>
                <h4><?php echo $rows[3] ?></h4>

              <p>Eingetragen am: <?php echo $rows[4] ?> von: <?php echo $rows[5] ?> </p>
                <p>id: <?php echo $rows[0] ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kategorie: <?php echo $rows[6] ?></p>
                <br/>

              <a href="content_detail.php?id=<?php echo urlencode($row[0]) ?>
                &kategorie=<?php echo urlencode($kategorie) ?>">Weiterlesen</a>
                <br/>
                </div>

              <?php
               }
              }
              ?>
              <br/><br/>

              </body>

              Vielleicht siehst Du die Fehlerquelle.

              Vielen Dank und viele Grüße

              1. Von welchem Typ sind die Spalten intro und kategorie in deiner Tabelle? Und gib jetzt bitte keine Antwort von der Du nur denkst, daß sie richtig ist, weil Du Zahlen in den Spalten speicherst, sondern schaue nach wie der eingestellte Typ heißt.

          2. SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_real_escape_string()

            Fehler im SQL-Statement: FUNCTION usr_xxxxx.mysql_escape_string does not exist

            Allerdings hatte ich auch mal probiert, die Variable $kategorie auszugeben mit var_dump() (der Tip kam aus dem Forum) und die Ausgabe war "NULL". Ist das nicht ein Wert, den man so garnicht haben sollte??

            Die Funktion existiert nicht, bin leider meiner Lösung immer noch nicht näher, hast Du noch eine Idee?

            <inneres Auge>"Hallo McFly? Jemand zu Hause?"</inneres Auge>

            In $kategorie steht also nicht das drin, was Du erwartest, und mysql_real_escape_string() wird nicht als Funktion interpretiert und ausgeführt, sondern als string angesehen.

            Stelle Dir doch zur Abwechslung einfach mal selbst ein paar Fragen. Vorschlag: Warum ist das so? Woher kommt der Inhalt von $kategorie? Was ist ein String? Warum funktioniert echo "das: $kategorie ist der Inhalt von $kategorie";? Erst wenn diese Fragen beantwortet sind, fängst Du an über eine Lösung nachzudenken, dann und nicht früher.

      2. folgende Meldung erhalten:

        SELECT id, text, ueberschrift, aufmacher, datum, autor, kategorie FROM news WHERE intro=1 AND kategorie=mysql_escape_string()

        Sieh an, woher sollte php auch wissen, daß mysql_escape_string() eine Funktion ist die ausgeführt, und deren Rückgabewert in den String eingefügt werden soll.