1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Tabellenabfrage scheitert.

Dieses Thema im Forum "PHP" wurde erstellt von MidnightBreeze, 3. Oktober 2016.

  1. MidnightBreeze

    MidnightBreeze Grünschnabel

    Code (Text):
    1. $qry=mysqli_query("SELECT * FROM botanfragen WHERE botid='$botid'", $con);
    2. if(!$qry)
    3. {
    4. header("Location:error.php?id=2");
    5. }
    Er gibt mir immer ein Error aus, auch wenn die $botid in der Datenbank exisitiert.
    Ich habe auch schon versucht die BotID direkt in die PHP zu schreiben, aber auch dann findet er nichts.
    Normalerweise soll das Error mit der ID 2 nur ausgelöst werden, wenn ein Bot nicht in der Datenbank existiert.

    Dass die Verbindung funzt weiß ich, da ich in die Datenbank in genau die gleiche Tabelle bots eintragen kann.
    Es ist nur die Abfrage die irgendwie nicht funzt.

    Hilfe? :D
     
  2. sheel

    sheel I love Asm Administrator

    Hi

    a) Ersetz '$botid' mit $botid wenns eine Nummer ist
    b) Was gibt echo mysqli_error($con); aus, direkt vor der header-Anweisung?
    c) SQL-Injections...
     
  3. MidnightBreeze

    MidnightBreeze Grünschnabel

    a) BotID ist Varchar. Ist ein TS3 String Aber in diesem Beispiel ist der Wert 123456bot
    Der Wert existiert auch in der Datenbank, also sollte er eigtl. nicht in den Errorzweig gehen.
    b)
    Habe den Code mal so gemacht:
    Code (Text):
    1. $qry=mysqli_query("SELECT * FROM botanfragen WHERE botid='$botid'", $con);
    2. if(!$qry)
    3. {
    4. echo mysqli_error($con);
    5. echo "test";
    6. echo mysqli_error($qry);
    7. //header("Location:error.php?id=2");
    8. }
    Und als Ausgabe krieg ich nur mein debugging "test"
    Code (Text):
    1.  test [/test]
    c) Was ist mit injections?
     
  4. MidnightBreeze

    MidnightBreeze Grünschnabel

    Muss man vllt. noch dazu sagen.
    Code (Text):
    1.  if(!qry)
    ist eigentlich ohne das Ausrufezeichen.
    Normalerweise soll er ja nur weitermachen wenn die Query eben nichts gefunden hat.

    Ich hab das nur mal zum debuggen geändert.
     
  5. sheel

    sheel I love Asm Administrator

    Also das mit dem Rufzeichen ist dann das Hauptproblem. Wenn "ohne" das Rufzeichen in das if reingegangen wird dann hat die Abfrage ohne Fehler funktioniert. Das Rufzeichen muss dabei sein um für Fehler reinzugehen. Leere Ergebnisse liefern hier nicht false.

    Und dann, wenn die Abfrage fehlerfrei durch ist, musst du zuerst eine Zeile vom Ergebnis fetchen, zB. mit mysqli_fetch_array. Wenn das false liefert war das Ergebnis leer.

    Injections:
    Deine derzeitige Abfrage ist ein Sicherheitsrisiko.
    Siehe Prepared Statements, da gibts genug Code :google:
     
  6. DerKleene1

    DerKleene1 Mitglied

    Müsste das nicht so lauten? Oder ist dies bei MySQLi egal?
    Code (SQL):
    1. $qry=mysqli_query($con, "SELECT * FROM botanfragen WHERE botid='$botid'");
     
    sheel gefällt das.
  7. MidnightBreeze

    MidnightBreeze Grünschnabel

    Sicher? Weiter unten bei einem Insert ist das $con auch hinten.
     
  8. sheel

    sheel I love Asm Administrator

  9. MidnightBreeze

    MidnightBreeze Grünschnabel

    Das mit dem $con war wirklich der Fehler warum nix funktioniert hat.
    Ich benutze jetzt diese Form (Nicht genau das, aber das entspricht ungefähr meinem Script):
    Code (Text):
    1. $user = $_GET['userid'];
    2.  
    3. $qry=mysqli_query($con, "SELECT * FROM users WHERE uid='$user'");
    4.  
    5. if(!$qry)
    6. {
    7.   echo "Datenbankfehler";
    8. } else {
    9.   if((mysqli_num_rows($qry)==0))
    10.   {
    11.     echo "User existiert nicht";
    12.   } else {
    13.     echo "User existiert bereits";
    14.  

    Als nächstes mache ich mich mal an die Sicherheit ^w^
     
Die Seite wird geladen...