• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PN-System mit LogIn

Status
Für weitere Antworten geschlossen.

Fredmonster

Neues Mitglied
habe bisher diesen Codes:

PHP:
<?php
        mysql_connect('localhost', 'web115', 'passwort') or die(mysql_error());
        mysql_select_db('usr_web115_1') or die(mysql_error());
$user=$_POST['username'];
$pass=$_POST['passwort'];

if (empty($user)){
die("Bitte geben Sie einen Benutzernamen ein!");
}

if (empty($pass)){
die("Bitte geben Sie ein Passwort ein!");
}

$sql= "SELECT
    Benutzername
    FROM
    reg;";
$user_dat=mysql_query($sql) OR die(mysql_error());
$sqll="SELECT
    Passwort
    FROM
    reg;";
$pass_dat=mysql_query($sqll) OR die(mysql_error());
echo $user_dat;
if($user==$user_dat AND $pass==$pass_dat){
echo "Willkommen";
}
else{
echo "Sie haben einen inaktiven Benutzernamen oder ein falsches Passwort eingegeben!";
}
?>


Das ist die registrieren.php

PHP:
<?php
        mysql_connect('localhost', 'web115', 'passwort') or die(mysql_error());
        mysql_select_db('usr_web115_1') or die(mysql_error());

$benutzername=$_POST['benutzername'];
$passwort=$_POST['passwort'];
$passwort2=$_POST['passwort2'];
$icq=$_POST['icq'];
$sig=$_POST['signatur'];
$email=$_POST['email'];
if (empty($benutzername))
{
die ("<strong>-Bitte geben Sie einen Benutzernamen ein!</strong><br />\n");
}
if (empty($passwort))
{
die ("<strong>-Bitte geben Sie ein Passwort ein!</strong><br />\n");
}
if ($passwort!=$passwort2)
{
die ("<strong>-Bitte geben Sie zweimal das gleiche Passwort ein!</strong><br />\n");
}
if (empty($email))
{
die ("<strong>-Bitte geben Sie Ihre email-Adresse ein!</strong><br />\n");
}
$schreiben= "INSERT INTO reg
                (Benutzername, Passwort, Email, Icq, Signatur, Datum)
            VALUES
                ('".htmlspecialchars($benutzername)."',
                '".htmlspecialchars($passwort)."',
                '".htmlspecialchars($email)."',
                '".htmlspecialchars($icq)."',
                '".htmlspecialchars($sig)."',
                NOW())";
        mysql_query($schreiben) or die(mysql_error());
echo "Sie wurden erfolgreich registriert!\n";
?>


Und das die log_ein.php

Bitte nicht lange posten, was ich alles falsch gemacht habe sondern eine gute Lösung posten! Wäre super nett, wenn mir sogar jemand das mit dem pn-system zeigen könnte.. Vielen Dank schon mal Fredmonster

p.S: Problembeschriebung:
mein Problem ist, dass er mich nicht einloggt, dass heißt, ich erhalte immer die Meldung: Sie haben einen inaktiven..
Außerdem weiß ich nicht, wie ich mehrere User registrieren kann.. also ich denke mal, dass er jetzt bei registrieren den letzten user "überschriebt" oder? Wie löse ich das Problem.. und mein zweites Problem, wie lese ich die User und das dazugehörige Passwort dann aus und überprüfe in dem Log-In ob so ein User mit dem Passwort in der Datenbak vorhanden ist (sich registriert hat)

Wäre wirklich nett, wenn mir jemand helfen könnte.. am Besten natürlich mit Codebeispielen auch für das PN-System!
Danke, Fredmonster!
 
Werbung:
1. Zur Registrierung:
-Passwörter niemals als Reintext in der Datenbank ablegen. Besser du verschlüsselst die Passwörter mit md5 oder sha1
PHP:
$sql = "INSERT INTO
          reg
        SET
          Benutzername='".$_POST['benutzername']."',       
          Passwort='".sha1($_POST['passwort1'])."',
          Email='".$_POST['email']."',
          ICQ=".$_POST['icq'].", 
          Signatur='".$_POST['signatur']."',
          Datum=".time();
2. Zum login:
-Du vergleichst den Benutzernamen mit der zurückgegebenen Resource-Kennung
-Du benutzt 2 Abfragen an die Datenbank obwohl das auch mit einer sehr leicht zu realisieren ist
PHP:
$sql = "SELECT
          Benutzername, Passwort
        FROM
          res
        WHERE
          Benutzername='".$_POST['username']."'
        AND
          Passwort='".sha1($_POST['password'])."'
        LIMIT 1";
if($res=mysql_query($sql)) {
      $data = mysql_fetch_assoc($res);
      if($data[0]['Benutzername']==$_POST['username'] && $data[0]['Passwort']==sha1($_POST['password'])) {
            echo "erfolgreich angemeldet!";
      }
}
-Nach dem Login solltest du vielleicht die Benutzerdaten und ein Flag für den Login in einer Session speichern, um auch auf folgeseiten eingeloggt zu bleiben

Mach dich auch mal mit dem Thema mysql-injections vertraut und versuche deine (und die von mir hier geposteten) SQL-Anweisungen sicher zu gestalten, denn so wie das jetzt ist kann das auf keinen Fall bleiben.
 
@morl

das ist schon besser, aber es geht noch kürzer, oder vertraust du MySQL nicht?

Die PHP-Abfrage, ob die Benutzernamen und Passwörter übereinstimmen ist sinnlos, da das schon in der SQL-Abfrage geschieht.
 
Werbung:
Die PHP-Abfrage, ob die Benutzernamen und Passwörter übereinstimmen ist sinnlos, da das schon in der SQL-Abfrage geschieht.
Eigentlich nicht, da die Abfrage an die Datenbank ja erfolgreich sein wird auch wenn keine User mit diesem Namen und Passwort existiert. Das zurückgegebene Array wird in diesem Fall leer sein und deshalb nochmal die Abfrage. Man kann nie sicher genug sein.
 
sorry, aber es klappt nicht! Hier nochmal die Datei:
PHP:
<?php
        mysql_connect('localhost', 'web115', 'passwort') or die(mysql_error());
        mysql_select_db('usr_web115_1') or die(mysql_error());

$benutzername=$_POST['benutzername'];
$passwort=$_POST['passwort'];
$passwort2=$_POST['passwort2'];
$icq=$_POST['icq'];
$sig=$_POST['signatur'];
$email=$_POST['email'];
if (empty($benutzername))
{
die ("<strong>-Bitte geben Sie einen Benutzernamen ein!</strong><br />\n");
}
if (empty($passwort))
{
die ("<strong>-Bitte geben Sie ein Passwort ein!</strong><br />\n");
}
if ($passwort!=$passwort2)
{
die ("<strong>-Bitte geben Sie zweimal das gleiche Passwort ein!</strong><br />\n");
}
if (empty($email))
{
die ("<strong>-Bitte geben Sie Ihre email-Adresse ein!</strong><br />\n");
}
$schreiben= "INSERT INTO
          reg
        SET
          Benutzername='".$_POST['benutzername']."',       
          Passwort='".sha1($_POST['passwort'])."',
          Email='".$_POST['email']."',
          ICQ=".$_POST['icq'].",
          Signatur='".$_POST['signatur']."',
          Datum=NOW(); "
        mysql_query($schreiben) or die(mysql_error());
echo "Sie wurden erfolgreich registriert!\n";
?>
Und nun die Fehlermeldung:
Parse error: syntax error, unexpected T_STRING in /srv/www/htdocs/web115/html/hip/reg_ein.php on line 36
was ist nun in Zeile 36 falsch?
 
Werbung:
PHP:
$schreiben= "INSERT INTO
          reg
        SET
          Benutzername='".$_POST['benutzername']."',       
          Passwort='".sha1($_POST['passwort'])."',
          Email='".$_POST['email']."',
          ICQ=".$_POST['icq'].",
          Signatur='".$_POST['signatur']."',
          Datum=NOW(); "
Datum=NOW(); " <= Falsch
Datum=NOW()"; <= Richtig
 
neue Fehlermeldung: bin am verzweifeln!
registrieren.php schrieb:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' Signatur='', Datum=NOW()' at line 7
 
Werbung:
Speichere doch den Unix-Zeitstempel den dir die PHP-Funktion time() zurück gibt in der Datenbank. Das bietet viele Möglichkeiten die Ausgabe von Datum und Zeit im nachhinein zu formatieren.
 
Werbung:
Bei der Verwendung von NOW() muss nix escaped werden.
Ich denke eher das der Fehler daher kommt, das in $_POST['icq'] nicht nur numerische Zeichen stehen und das somit keine Zahl sondern ein String ist und dieser also in Hochkommas gesetzt werden muss.
PHP:
$schreiben= "INSERT INTO
               reg
             SET
               Benutzername='".$_POST['benutzername']."',       
               Passwort='".sha1($_POST['passwort'])."',
               Email='".$_POST['email']."',
               ICQ='".$_POST['icq']."',
               Signatur='".$_POST['signatur']."',
               Datum=NOW()";
Kann hier aber nur nochmal betonen, das ich die Speicherung des Datums mit NOW() nicht empfehlen kann, da das ganze mit den PHP Datumsfunktionen nicht sonderlich kompatibel ist (Umwandling mittels UNIX_TIMESTAMP()). Was spricht denn gegen die Verwendung des Unix-Zeitstempels der von der PHP-Funktion time() zurückgegeben wird. Man kann so das ganze als Integer-Zahlenwert speichern und direkt Rechenoperationen und Vergleiche durchführen ohne sich mit Datums-Strings herumärgern zu müssen. Aber wer nicht hören will...;)
 
SO sieht vernünftiges SQL aus:
PHP:
INSERT INTO
    `reg`
SET
    `reg`.`Benutzername` = %s,       
    `reg`.`Passwort`     = %s,
    `reg`.`Email`        = %s,
    `reg`.`ICQ`          = %s,
    `reg`.`Signatur`     = %s,
    `reg`.`Datum`        = NOW()
Und so schützt man sich vor mysql_injection:
PHP:
function mysql_string($string)
{   
    if (get_magic_quotes_gpc())
    {
        $string = stripslashes($string);
    }
    return "'".mysql_real_escape_string($string)."'";
}
if (get_magic_quotes_gpc())
{
    $_POST['passwort'] = stripslashes($_POST['passwort']);
}
$sqlstring = sprintf($sqlstring,
    mysql_string($_POST['benutzername']),
    mysql_string(sha1($_POST['passwort'])),
    mysql_string($_POST['email']),
    mysql_string($_POST['icq']),
    mysql_string($_POST['signatur']));
Nur ein Beispiel (d.h. du sollst nicht copy und paste benutzen sondern dir vielleicht selbst überlegen wie du es machst und das dann umsetzen)
 
Zuletzt bearbeitet von einem Moderator:
sorry, aber es klappt nicht! Hier die Seite: http://www.fredmonster.de/hip/login.php !
Und nochmal die Quelltexte:
PHP:
<?php
        mysql_connect('localhost', 'web115', 'passwort') or die(mysql_error());
        mysql_select_db('usr_web115_1') or die(mysql_error());
$user=$_POST['username'];
$pass=$_POST['passwort'];

if (empty($user)){
die("Bitte geben Sie einen Benutzernamen ein!");
}

if (empty($pass)){
die("Bitte geben Sie ein Passwort ein!");
}

$sql= "SELECT
          Benutzername, Passwort
        FROM
          reg
        WHERE
          Benutzername='".$_POST['username']."'
        AND
          Passwort='".sha1($_POST['passwort'])."'
        LIMIT 1";
$reg=mysql_query($sql);
$data = mysql_fetch_assoc($reg);
      if($reg['Benutzername']==$_POST['username'] && $reg['Passwort']==sha1($_POST['passwort'])) {
            echo "erfolgreich angemeldet!";}else{ echo "Inaktiver Benutzername oder falsches Passwort!";}
?>
das ist die log_ein.php an die das login-Formular sendet!
PHP:
<?php
        mysql_connect('localhost', 'web115', 'passwort') or die(mysql_error());
        mysql_select_db('usr_web115_1') or die(mysql_error());

$benutzername=$_POST['benutzername'];
$passwort=$_POST['passwort'];
$passwort2=$_POST['passwort2'];
$icq=$_POST['icq'];
$sig=$_POST['signatur'];
$email=$_POST['email'];
if (empty($benutzername))
{
die ("<strong>-Bitte geben Sie einen Benutzernamen ein!</strong><br />\n");
}
if (empty($passwort))
{
die ("<strong>-Bitte geben Sie ein Passwort ein!</strong><br />\n");
}
if ($passwort!=$passwort2)
{
die ("<strong>-Bitte geben Sie zweimal das gleiche Passwort ein!</strong><br />\n");
}
if (empty($email))
{
die ("<strong>-Bitte geben Sie Ihre email-Adresse ein!</strong><br />\n");
}
$schreiben="INSERT INTO
               reg
             SET
               Benutzername='".$_POST['benutzername']."',       
               Passwort='".sha1($_POST['passwort'])."',
               Email='".$_POST['email']."',
               ICQ='".$_POST['icq']."',
               Signatur='".$_POST['signatur']."',
               Datum=NOW()"; 
echo "Sie wurden erfolgreich registriert!\n";
?>
Das ist die reg_ein.php an die die registrieren.php sendet.. diese Funktioniert denke ich mal, also er kommt bis zu dem Befehl
PHP:
echo "erfolgreich registriert";
 
Werbung:
PHP:
if($reg['Benutzername']==$_POST['username'] && $reg['Passwort']==sha1($_POST['passwort']))
Das kann ja nicht gehen. Du benutzt schon wieder die Verbindungskennung anstatt des Arrays $data...
 
PHP:
<?php
        mysql_connect('localhost', 'web115', 'passwort') or die(mysql_error());
        mysql_select_db('usr_web115_1') or die(mysql_error());
$user=$_POST['username'];
$pass=$_POST['passwort'];

if (empty($user)){
die("Bitte geben Sie einen Benutzernamen ein!");
}

if (empty($pass)){
die("Bitte geben Sie ein Passwort ein!");
}

$sql= "SELECT
          Benutzername, Passwort
        FROM
          reg
        WHERE
          Benutzername='".$_POST['username']."'
        AND
          Passwort='".sha1($_POST['passwort'])."'
        LIMIT 1";
$reg=mysql_query($sql);
$data = mysql_fetch_assoc($reg);
      if($data[0]['Benutzername']==$_POST['username'] && $data[0]['Passwort']==sha1($_POST['passwort'])) {
            echo "erfolgreich angemeldet!";}else{ echo "Inaktiver Benutzername oder falsches Passwort!";}
?>
geht trotzdem nicht!
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben