SQL abfrage aus Datenbank

coldstone28

Mitglied
Hi,

ich möche eine Spalte aus einer mysql Datenbank auswählen und den Inhalt mit einer if Anweisung vergleichen.
Dementsprechend soll dann was zum testen ausgegeben werden.

CODE:
PHP:
if(isset($_GET["action"]) && $_GET["action"] == "mark" && isset($_GET["id"])) {

$auswaehlen = $verbindung->query("SELECT Markiert FROM Liste WHERE id =".$_GET["id"]."");
    $auswahl = mysqli_query($verbindung, $auswaehlen);

if($auswahl == '0') {

    echo "geandert";
} else {

    echo "nicht geandert";
    }
}

Ich glaube ich mache was beim selektieren falsch, weis aber nicht genau was.
Ich komme in die erste if bedingung rein.
Ich habe 4 Datensätze in der Datenbank.
Der erste Datensatz ist mit markiert=1
Der Rest mit markiert=0

Nur springt er bei mir immer in die else bedingung rein, obwohl ich die mit Markiert=0 anklicke.
Ich hoffe ich konnte es erklären. :)
 
Lass dir mal die Variable $auswahl mit var_dump ausgeben, dann wirst Du erkennen, warum es nicht funktioniert. Das Manual sagt über den Rückgabewert von mysqli_query:
For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object.
D. h. auch wenn Du nur einen Datensatz und darin nur ein Element brauchst, liefert er dir immer ein Result Object und Du musst dir das, was Du brauchst, herausholen.
 
ok, das verstehe ich aber nicht so ganz.
Wenn ich mit var_dump($auswahl) ausgebe, gibt er mir einen boolischen ausdruck zurück, was ja jetzt einleuchtend ist. In diesem fall wird bool(false) ausgegeben.
Aber er müsste doch dann in die else Anweisung springen und "nicht geandert" ausgeben.
Es wird aber "geandert" ausgegeben.
Weil die bedinung "bool(false) == 0" ja nicht erfüllt wird.
Oder muss ich das so verstehen "bool(false)" == 0" --> entspricht wieder "false" und die Bedingung ist erfüllt?

Zu der eigentlichen Frage zurückzukommen, wie greife ich den auf den Inhalt eines Objektes um damit einen vergleich zu machen?
 
In diesem fall wird bool(false) ausgegeben.
Dann stimmt etwas mit der Query bzw. den Parametern nicht. Die Abfrage ist nicht erfolgreich. Lies im Manual nach.

Oder muss ich das so verstehen "bool(false)" == 0" --> entspricht wieder "false" und die Bedingung ist erfüllt?
bool(false)" == 0 ergibt true, und zwar weil Du nur zwei Gleichheitszeichen verwendest, d. h. der Typ wird nicht geprüft. Verwende drei und ich erwarte, dass es false ergibt.

wie greife ich den auf den Inhalt eines Objektes um damit einen vergleich zu machen?
Ungetestet und ohne Gewähr:
Code:
$result = mysqli_query($verbindung, $auswaehlen);
if ($result !== false) {
    $row = mysqli_fetch_assoc($result));
    $auswahl = $row['Markiert'];
    if($auswahl == '0') {
 
Klassische SQL-Injection.

Jo meine idee wäre so
PHP:
if(isset($_GET["action"]) && $_GET["action"] == "mark" && isset($_GET["id"])) {
    $escape_id=mysqli_real_escape_string($verbindung,$_GET["id"]),
    $auswaehlen = "SELECT `Markiert` FROM `Liste` WHERE `id`='$escape_id'";
    $result = mysqli_query($verbindung, $auswaehlen);
    if(mysqli_num_rows($result) >=1){
          echo "geandert";// obwohl hier nix geändert wird bei SELECT
    } else {
         echo "nicht geandert";
    }
}
 
bool(false)" == 0 ergibt true, und zwar weil Du nur zwei Gleichheitszeichen verwendest, d. h. der Typ wird nicht geprüft. Verwende drei und ich erwarte, dass es false ergibt.

jupp, mit === passt es.


Ungetestet und ohne Gewähr:
Code:
$result = mysqli_query($verbindung, $auswaehlen);
if ($result !== false) {
    $row = mysqli_fetch_assoc($result));
    $auswahl = $row['Markiert'];
    if($auswahl == '0') {
Das funktioniert leider nicht. Irgendwas ist glaube ich beim selektieren aus der Datenbank was falsch, weil wenn ich mit
var_dump($auswahl) ausgebe, kommt als Meldung "NULL"
 
Ich habe das jetzt wie folgt gemacht und es funktioniert bis jetzt.

PHP:
if(isset($_GET["action"]) && $_GET["action"] == "mark" && isset($_GET["id"])) {

$auswaehlen = "SELECT Markiert FROM Liste WHERE id =".$_GET["id"]."";
    $auswahl = $verbindung->query($auswaehlen);
$row = $auswahl->fetch_assoc();
    
    if($row['Markiert'] == '0') {
        echo "ist null";
    } else {
        echo "ist eins";
    }
}

Vielen dank für die nette Hilfe.
 
Zurück