Login Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Login Problem

    Servus,
    ich bin noch relativ neu im Umgang mit PHP und habe ein Problem mit dem folgenden Skript.

    Vorweg möchte ich sagen das ich in phpmyadmin eine Datenbank erstellt in die sich bereits über 2 andere Skripte meine Nutzer registrieren könnten.
    Aufbau:
    db Name: buchungsliste
    db Tabelle: daten
    # Spalte
    1. ..........
    2. .........
    3. .........
    4.............
    5.benutzer
    6..............
    7...............
    8................
    9.................
    10...............
    11...........
    12.Passwort

    Jetzt wollte ich eig noch einen login dazu gestalten, damit sich halt direkt einloggen kann, wenn man schon registriert ist.

    s.h. folgende Skripte

    1. Skript: pw_eingabe scheint zu funktionieren...
    PHP-Code:

    <?php session_start();

    /*
       * Benutzer- und Passworteingabe
       * BA - pw_eingabe.php
    */

    ?>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
    <head>
    <title>Login</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <h2>Login</h2>

    <form action="pw_kontrolle.php" target="_self" method="post">
    <table>
    <?php
    if ( isset( $_SESSION['pw_mitteilung'] ) ) {
        
    // Es ist ein Passwort-Fehler aufgetreten
    echo '
        <tr><td colspan="2" style="color:red">'
    .$_SESSION['pw_mitteilung'].'</td></tr>';
        unset( 
    $_SESSION['pw_mitteilung'] );
    }
    ?>
    <tr>
    <td><strong>benutzer</strong></td>
    <td><input name="benutzer" size="30" type="text"
    </td>
    </tr>
    <tr>
    <td><strong>Passwort</strong></td>
    <td><input name="passwort" size="30" type="password" /></td>
    </tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr>
    <td colspan="2" align="right">
    <input name="absenden" value="Absenden" type="submit" />
    </td>
    </tr>
    </table>
    </form>

    </body>
    </html>




    2. Skript pw_kontrolle funktioniert nicht!!!!
    Angezeigt wird diese zeile $result= mysql_query.....
    könnte es vllt an der Bez. zu der darüberliegen Zeile liegen?
    Um Hilfe wär ich sehr dankbar, bin schon am verzweifeln...

    <?php session_start();
    PHP-Code:

    // Den Benutzer permanent speichern
    $_SESSION['benutzer'] = $_POST['benutzer'];

    include( 
    'db_abfrage.inc.php' );


    $sql 'SELECT * FROM daten WHERE benutzer=\''.$_SESSION['benutzer'].'\'';
    $result mysql_query'buchungsliste'$sql );
    #echo 'Zeile 15 - $result='.( $result === FALSE ? 'FALSE' : 'Ergebnis' );exit();

    if ( mysql_num_rows$result ) == ) {
        
    // Für die Bedingung SELECT * FROM daten WHERE benutzer='benutzer'
        // wurde kein Eintrag gefunden, d.h. Benutzer ist in der Datenbank nicht vorhanden

    $_SESSION['pw_mitteilung'] = 'Der Benutzer <strong>'.$_SESSION['benutzer']
        .
    '</strong> ist nicht bekannt.';
        
    header'Location: pw_unbek_benutzer.php' );
        exit();
    }

    $nutzer mysql_fetch_array$result );
    if ( 
    $nutzer['passwort'] != md5$_POST['passwort'] ) ) {
        
    // Das eingegebene Passwort stimmt nicht mit dem gespeicherten überein
    $_SESSION['pw_mitteilung'] = 'Das Passwort zum Benutzer '.$_SESSION['benutzer']
        .
    ' ist falsch.';
        
    header'Location: pw_eingabe.php' );
        exit();
    }

    $_SESSION['login_iO'] = TRUE;

    // weiter im normalen Ablauf
    echo 'Alles i.O.<br />'
    .'Nutzer = '.$_SESSION['benutzer'].'<br />'
    .'Passwort = '.$_POST['passwort'].'<br />'
    .'md5_PW = '.md5$_POST['passwort'] ).'<hr />';

    ?> 

  • #2
    Hi Steinchen87

    Da hat sich ganz ein kleiner Fehler eingeschlichen!
    Und zwar in folgender Zeile:

    PHP-Code:
    $sql 'SELECT * FROM daten WHERE benutzer=\''.$_SESSION['benutzer'].'\''
    Du hast ein Anführungszeichen zu viel drinn. Darum denkt der PHP Intepreter dass es sich bei der nächsten Zeile auch noch um einen String handelt und gibt diesen aus.

    Du könntest die Sache auch so schreiben:

    PHP-Code:
    $sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"
    Ich gehe davon aus, dass der Benutzer bei dir ganz normal abgelegt ist und nicht mit Sonderzeichen davor und dahinter?


    Gruss
    Zuletzt geändert von ddel; 05.01.2012, 08:53.

    Kommentar


    • #3
      PHP-Code:
      // Den Benutzer permanent speichern 
      $_SESSION['benutzer'] = $_POST['benutzer']; 
      Das würde ich so nicht tun!!

      1. So landet u.U. Schadcode in Session.
      2. Die UserId zu speichern ist vollkommen ausreichend.
      3. Erst die ID in Session speichern wenn die User Prüfung erfolgreich war
      4. Beachte/vermeide SQL Injections
      5. Das Passwort prüft man auch sofort im SQL
      Wir werden alle sterben

      Kommentar


      • #4
        Zitat von ddel Beitrag anzeigen
        Hi Steinchen87

        Da hat sich ganz ein kleiner Fehler eingeschlichen!
        Und zwar in folgender Zeile:

        PHP-Code:
        $sql 'SELECT * FROM daten WHERE benutzer=\''.$_SESSION['benutzer'].'\''
        Du hast ein Anführungszeichen zu viel drinn. Darum denkt der PHP Intepreter dass es sich bei der nächsten Zeile auch noch um einen String handelt und gibt diesen aus.

        Du könntest die Sache auch so schreiben:

        PHP-Code:
        $sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"
        Ich gehe davon aus, dass der Benutzer bei dir ganz normal abgelegt ist und nicht mit Sonderzeichen davor und dahinter?


        Gruss
        Danke schon mal, der Benutzer soll keine Sonderzeichen enthalten das ist korrekt ja.

        Kannst du mir die Zeile mal bitte so wieder geben das sie passt? Habe diese
        eingefügt und das Anführungszeichen was meines erachtens zu viel war wegg gemacht, aber es geht immer noch nicht

        Kommentar


        • #5
          Du wirst renovieren müssen!
          Wir werden alle sterben

          Kommentar


          • #6
            Zitat von Steinchen87 Beitrag anzeigen
            Kannst du mir die Zeile mal bitte so wieder geben das sie passt? Habe diese
            eingefügt und das Anführungszeichen was meines erachtens zu viel war wegg gemacht, aber es geht immer noch nicht
            Du kannst direkt die zweite Zeile verwenden, sollte so funktionieren!

            Kommentar


            • #7
              Zitat von ddel Beitrag anzeigen
              Du kannst direkt die zweite Zeile verwenden, sollte so funktionieren!
              Leider nicht wenn ich dieses eingebe wird immer noch: Parse error: syntax error, unexpected bei - $result = = mysql_query
              (wie auch schon vorher) angezeigt.

              Kommentar


              • #8
                PHP-Code:
                $result mysql_query'buchungsliste'$sql ); 
                Diese Zeile ist falsch. mysql_query erwartet einen String welcher den SQL Statement beinhaltet ("SELECT * FROM TABELLE).

                Die Datenbank (buchungsliste) musst du nicht migeben. Wenn du mit verschiedenen Datenbanken arbeitest, kannst du mysql_query noch die entsprechende Verbindung mitgeben. Wenn das aber nicht der Fall ist, reicht nur das SQL.

                Die Datenbank musst du beim Aufbau der Verbindung auswählen:

                PHP-Code:
                $db_sel mysql_select_db('buchungsliste'); 
                Nachdem du das alles gemacht hast, würde deine Zeile so aussehen:

                PHP-Code:
                $sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"
                $result mysql_query($sql); 

                Kommentar


                • #9
                  Zitat von Steinchen87 Beitrag anzeigen
                  Leider nicht wenn ich dieses eingebe wird immer noch: Parse error: syntax error, unexpected bei - $result = = mysql_query
                  (wie auch schon vorher) angezeigt.

                  ach ja un wenn ich nicht über Debug gehe, sondern über den localhost und den Benutzer mit Passwort eingebe (der bereits regestriert ist) dann findet er den nicht.

                  Kommentar


                  • #10
                    Zitat von ddel Beitrag anzeigen
                    PHP-Code:
                    $result mysql_query'buchungsliste'$sql ); 
                    Diese Zeile ist falsch. mysql_query erwartet einen String welcher den SQL Statement beinhaltet ("SELECT * FROM TABELLE).

                    Die Datenbank (buchungsliste) musst du nicht migeben. Wenn du mit verschiedenen Datenbanken arbeitest, kannst du mysql_query noch die entsprechende Verbindung mitgeben. Wenn das aber nicht der Fall ist, reicht nur das SQL.

                    Die Datenbank musst du beim Aufbau der Verbindung auswählen:

                    PHP-Code:
                    $db_sel mysql_select_db('buchungsliste'); 
                    Nachdem du das alles gemacht hast, würde deine Zeile so aussehen:

                    PHP-Code:
                    $sql "SELECT * FROM daten WHERE benutzer='".$_SESSION['benutzer']."'"
                    $result mysql_query($sql); 

                    Okay ja das habe ich bereits bei der Verbindung schon gemacht. Wenn ich das jetzt so eingebe dann sagt er mir das das Passwort zum Benutzer falsch ist. Was aber nicht stimmt. Habe mehrer Datenbanken in phpmyadmin drinn, arbeite aber hier nur mit der Datenbank buchungsliste.

                    Kommentar


                    • #11
                      Zitat von Steinchen87 Beitrag anzeigen
                      Wenn ich das jetzt so eingebe dann sagt er mir das das Passwort zum Benutzer falsch ist. Was aber nicht stimmt.
                      Wenn "er" das sagt, dann hat er zu 100% Recht Überprüfe nochmals ob du die richtige Datenbank anziehst, der Benutzer korrekt eingegeben ist und das Passwort stimmt.

                      Wenn das alles zutrifft und der Fehler ist noch da: Lösche den Benutzer und lege einen neuen an und merke dir gut das Passwort

                      Je nach Hoster den du hast, wird dem Benutzernamen noch etwas hinzugefügt. Bsp: du legst den Benutzer Test an. Abgespeichert wird das aber als Test_xy. Das kannst du am besten überprüfen wenn du in der Übersicht de Benutzer nachschaut wie der Name genau ist. Du musst natürlich genau diesen Namen verwenden!

                      Kommentar


                      • #12
                        Wie wäre es denn mal mit der kompletten Fehlermeldung?
                        Die Funktion mysql_query ist falsch angewendet. Einfach mal einen Blick in die PHP Dokumentation werfen: PHP: mysql_query - Manual

                        EDIT: Was passiert wenn Du das SQL Statement über phpMyAdmin direkt ausführst?
                        MM Newmedia | MeinBlog

                        Kommentar


                        • #13
                          PHP-Code:

                          // Daten des Servers:
                          $dbhost_ip 'localhost';    //Hostname
                          $dbuser    'php';         //Benutzer
                          $dbpw      '';             //Passwort
                          $dbname    'buchungsliste';

                          //----------------------------------------------------------
                          // Funktion Datenbankabfrage
                          function db_query$dbname$sql )
                          {
                              global 
                          $dbhost_ip$dbuser$dbpw;

                              
                          // Verbindung zum DB-Host herstellen
                              
                          $verbindung = @mysql_connect$dbhost_ip$dbuser$dbpw )
                                   or die (
                          'Verbindung zum Datenbank-Rechner (IP-Adresse '.$dbhost_ip.')
                                            konnte nicht hergestellt werden!<br />Fehlertext: '
                                   
                          .mysql_error());

                              
                          // auswählen der Datenbank
                              
                          mysql_select_db$dbname$verbindung );

                              
                          // ausführen einer SQL-Anfrage
                              
                          $result mysql_query$sql );

                              
                          // Datenbankverbindung schließen
                              
                          mysql_close$verbindung );

                              
                          // Rückgabe des Ergebnisses
                              
                          return( $result );
                          }
                          ?> 

                          hier noch ma die datei db_abfrage.inc.php die ich includiert hatte.
                          Vllt ist ja hier der Fehler versteckt. Weil meines erachtens nach greift er ja nicht auf die gewünschten Datensätze zu oder? Login benutzer wird ja nie erkannt

                          Kommentar


                          • #14
                            Nimm mal vor dem mysql_connect das @ Weg. Ich denke du wärst sehr interessiert daran zu sehen was da schief läuft..

                            Zudem, hast du überprüft ob der Benutzer php existiert? Und du bist dir ganz sicher, dass der Benutzer KEIN Passwort hat?

                            Wie ezkimo bereits gesagt hat, es wäre sehr hilfreich die ganze Fehlermeldung zu sehen dann.

                            Kommentar


                            • #15
                              Das einzigste was angezeigt wird ist der oben erwähnte Fehler aber nur beim Debugen. Sonst wird kein Fehler angezeigt. Bin absolut am verzweifeln, könnte mir jemand vllt einen Login mit allem drum un drann schreiben? Also abfrage, eingabe, kontrolle???

                              Servername = localhost
                              Benutzer = php
                              Passwort gibt es nicht!

                              Datenbankname: buchungsliste
                              Tabellename: daten

                              Spalten die angesprochen werden sollen:
                              1.Spalte: benutzer
                              2.Spalte: Passwort

                              Dafür wäre ich sehr dankbar sitze seit Tagen drann, komm einfach nicht weiter...

                              Kommentar

                              Lädt...
                              X