- Ad -
IMPRESSUM dotted_line KONTAKT dotted_line search dotted_line Contact dotted_line sitemap
190 PHP-Resource Mitglieder online
php-resource



Archiv verlassen und diese Seite im Standarddesign anzeigen :
Login mit Hilfe von PHP und mySQL


 
grooveapple
20-08-2006, 19:44 
 
moinsen,

ich kann mich mit dem script nicht anmelden.
immer wenn ich einen username + das gültige passwort angebe, sagt er, das ich halt die falschen daten habe bzw. das sie nicht vorhanden sind.

meine mysql tabelle:
UserID int(11) primary key | NULL | auto_increment
UserName varchar(30)
UserPass varchar(32)
UserSession varchar(32) NULL
UserMail varchar(150)

ok habe die UNIQUE KEY´s rausgemacht, weil ich mir ein script in php dazu gebastelt habe.


formular.php:

if (!logged_in())
{
echo '<form method="post" action="login/login.php">
<label>Benutzername:</label>
<input name="username" type="text"><br>
<label>Passwort: </label><input name="userpass" type="password" id="userpass"><br>
<input name="login" type="submit" id="login" value="Einloggen">
</form>';
}
else
{
echo "Hallo ";
echo "<br>";
echo '<a href="login/logout.php">Ausloggen</a>';
}




sessionhelpers.inc.php:

<?
function connect()
{
$con=mysql_connect('localhost','user','pass') or die(mysql_error());
mysql_select_db('datenbank',$con) or die(mysql_error());
}

function check_user($name, $pass)
{
$sql="SELECT UserId
FROM users
WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
LIMIT 1";
$result= mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows($result)==1)
{
$user=mysql_fetch_assoc($result);
return $user['UserId'];
}
else
return false;
}

function login($userid)
{
$sql="UPDATE users
SET UserSession='".session_id()."'
WHERE UserId=".$userid;
mysql_query($sql);
}

function logged_in()
{
$sql="SELECT UserId
FROM users
WHERE UserSession='".session_id()."'
LIMIT 1";
$result= mysql_query($sql);
return ( mysql_num_rows($result)==1);
}

function logout()
{
$sql="UPDATE users
SET UserSession=NULL
WHERE UserSession='".session_id()."'";
mysql_query($sql);
}

connect();
?>




login.php(halt zum überprüfen ob es den usernamen gibt):

<?
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
$userid=check_user($_POST['username'], $_POST['userpass']);
}

if ($userid!=false)
{
login($userid);
echo '<a href="$site">Du hast dich erfolgreich eingeloggt und wirst sofort weitergeleitet...</a>';
}
else
{
echo '<a href="$site">Ihre Anmeldedaten waren nicht korrekt! Zurück zur Anmeldung</a>';
}
?>


sieht irgendwer den fehler oder kann mir sagen, wie ich ne fehlermeldung ausgeben kann dafür?

MfG Groove

 
mrhappiness
21-08-2006, 07:49 
 
Was ist denn die genaue Fehlermeldung?

 
grooveapple
22-08-2006, 17:09 
 
immer wenn ich einen username + das gültige passwort angebe, sagt er, das ich halt die falschen daten habe bzw. das sie nicht vorhanden sind.

das da ist die einzigste meldung die ich bekomme.
ich bekomme keine fehlermeldung...

 
mrhappiness
23-08-2006, 08:04 
 
Ändere die Funktion check_user mal so ab:function check_user($name, $pass)
{
$sql="SELECT UserId
FROM users
WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
LIMIT 1";
die($sql);
$result= mysql_query($sql) or die(mysql_error());
if ( mysql_num_rows($result)==1)
{
$user=mysql_fetch_assoc($result);
return $user['UserId'];
}
else
return false;
} Was kommt raus?

 
Knüps
23-08-2006, 13:45 
 
Ich habe genau das selbe Problem und wollte grad hier nachfragen :)

Habe den Quellcode um das "die($sql);" erweitert. Nu spuckt er folgendes aus: "SELECT UserId FROM freshn_users WHERE UserName='admin' AND UserPass=MD5('tutorial') LIMIT 1".

 
wahsaga
23-08-2006, 14:10 
 
Bitte nutze auch mysql_error(), wie im Beispiel zu sehen bzw. in den Forenregeln erklärt.

 
Knüps
23-08-2006, 14:34 
 
Original geschrieben von wahsaga
Bitte nutze auch mysql_error(), wie im Beispiel zu sehen bzw. in den Forenregeln erklärt.

Jopp, hab ich!

Nu spuckt er folgendes aus: "SELECT UserId FROM freshn_users WHERE UserName='admin' AND UserPass=MD5('tutorial') LIMIT 1".

 
TobiaZ
23-08-2006, 14:44 
 
also das gleiche,
also keine fehlermeldung,
also findet sql nur keinen usernamen mit dem spezifizierten passwort,
also hast du nur keinen entsprechenden user angelegt,
also funktioniert dein script.

 
grooveapple
23-08-2006, 19:04 
 
hm habe es mal eingesetzt, bei mir kommt die selbe meldung, aber ich habe werte in meienr datenbanktabelle. und ich habe die dnan auch richtig in das formular eingegeben, aber trotzdem werd ich nicht eingeloggt...
und warum werden meine von dem formular gesendeten $username und $userpass plötzlich als $name und $pass in de funktion wiedergegeben?

 
Knüps
23-08-2006, 21:11 
 
Bei mir hat es nun geklappt. Leider kann ich nicht nachvollziehen wo genau ich den Fehler gemacht habe.

 
TobiaZ
24-08-2006, 14:04 
 
Also der code ist korrekt. Wird wohl an den Daten liegen.

und warum werden meine von dem formular gesendeten $username und $userpass plötzlich als $name und $pass in de funktion wiedergegeben? schau dir die funktionsdefinition an:

function check_user($name, $pass) Da steht, dass der erste parameter innerhalb der funktion durch $name und der zweite durch $pass angesprochen werden kann.

Wäre auch irgendwie dumm, wenn die variablen die man einer funktion übergibt, immer den gleichen namen haben müssten. ;)

 
grooveapple
24-08-2006, 14:51 
 
ja... das erinnert mich gerade an meine OCM dtunde in der schule... c++...
da haben wir konstruktoren und strings verwendet... ist beinahe so ähnlich und ich mag es nicht ^^

aber back 2 topic...

ich habe es nun hinbekommen mich anzumelden...
problem:

in der datenbank datelle steht mein user:
user | passwort
------------------------------
maxi | (der md5 code)
lol | (der gleiche md5 code wie beim user "maxi")

und da ist shcon das problem... immer wenn ich mich neu registriere, trägt er immer das gleiche paswort ein. das ist seh ungewöhnlich.
vielleicht kann man mir da weiterhelfen?

und nun zum einloggen...
ich kann mich mit dem user "maxi" und mit dem user "lol" wenn ich bei beiden das zugehörige paswort mit angebe mich nicht anmelden.
doch kann ich mich anmelden wenn ich das passwort weglasse... kennt.
hier ist der quellcode zum eintragen in die tabelle:


$eintrag = "INSERT INTO users (UserName, UserPass, UserMail, UserPLZ, UserStadt, UserBeschreibung) VALUES
('$UserName', MD5('$UserPass'), '$UserMail', '$UserPLZ', '$UserStadt', '$UserBeschreibung')";
$eintragen = mysql_query($eintrag, $connection) or die("Fehler: ".mysql_error());

 
TobiaZ
24-08-2006, 15:24 
 
1. Brich deinen Code um! :teach: Immer das gleiche

und da ist shcon das problem... immer wenn ich mich neu registriere, trägt er immer das gleiche paswort ein. das ist seh ungewöhnlich. error_reporting an? Vermutlich hast du ne undefinierte Variable. Und speicherst daher den md5 hash von "" (nichts) in die DB.

und nun zum einloggen...
ich kann mich mit dem user "maxi" und mit dem user "lol" wenn ich bei beiden das zugehörige paswort mit angebe mich nicht anmelden.
doch kann ich mich anmelden wenn ich das passwort weglasse... Ja, das bestätigt meine Vermutung. Auf die Idee bist du nicht selbst gekommen?

hier ist der quellcode zum eintragen in die tabelle: Wie gesagt, brich ihn um. Und in zukunft auch mal testausgaben und errorreporting an, das erspart einiges.

 
grooveapple
24-08-2006, 16:46 
 
sry.

joa habe eben mal
error_reporting(E_ALL);
eingesetzt.
UserName ist undefiniert, aber auch nur wenn ich das
$UserName = $_POST["UserName"];
davor wegnehme ;)

 
TobiaZ
24-08-2006, 16:56 
 
was soll das jetzt heißen?

der Username wird doch schließlich korrekt in die DB eingetragen.

 
grooveapple
26-08-2006, 12:22 
 
das ist einfach das registerscript, wo das drinne steht.

sagen wir es so, immer wenn ich mich anmelde mit irgendeinen namen,
dann wird das an die register.php weitergeleitet.
wenn ich da
echo MD5('$UserPass');
mache, gibt er mir das passwort(mit der richtegen verschlüsselung) aus.

aber wenn ich es dann durch den sql befehl laufen lasse, der das passwort einträgt, übergibt er das falsche passwort an meine datenbank.


EDIT:

ah hab den fehler gefunden, ich habe im anmeldeformular 2 mal die variable $UserName eingeben lassen, das war der fehler.
ok, ist nun alles wieder ok und das anmelden funzt auch wunderbar, danke für eure hilfe :)

 
TobiaZ
26-08-2006, 15:43 
 
Dann bin ich ja mal gespannt, ob du in Zukunft die Formulardaten direkt mit print_r() ausgibst und ein echo für deine SQL-Query übrig hast. ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:42 Uhr.