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

Warum fuktioniert dieses Login Script nicht?

Nick

Mitglied
Hallo. Dieses Login Script bekommt eine email und eine Password. Von diesem Formular:

HTML:
<form method="post" action="http://<?php echo $url ?>/ressources/phpscripts/login.php">
<table>
<tr><td>Benutzername:</td>
<td><input type="text" name="email" /></td>
</tr><tr><td>Passwort:</td>
<td><input type="password" name="password" /></td></tr>
<tr><td>Login</td><td><input type="submit" value="Anmelden" />
</td></tr></table></form>

Hier ist das Formular zur Auswertung.
PHP:
<?php
  $db_link = mysql_connect (**, **, **); 
  $db_sel = mysql_select_db( vovvel )  
  or die("Auswahl der Datenbank fehlgeschlagen");
  $sql = "SELECT * FROM Produktinfo"; 
  $db_erg = mysql_query( $sql );
  if ( ! $db_erg ){  
    die('Ungültige Abfrage: ' . mysql_error());
  }
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{  
  $url = $zeile['Url'] ;}mysql_free_result( $db_erg );
  session_start();           
    if (isset($_POST['email']) && isset($_POST['password'])){  
       $email = $_POST['email'];  
       $password = $_POST['password']; 
       $db_conn = new mysqli('**', '**', '**', '**');
       if (mysqli_connect_errno()) {  
          echo 'Verbindungsaufbau zur Datenbank fehlgeschlagen:'.mysqli_connect_error();   
          exit();  
       }
       if(!eregi("^[a-z0-9\._-]+@+[a-z0-9\._-]+\.+[a-z]{2,4}$",$email)) {    
         echo "<font color=#FF0000>Ungültige Email-Adresse</font>";    
         exit;
       }
       if(!preg_match("/^[a-zA-Z._0-9 ]{1,30}$/",$password))       
       {      
         echo 'Du verwendest unerlaubte Sonderzeichen im Password ';     
         exit();   
       } 
 $db_conn = new mysqli('**', '**', '**', '**');

if (mysqli_connect_errno())
 {   
echo 'Verbindungsaufbau zur Datenbank fehlgeschlagen:'.mysqli_connect_error();   exit();  
}  

  $query = 'select * from user '          
  ."where email='$email' "         
  ." and password='$password' "           
  ." and okey = 1";
  $result = $db_conn->query($query); 
 if ($result->num_rows)  {   
   $_SESSION['valid_user'] = $email; 
 } 
 $db_conn->close();}
  if (isset($_SESSION['valid_user']))  {
  header ("Location: http://".$url."/after-login/index.php");  
  }  
else  {    if (isset($email))    {      
echo 'Ihre Anmeldung ist fehlgeschlagen. Ein Möglicher Grund hierfür ist, dass sie noch nicht Freigeschaltet worden sind! Oder sie haben ihre Email-Adresse oder ihr Password falsch eingegeben.<br />';    }    
else    {     
 echo 'Sie sind nicht angemeldet.<br />';    }
    // Anmeldeformular anzeigen
  }?>

Ein Eintrag in der Datenbank ist Vorhanden. Die Tabelle hat 28Zeilen, aber ich brauche nur 3Stück. Und zwar Email, Password und okey. Nur wenn email = email, password = password und okey = 1 ist soll der login funktionieren.
Mein Problem ist gerade aber, das der Login immer funktioniert, egal was ich im Formular eingebe. Einzig und alleine die Filterung von Sonderzeichen funktioniert.

Kann sich jemand vorstellen warum das nicht klappt?

MfG
 
gibt keine Fehlermeldung.

Wie gesagt ich werde einfach egal was ich eingebe in den Mitgliedsbereich weiter geleitet. Selbst wenn Email und Password nicht in der Datenbank stehen.
 
Du hast hier den Vergleich ungünstig geschrieben:

PHP:
if ($result->num_rows)  {

Sollte eher

PHP:
if ($result->num_rows == 1)  {

lauten.

Außerdem sehe ich einige Strukturschwächen in der Programmierung. Erst nutzt Du mysql, danach mysqli. Entscheide dich für eines. Denn Du baust außerdem viele Datenbankverbindungen auf die unnötig sind. Eine Datenbankverbindung genügt. Entweder über mysql oder mysqli.
 
Passe dein Script bitte mal dem hier an:

PHP:
  $result = $db_conn->query($query); 
echo '<pre>';
var_dump( $result );
echo '</pre>';


und folgendes:

PHP:
echo 'Sie sind nicht angemeldet.<br />';    }
    // Anmeldeformular anzeigen

echo '<pre>';
var_dump( $_SESSION );
echo '</pre>';



Ich nehme ja an, dass du die Session Variable nicht "entfernst" bzw. mit der selben Session versuchst dich anzumelden, obwohl du bereits angemeldet bist.


Und Wichtig: Folgendes nur EINMAL ganz OBEN im Script:

PHP:
<?php
session_start();
..
..
..

// Das hier ist Falsch! Du startest mehrmals die Session und das sogar NACH potenziellen Ausgaben ( or die( AUSGABE ) )
while( .. ){
session_start();
..
}

Ein kleiner Tipp: Überprüfe keine SESSION Variablen, die du im gleichen Lade-Vorgang setzt.

Also, nach dem Login, sollte erstmal eine Weiterleitung zum z.B. Login führen, der vorher IMMER checkt, ob nicht bereits eingeloggt wurde.

Z.B.

PHP:
if( isset( $_SESSION[ 'logged_in' ] ) && $_SESSION[ 'logged_in' ] == 1 ){
  echo 'Bereits eingeloggt.. Sie werden weitergeleitet, bitte Warten..';
..
} else {
  {Login Formular}
}
 
Benutzereingaben maskieren -> mysql_real_escape_string() bzw. wenn Du die mysqli-Extension verwendest, kannst Du auch auf prepared Statements zurückgreifen.

Grüße
Nico
 
Zurück
Oben