Fronk: Variablen, Anführungszeichen und ich kotz gleich!

Hi,

sorry für meine Emotionalität, aber ich raff das einfach mal wieder nicht.

Folgende Abfrage klappt in Script1 und in Script2 klappt dieselbe Abfrage nicht, weil $ID, obwohl per Link mitgegeben, nicht umgesetzt wird, obwohl per $_REQUEST eingelesen...

$ID = $_REQUEST['ID'];

$result=mysql_query("select * from A where ID=$ID AND Del!=1");

Wie bitte muß ich die Query denn formulieren?

Und warum klappts mal und mal nicht?

Grüße, Frank

  1. Hello,

    Folgende Abfrage klappt in Script1 und in Script2 klappt dieselbe Abfrage nicht, weil $ID, obwohl per Link mitgegeben, nicht umgesetzt wird, obwohl per $_REQUEST eingelesen...

    $ID = $_REQUEST['ID'];

    Die Benutzung von $_REQUEST ist meistens die falsche Wahl. Entscheide Dich lieber für $_GET (Link) oder $_POST (Formular), wenn nicht ein wirklich guter Grund für $_REQUEST spricht.

    Außerdem braucht Du die Variable nicht von einer in eine andere umzukopieren. Du kannst direkt $_GET['ID'] benutzen.

    Damit Dir aber niemand etwas böses ins Query einschleppt, solltest Du $_GET['ID'] noch vorbehandeln. Wenn es ein String ist, mit mysql_real_escape_string()
    http://www.php.net/manual/en/function.mysql-real-escape-string.php
    oder http://www.php.net/manual/en/mysqli.real-escape-string.php
    und wenn es ein Integer ist, was bei IDs ja normal wäre,  z.B. mit intval()
    http://www.php.net/manual/en/function.intval.php

    Flasche Eingaben würden dann einfach 0 ergeben, sodass der Index 0 in der Tabelle auch für einen ungültigen Wert stehen sollte, bzw. eben gar nicht aufgenommen wird.

    $result=mysql_query("select * from A where ID=$ID AND Del!=1");

    Wenn $_GET['ID'] ein String ist, muss dieser auch entsprechend quotiert werden im Query.
    "select *" solltest Du Dir nicht angewöhnen, sondern besser gleich "select $fieldlist" benutzen, wobei $fieldlist dann die Liste der abzufragenden Felder enthält.

    Su solltest den Querystring vorher einer Variablen zuweisen

    $sql = "select $fieldlist from A where ID=$ID AND Del!=1");

    Dann kannst Du es Dir auch vorher zum Debuggen ausgeben lassen, oder zumindest, wenn etwas schiefgegangen ist.

    Ob etwas schief gegangen ist, solltest Du auch abfragen:
    http://www.php.net/manual/en/mysqli.query.php

    $res = mysqli_query($sql, $conn);

    if (!$res)
        {
            echo mysqli_error($conn);   # http://www.php.net/manual/en/mysqli.error.php
        }
        else
        {
            # weiterarbeiten
            # ...
        }

    MySQL sollte Dir auf diese Weise schon mitteilen, warum das Query nicht funktioniert hat.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. »

      Wenn $_GET['ID'] ein String ist, muss dieser auch entsprechend quotiert werden im Query.

      Genau DAS wollte ich wissen, wie geht!
      Denn nur das ist für meine Fehlermeldung verantwortlich. Sollte eigentlich aus meinem Betreff aber auch herauslesbar gewesen sein.
      Ach egal. Ich frag woanders nach...

      1. Hello,

        Ach egal. Ich frag woanders nach...

        Und tschüss ...

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de