2011-01-16 24 views
-2

Ich bin ein Neuling in PHP und versuche, eine Anmeldung/Sitzung für einen Benutzer zu tun. Ich bekomme immer Fehler. Jede Hilfe würde sehr geschätzt werden.Problem mit PHP Login

<?php session_start();  
    include('./config.php'); 
    $email=$_POST['email']; 
    $email=htmlspecialchars($email); 
    $Password=$_POST['password']; 
    $Password=htmlspecialchars($Password); 
    $ip=$_SERVER['REMOTE_ADDR']; 
    $result = mysql_query("SELECT * FROM member WHERE email='$email' AND password='$Password'") or trigger_error(mysql_error()); 
    $count = mysql_num_rows($result); 
    while($row = mysql_fetch_array($result)){ 
$logfirstname=$row['firstname']; 
$loglastname=$row['lastname']; 
$logid=$row['id']; 
$logemail=$row['email']; 
$logphone=$row['phone']; 
$logbiz=$row['biz_id']; 
$logdate=$row['date_joined']; 
$logaddress=$row['address']; 
$logsponsored=$row['sponsored']; 
    } 
if ($count>0){ 
$_SESSION['auth']=1; 
$_SESSION['id']=$logid; 
$_SESSION['biz']=$logbiz; 
$_SESSION['name']=$logfirstname." ".$loglastname; 
$sess=$logfirstname." ".$loglastname; 
if ($logsponsored === "1") { $_SESSION['sponsored']=1;} 
mysql_query($result); 
mysql_close(); 
session_regenerate_id(); 
$sid=session_id(); 

include('./config.php'); 
$loginr=mysql_query("INSERT INTO login (sessionid, memberid, username, IPAddr, LogInTime, Status, name) 
VALUES ('$sid', '$logid', '$email', '$ip', NOW(), 'On', '$sess')"); 
mysql_query($loginr); 
mysql_close(); 

    header("Location: controlpanel.php"); 
    exit(); 
    }else{ 
    header('Location: login.php?fail=1'); 
    exit(); 
    } 

?>` 
+2

Vorbereitung für die Flamme. – Stoosh

+7

Lernen Sie die Magie des Eindrucks bitte. Und wenn Sie Hilfe mit einem Problem brauchen, könnte es helfen, wenn Sie uns wissen, was das Problem ist .. – Naatan

+4

Und die Fehlermeldung ist? Sollten wir raten? Wenn du zum Arzt gehst und ihm sagst, dass es dir nicht gut geht, erwartest du, dass er nur einen Zaubertrank aus seiner Tasche zieht, der alles reparieren wird, was dich krank macht, ohne etwas darüber zu wissen, was die Krankheit wirklich ist? –

Antwort

1

Wie Sie erwähnt haben, sind Sie ein Neuling und ich würde Sie dringend ermutigen, Ihr eigenes Login/Authentifizierungssystem in PHP zu schreiben, weil zu viele Dinge schief gehen können (Sicherheitslücke). Ich würde Ihnen empfehlen, lightopenid zu verwenden, das stattdessen sehr einfach zu verwenden ist.

+0

das ist cool. Ich werde es versuchen. –

+0

Es ist sehr einfach zu bedienen! Es funktioniert einfach aus der Box. – Alfred

4

1 - $email=htmlspecialchars($email);

Dies ist nicht, wie Sie Text für SQL-Abfragen sanieren. Dies wird etwas XSS-Angriffe verhindern, aber NICHTS für die SQL-Injektion. Verwenden Sie stattdessen mysql_real_escape_string().

2-while($row = mysql_fetch_array($result)){

Vermutlich nur eine einzige Zeile würde zurückgegeben werden, so gibt es keinen Grund dies in einer Schleife zu tun. Holen Sie einfach eine einzelne Zeile ohne while-Schleife.

3-if ($count>0){

wäre es nicht das sein smarter, bevor Sie versuchen, eine Zeile abzurufen? Sie können innerhalb dieser if() statt

4 die Gesamtheit der Abruf/session Bestücken tun - mysql_query($result);

An der Stelle dieses Sie ausführen, $ Ergebnis ist entweder boolean FALSE (die ursprüngliche Abfrage-Aufruf fehlgeschlagen), ein mysql-Abfrage-Ergebnisanweisungs-Handle. Es ist nicht eine Abfrage-String, so dass Ihre Abfrage Anruf

5 fail - mysql_query($loginr);

See 4 # - $ loginr ist entweder "falsch" oder eine Aussage Griff. Warum die Abfrage zweimal?

+2

Kudos zu dir für das Lesen der – Naatan

+0

Ich bin heute Abend gelangweilt ... :) –

+0

Hey danke für die Hilfe mit ... Ich weiß, es war eine sucky Frage tut mir leid, dass ... ich hätte die Fehler geben sollen, die ich bekommen habe ... Jedenfalls habe ich getan, was Sie gesagt haben und es hat funktioniert. Vielen Dank! –