Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 22

Thema: MySQL-Error

  1. #1
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52

    MySQL-Error

    Hi,

    Wie ihr bestimmt sehen könnt bin ich neu hier, hoffe aber das ich keine Fehler mache was das erstellen von Threads betrifft :-)

    Also mein Problem:

    Ich habe begonnen php zu lernen und habe bereits einen Fehler den ich nicht beheben kann vielleicht wisst ihr ja weiter.

    PHP-Code:
    $sql "SELECT "."id, user, password"."FROM "."auth"."WHERE "."(user = '".$_POST["user"]."') AND "."(password = PASSWORD ('".$_POST["password"]."'))"
    Wenn ich das Forumlar aufrufe sag er mir in dieser Zeile sei ein Fehler:

    Code:
    FehlerYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(user = 'khaag') AND (password = PASSWORD ('fad'))' at line 1
    Ich währe euch sehr dankbar wenn ihr mir helfen könnt.

    Vielen Dank schon mal

    MFG

    Kevin Haag
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    In deinem SQL-Statement fehlen einige Leerzeichen. Nebenbei bemerkt: du musst nicht jedes Feld mit . an den String anhängen. So sollte es funktionieren (ungetestet):
    PHP-Code:
    $sql "SELECT id, user, password FROM auth WHERE (user = '".$_POST["user"]."') AND (password = PASSWORD ('".$_POST["password"]."'))"
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    Hi,

    Vielen Dank für deine Hilfe ich glaube nun funktioniert das mit der SQL Abfrage.
    Jetzt habe ich leider ein weiteres Problem:

    PHP-Code:
    <?php
        
    include 'config.php';    //include config file
        
    connect();                //connect database
        
    select_db_login();        //select database
        //Login prüfen 
        
    $sql "SELECT id, user, password FROM auth WHERE (user = '".$_POST["user"]."') AND (password = PASSWORD ('".$_POST["password"]."'))"
        
    $result mysql_query ($sql);
        echo 
    $result;
        echo 
    "<br>";
        if (
    mysql_num_rows ($result) > 0
        { 
          
    header ("Location: loged_in.html"); 
        } 
        else 
        { 
          echo 
    "Fehler"
        }
    ?>
    Wenn das Script ausgeführt wird also wenn das Formular abgschickt wurde kommt die Medldung.
    (Wird durch echo $sql hervorgerufen)
    Code:
    Resource id #4
    Den Benutzer den ich aber vorhin im Formular eingegeben habe existiert in der Datenbank also sollte ich doch auf die Seite loged_in.html weitergeleitet werden, oder?
    Jetzt wird einfach nur echo "Fehler"; ausgegeben.

    Wenn die Information zu spärlich sind bitte einfach melden

    MFG

    Kevin Haag
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Vor einem header(...) befehl darf kein Output stattfinden. Also alle echo vor dem header(...) streichen.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  5. #5
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von linuxjohnny Beitrag anzeigen
    PHP-Code:
    include 'config.php'
    Benutz bei wichtigen Dateien require statt include (Unterscheid steht im PHP-Manual).

    Zitat Zitat von linuxjohnny Beitrag anzeigen
    PHP-Code:
    $sql "SELECT id, user, password FROM auth WHERE (user = '".$_POST["user"]."') AND (password = PASSWORD ('".$_POST["password"]."'))"
    Hier verlässt du dich darauf, dass "Magic Quotes" aktiviert sind. Da du gerade erst mit PHP anfängst und Magic Quotes in PHP 6 abgeschafft werden, solltest du dich am besten gleich daran gewöhnen, das deaktivieren und jeweils ein addslashes() um die $_POST-Daten schreiben, um die zu escapen.
    Ansonsten hast du eine Sicherheitslücke: http://de.wikipedia.org/wiki/SQL-Injektion
    Außerdem solltest du dir das mal angucken: http://www.php.net/manual/de/security.php

    Zitat Zitat von linuxjohnny Beitrag anzeigen
    Wenn das Script ausgeführt wird also wenn das Formular abgschickt wurde kommt die Medldung.
    Code:
    Resource id #4
    Das ist der Inhalt der Variable $result - hast du per echo ausgegeben.

  6. #6
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    Also ich habe nun den echo vor dem header(); gestrichen nun sieht der Code so aus:

    PHP-Code:
    <?php
        
    require ("config.php");    //include config file
        
    connect();                //connect database
        
    select_db_login();        //select database
        //Login prüfen 
        
    $sql "SELECT id, user, password FROM auth WHERE (user = '".$_POST["user"]."') AND (password = PASSWORD ('".$_POST["password"]."'))"
        
    $result mysql_query ($sql);
        if (
    mysql_num_rows ($result) > 0
        { 
          
    header ("Location: loged_in.html"); 
        } 
        else 
        { 
          
    header ("Location: login.html"); 
        }
    ?>
    Leider werde ich einfach nicht auf die Seite loged_in.html weitergeleitet, an was könnte das liegen?
    Wenn ich jetzt aber ein echo(); vor dem Header haben will was kann ich da machen?

    @BLUESCREEN3D

    Wenn ich das ändern möchte müsste es dann so aussehen (laut wiki):

    PHP-Code:
    $abfrage "SELECT spalte1 FROM tabelle WHERE 
                spalte2 = '"
    .mysql_real_escape_string($_POST['spalte2Wert'])."'"
    Und wie meinst du das mit der Funktion addslashes() um die $_POST-Daten
    Könntest du mir ein Beispiel mit dem oben gennanten Code von Wiki machen, danke.

    MFG

    Kevin Haag
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  7. #7
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von linuxjohnny Beitrag anzeigen
    Leider werde ich einfach nicht auf die Seite loged_in.html weitergeleitet, an was könnte das liegen?
    Schreib mal ganz an den Anfang des Skriptes folgendes:
    PHP-Code:
    error_reporting(E_ALL); 
    Ansonsten wäre die einfachste Möglichkeit, nach dem Fehler zu suchen, erstmal die header()-Aufrufe auszukommentieren und stattdessen da per echo eine Meldung auszugeben.
    Und wenn alles nichts hilft: Einen Packet-Sniffer nutzen, um zu sehen, was wirklich vom Server zum Browser gesendet wird.

    Zitat Zitat von linuxjohnny Beitrag anzeigen
    Wenn ich jetzt aber ein echo(); vor dem Header haben will was kann ich da machen?
    header("Location: ...") teilt dem Browser mit, dass er eine andere Seite abrufen soll. Wozu also eine Ausgabe, wenn der Browser sofort zu der anderen Seite wechselt?

    Zitat Zitat von linuxjohnny Beitrag anzeigen
    Und wie meinst du das mit der Funktion addslashes() um die $_POST-Daten
    Das addslashes sollte dahin, wo in dem Beispiel "mysql_real_escape_string" steht. mysql_real_escape_string() macht das gleiche wie addslashes(), escapet aber noch ein paar Zeichen mehr, damit der String auch in Logdateien in eine Zeile passt.
    Welche von beiden Funktionen du nutzt, ist in deinem Beispiel egal.

  8. #8
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    Ok ich habe mal error_reporting(E_ALL); am Anfang hingeschriben aber was könnte mir das helfen sprich sollte irgendwo eine Meldung kommen wenn etwas falsch ist?

    Ich habe nun die header(); durch ein echo(); ersetzt kommt aber immer das echo vom else.
    Sprich das Login funktioniert nicht warum auch immer???

    MFG

    Kevin Haag
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  9. #9
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    D.h. der Query wählt 0 Zeilen aus. Es gibt also keinen User mit dem von dir angegebenen Passwort.
    Lass dir $sql ausgeben, prüf, ob das so aussieht wie es sollte. Wenn alles in Ordnung ist, kannst du den Fehler weiter eingrenzen, indem du z.B. die WHERE-Bedingung password=... weglässt.

  10. #10
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    Also ich habe nun einen Benutzer ohne Passwort erstellt wenn ich mich mit dem angemolden habe funktioniert es perfekt und ich wurde auf die gewünschte Seite weitergeleitet.
    Ich weiss das es nun daran liegt, dass das Passwort das ich übermittle nicht mit dem übereinstimmt mit dem das in der MySQL steht.
    Irgendwie funktioniert das mit dem:

    (password = PASSWORD ('".mysql_real_escape_string($_POST['password'])."'))

    nicht.

    Aber wie könnte ich diesen Fehler beheben?

    MFG

    Kevin Haag
    Geändert von linuxjohnny (27-03-2008 um 22:53 Uhr)
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  11. #11
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Mit welchem Query legst du denn neue Benutzer an?

  12. #12
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    PHP-Code:
    $sql 'INSERT INTO `login`.`auth` (`id`, `user`, `password`) VALUES (NULL, \'test4\', PASSWORD(\'test\'));'
    Ausgabe von PHP-Code durch phpmyadmin
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  13. #13
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Das stimmt so weit.

    Hat das hier was ergeben?
    Lass dir $sql ausgeben, prüf, ob das so aussieht wie es sollte.

  14. #14
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    Meinst du echo $sql;

    PHP-Code:
    SELECT iduserpassword FROM auth WHERE (user 'test4') AND (password PASSWORD('test')) 
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

  15. #15
    Registrierter Benutzer Avatar von linuxjohnny
    Registriert seit
    26.03.2008
    Beiträge
    52
    Wenn ich echo $result; ausgebge kommt folgendes:

    Code:
    Resource id #4
    Deshalb können Pinguine nicht fliegen: Was nicht fliegt, kann auch nicht abstürzen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •