Problem mit Login Script

  • Hi,


    Ich habe ein kleines Problem mit meinem Login Script auf meiner Homepage.


    PHP-Einfach.de - Tutorial - Loginscript mit Sessions und Dateien


    Ich habe dieses benutzt.


    Jetzt habe ich die "user.txt" in ein verzeichniss vor dem "html" verzeichniss verschoben damit die Datei nicht vom Netz erreichbar ist,und ich damit mehr Sicherheit habe.


    Das hat auch alles soweit funktioniert,aber wenn ich jetzt einen Neuen Benutzer regestrieren möchte schreibt er nicht mehr in die "User.txt".. hinein woran kann das Liegen ?


    Ich habe den absoluten Pfad vom Server genommen also:


    /var/www/XXX/files/user.txt
    /var/www/XXX/html/index.php etc...



    Dies ist der Script zum registrieren Neuer Benutzer:



    [PHP]<?php
    $username = $_POST['username'];
    $password = $_POST['passwort'];
    $password2 = $_POST['passwort2'];




    if ($password == $password2)
    {
    $user_vorhanden = array();
    $passwort = md5($password);



    $userdatei = fopen ("/var/www/XXX/files/user.txt","r");
    while (!feof($userdatei))
    {
    $zeile = fgets($userdatei,500);
    $userdata = explode("|", $zeile);
    array_push ($user_vorhanden,$userdata[0]);
    }
    fclose($userdatei);




    if (in_array($username,$user_vorhanden))
    {
    echo "Username schon vorhanden <br> <a href=\"Registrieren.html\">zurück</a>";
    }


    else
    {
    $userdatei = fopen ("user.txt","a");
    fwrite($userdatei, $username);
    fwrite($userdatei, "|");
    fwrite($userdatei, $passwort);
    fwrite($userdatei, "\n");
    fclose($userdatei);
    echo "$username, deine Anmeldung war erfolgreich<br><a href=\"index.html\">zum Login</a>";
    }
    }


    else
    {
    echo "Die Passwörter sind nicht identisch<br> <a href=\"Registrieren.html\">zurück</a> ";
    }


    ?>[/PHP]Ich hoffe ihr könnt mir helfen...


    Mfg


    Luca




    Edit:


    Ich sehe grade egal was ich mache der "Zugriff" wird immer verweigert auch wenn die "User.txt" mit im Hauptordner liegt.

  • Gib der Datei mal CHMOD 777.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Nein.


    • Neue Datenbank erstellen
    • Tabelle mit Spalten erstellen
    • Datenbankverbindung mit PHP herstellen


    Gibt für dein Vorhaben auch eine menge Tutorials. Da du einen Loginbereich erstellen möchtest, informiere dich auch über Sessions.


    Wenn du PHP Anfänger bist, kann ich dir diese Seite empfehlen:
    Quakenet/#php Tutorial - de - Einleitung

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Verstehe die Frage nicht.
    Du kannst bei einer Session ein Cookie setzen und die Laufzeit selber bestimmen. Wenn man das nächste mal die Webseite besucht, ist man weiterhin eingeloggt. Erst wenn das Cookie gelöscht wird bzw abgelaufen ist, muss man sich neu einloggen.


    Ich würde auf jeden Fall eine Funktion zum Ausloggen auf der Seite mit einbinden, evtl. greift jemand aus einem Internet-Café auf deine Homepage zu, wenn dann ein Cookie gesetzt wurde, kann jemand anderes den Account verwenden. Es ist daher sinnvoll sich auszuloggen, bevor man die Webseite verlässt.


    Wenn du Session ohne Cookie verwendest, bleibt man nicht automatisch eingeloggt. Eine Sitzung (Session) dauert je nach Konfiguration etwa 30 Minuten, siehe:
    Quakenet/#php Tutorial - de - Sessions

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Okay, Dnake dir.


    Ich soll eine Tabelle in meiner Datenbank anlegen die so Aussehen soll:


    id, int, 8, unsigned, not null, , auto_increment, primary, ,
    username, varchar, 150, not null, , , , ,
    passwort, varchar, 32, not null, , , , ,




    Wie macht man das ^^


    bei mir kommt das raus xD

    Code
    [B]SQL-Befehl:[/B]     
                  CREATE  TABLE  `****`.`login` ( `username` INT( 8  )  UNSIGNED NOT  NULL  AUTO_INCREMENT ,
     `passwort` INT( 8  )  UNSIGNED NOT  NULL  AUTO_INCREMENT ,
     PRIMARY  KEY (  `username` ,  `passwort`  ) 
    ) ENGINE  =  MYISAM ;
    
    
         
          [B]MySQL meldet: [/B][URL='http://dev.mysql.com/doc/refman/5.1/de/error-messages-server.html'][IMG]https://myadmin-alfa3020.alfahosting-server.de/themes/original/img/b_help.png[/IMG][/URL] 
      #1075 - Falsche Tabellendefinition. Es darf nur eine  AUTO_INCREMENT-Spalte geben, und diese muss als Schlüssel definiert  werden
  • Code
    CREATE TABLE `users` (
      `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(150) NOT NULL,
      `password` varchar(32) NOT NULL,
      PRIMARY KEY (`id`)
    );


    ist ungetestet.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Thx,Tabelle sollte stehen, nur jetzt hab ich wieder mal ein problem :=(


    [PHP]Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/XXX/html/XXX/eintragen.php on line 19[/PHP][PHP]<?php
    $verbindung = mysql_connect("localhost", "XXX" , "XXX")
    or die("Verbindung zur Datenbank konnte nicht hergestellt werden");


    mysql_select_db("XXX") or die ("Datenbank konnte nicht ausgewählt werden");


    $username = $_POST['username'];
    $passwort = $_POST['passwort'];
    $passwort2 = $_POST['passwort2'];


    if($passwort != $passwort2 OR $username == "" OR $passwort == "")
    {
    echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"Registrieren.html\">Zurück</a>";
    exit;
    }
    $passwort = md5($passwort);


    $result = mysql_query("SELECT id FROM login WHERE username LIKE '$username'");
    $menge = mysql_num_rows($result);


    if($menge == 0)
    {
    $eintrag = "INSERT INTO login (username, passwort) VALUES ('$username', '$passwort')";
    $eintragen = mysql_query($eintrag);


    if($eintragen == true)
    {
    echo "Benutzername <b>$username</b> wurde erstellt. <a href=\"index.html\">Login</a>";
    }
    else
    {
    echo "Fehler beim Speichern des Benutzernames. <a href=\"Registrieren.html\">Zurück</a>";
    }



    }


    else
    {
    echo "Benutzername schon vorhanden. <a href=\"Registrieren.html\">Zurück</a>";
    }
    ?> [/PHP]Sry das ich dich hier so nerve :D:D


    Mfg
    Luca

  • Wichtiger Sicherheitshinweis:
    Informiere dich unbedingt über SQL Injections! Gib niemals $_POST-Daten direkt in einen SQL-Befehl.
    Vorher die Funktion mysql_real_escape_string() verwenden!!


    Ersetze in Zeile 18 diesen Eintrag:


    Code
    [/FONT][/FONT][FONT=monospace][FONT=Verdana]$result = mysql_query("SELECT id FROM login WHERE username LIKE '$username'");[/FONT][/FONT][FONT=monospace][FONT=Verdana]

    [/FONT][/FONT]


    gegen


    Code
    $result = mysql_query("SELECT `id` FROM `login` WHERE username = '$username'");


    Ebenfalls ungetestet.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Heisst deine Tabelle denn überhaupt login? Wenn du genau meinen SQL-Befehl genommen hast, heisst die Tabelle nämlich users.


    Dementsprechend muss dann auch der Query aussehen.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Hi,
    langsam kommen wir doch vorran ;)


    Ich möchte ja, dass du was lernst. Daher kau ich dir jetzt nicht alles vor, nun musst du selber mal überlegen:


    Passwort/Password


    Bitte poste deinen gesamten Code, damit ich den aktuellen Stand der Dinge sehe.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Perfekt :s24:*lach*


    Alles Funktioniert soweit !
    Benutzerdaten werden Angelegt,Passwor"T" wird in MD5 Verschlüsselt,so wie es sein soll!



    Hier noch mal die Script`s


    [PHP]<?php
    $verbindung = mysql_connect("localhost", "XXX" , "XXX")
    or die("Verbindung zur Datenbank konnte nicht hergestellt werden");


    mysql_select_db("XXX") or die ("Datenbank konnte nicht ausgewählt werden");


    $username = $_POST['username'];
    $passwort = $_POST['passwort'];
    $passwort2 = $_POST['passwort2'];


    if($passwort != $passwort2 OR $username == "" OR $passwort == "")
    {
    echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"Registrieren.html\">Zurück</a>";
    exit;
    }
    $passwort = md5($passwort);


    $result = mysql_query("SELECT `id` FROM `login` WHERE username = '$username'");
    $menge = mysql_num_rows($result);


    if($menge == 0)
    {
    $eintrag = "INSERT INTO login (username, passwort) VALUES ('$username', '$passwort')";
    $eintragen = mysql_query($eintrag);


    if($eintragen == true)
    {
    echo "Benutzername <b>$username</b> wurde erstellt. <a href=\"index.html\">Login</a>";
    }
    else
    {
    echo "Fehler beim Speichern des Benutzernames. <a href=\"Registrieren.html\">Zurück</a>";
    }



    }


    else
    {
    echo "Benutzername schon vorhanden. <a href=\"Registrieren.html\">Zurück</a>";
    }
    ?> [/PHP][PHP]<?php
    session_start();
    ?>


    <?php
    $verbindung = mysql_connect("localhost", "XXXX")
    or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db("XXX") or die ("Datenbank konnte nicht ausgewählt werden");


    $username = $_POST['username'];
    $passwort = md5($_POST['password']);


    $abfrage = "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
    $ergebnis = mysql_query($abfrage);
    $row = mysql_fetch_object($ergebnis);


    if($row->passwort == $passwort)
    {
    $_SESSION['username'] = $username;
    echo "Login erfolgreich. <br> <a href=\"/XXX/index.php\">Geschützer Bereich</a>";
    }
    else
    {
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"index.html\">Login</a>";
    }


    ?> [/PHP]
    Ich danke dir das du mir Heute so geholfen hast :)
    Ist echt ein Klasse Forum^^



    Mfg


    Peter


    P.S Schönen Abend noch.. Ohne mich:D:D

  • Du hast den Sicherheitshinweis von mir nicht beachtet. Das solltest du SCHNELLSTMÖGLICH (!) nachholen.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Ruh dich erstmal aus, morgen gehts weiter ;)
    Die Datenbankverbindungsdaten nicht veröffentlichen, nur den Rest. Habe deinen Beitrag oben deshalb editiert.

    Hauptrechner: Intel Q6600 | Gigabyte P35-DQ6 | ATi Radeon 2900XT | 4 GB OCZ RAM | Corsair HX520W | 31 TB Festplattenkapazität | 120 GB OCZ Vertex II SSD | Wasserkühlung


    LAN-Rechner: Intel Xeon UP W3520 | nVidia Geforce 8800 GTS | 4 GB TeamGroup RAM | LC Power LC6550 | 640 GB Platte


    HTPC: AMD Athlon II X2 250 | Foxconn A88GM Deluxe | 4 GB TeamGroup RAM | 3 TB Hitachi Platte

  • Zitat von Desert_Igel;789795

    Ruh dich erstmal aus, morgen gehts weiter ;)
    Die Datenbankverbindungsdaten nicht veröffentlichen, nur den Rest. Habe deinen Beitrag oben deshalb editiert.



    Das mach ich jetzt auch :D
    Schönen Abend noch.Und danke für das editieren:-)


    Mfg


    Luca

  • Hey, So dan wollt ich heute mal weitermachen:D



    was meinst du den mit " Wichtiger Sicherheitshinweis:
    Informiere dich unbedingt über SQL Injections! Gib niemals $_POST-Daten direkt in einen SQL-Befehl.
    Vorher die Funktion mysql_real_escape_string() verwenden!!" ??



Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!