Datenbank-Abfrage mit "while" für Member-Bereich schlägt fehl

sheeba1507

Erfahrenes Mitglied
Hallo zusammen,

für einen einfachen Member-Bereich habe ich ein Login codiert.
Nach dem Submit sollen "User" und "Passwort" mit den Einträgen
in der Datenbank verglichen werden.
Wird keine Übereinstimmung gefunden, so soll der Member-Bereich
ignoriert werden und die Neu-Registrierung aufzurufen.

Die Tabelle wurde erstellt und enthält bereits zwei Test-Einträge.
Wenn ich mich aber mit einem der beiden Test-Accounts einloggen will,
wird keine Übereinstimmung gefunden und es wird umgehend zur
Registrierung weitergeleitet.

Hier einmal der relevante Code :
PHP:
<?php
$benutzer = $_POST["benutzer"];
$password = $_POST["password"];
...
// DB-Connect
...
$sqlabfrage = "SELECT * from user_login ORDER BY id";
$ergebnis = mysql_query($sqlabfrage) or die(mysql_error());

while ($datensatz = mysql_fetch_array($ergebnis))
  {
  $user = $datensatz["user"];
  $pass = $datensatz["pass"];
  if ($benutzer == $user && $passwort == $pass)
    {
    header("Location: login_bereich.php");
    }
  }

  mysql_free_result($ergebnis);
  ?>
  <p>Sie sind noch nicht registriert !</p><br />
  <a href="login_register.php">Registrierung</a>
Nach einigen Testreihen kam ich zu der Überzeugung, daß ich mit meinem Latein
nun am Ende bin und etwas Hilfe von Profis benötige.

Ich hoffe, daß irgend jemanden hier der Fehler auffällt und er mir einen Ansatz
zur Korrektur geben kann.

Danke schon mal im voraus.

Gruß, Mike
 
wandel mysql_query($query); mal in mysql_query($query, $dbhandle) um....
Mal schauen was dann geschieht....
 
Check die registration, ob da die Passwörter md5(), sha1() oder garnicht verschlüsselt werden...
Wenns eins derer ist, dann musst du das eingegebene Passwort vom User ebenfalls dementsprechend verschlüsseln, bevor du es vergleichst mit den Ergebnissen aus der DB... ^^
 
Hallo zusammen,

Werden die Passwörter bei dir in klar Text gespeichert?
Check die registration, ob da die Passwörter md5(), sha1() oder garnicht verschlüsselt werden...
Ja, eine Verschlüsselung ist hier nicht notwendig.

wandel mysql_query($query); mal in mysql_query($query, $dbhandle) um....
Sorry, aber wo siehst du diese Sequenz und was soll sie bewirken ?
Ich habe weder eine Variable $query noch eine Variable $dbhandle im Code.

Gruß, Mike
 
Das war hier drauf bezogen:
$ergebnis = mysql_query($sqlabfrage) or die(mysql_error());

keine ahnung wie bei dir die variable heißt welche die verbindung beinhaltet...
Das waren nur variblen bezeichnungen, so das jeder normale anhand des wortes begreift um was es geht.
 
Hi,

die Verbindung wird bei mir direkt per
PHP:
include ("db_connect.inc.php");
hergestellt.

Der Aufbau dieser Datei sieht so aus (kritische Daten entfernt) :
PHP:
<?php
if($_SERVER['SERVER_NAME'] == 'localhost')
  {
  mysql_connect("localhost","root","") or die(mysql_error());
  mysql_select_db("[db_name]") or die(mysql_error());
  }
else
  {
  mysql_connect("[host_name]","[user_name]","[passwort]") or die(mysql_error());
  mysql_select_db("[db_name]") or die(mysql_error());
  } 
?>
 
Ich finde es nicht sehr schön, erst alle Datensätze zu holen und dann erst auf Name / Passwort zu prüfen, besser wäre das gleich bei der Datenbankabfrage zu erledigen, zum Beispiel so:
PHP:
$sqlabfrage = ' SELECT
                    `id`,
                    `user`,
                    `pass`
                FROM
                    `user_login`
                WHERE
                    `user` = "' .mysql_real_escape_string( $_POST['benutzer'] ). '"
                AND
                    `pass` = "' .mysql_real_escape_string( $_POST['password'] ). '"
                LIMIT
                    1';
$ergebnis = mysql_query( $sqlabfrage );

if( !mysql_num_rows( $ergebnis ) )
{
    // Fehler
}
else
{
    $datensatz = mysql_fetch_assoc( $ergebnis );
    // Hier dann vielleicht noch die Daten aus $datensatz speichern,
    // um diese auf der nächsten Seite verwenden zu können.
    header( 'Location: login_bereich.php' );
}
mysql_free_result( $ergebnis );
Ausserdem solltest du dir Fehler mit mysql_errror() ausgeben lassen, dann kann man dir besser helfen. Und print_r() auf verschiedene Variablen, Arrays, Ressourcen anzuwenden kann auch hilfreich sein.
 
Hallo zusammen,

jetzt habe ich den Code einmal so abgeändert :
PHP:
<?php
include ("db_connect.inc.php");
$sqlabfrage = "SELECT * FROM user_login 
  WHERE user = 'mysql_real_escape_string($_POST["benutzer"])' 
  AND pass = 'mysql_real_escape_string($_POST["password"])'
  LIMIT 1";
$ergebnis = mysql_query($sqlabfrage) or die(mysql_error());

if(mysql_num_rows($ergebnis))
  {
  mysql_free_result($ergebnis);
  header("Location: login_bereich.php");
  exit();
  }
else
  {
  mysql_free_result($ergebnis);
  ?>
  <p style="font-size:20px;">Sie sind noch nicht registriert !</p>
  <a href="login_register.php">Registrierung ?</a>
  <?php
  }
?>
Leider erhalte ich nun eine Fehler-Meldung, mit der ich schon immer meine
Probleme hatte : :confused:
Parse error: parse error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING
in C:\Programme\xampp\htdocs\eli-02\login_check.php on line 4
Kann mir jemand sagen, was in den Zeilen 4 und 5 noch eingetragen werden muß ?

Gruß, Mike
 
Hallo zusammen,

jetzt habe ich den Code einmal so abgeändert :
PHP:
<?php
include ("db_connect.inc.php");
$sqlabfrage = "SELECT * FROM user_login 
  WHERE user = 'mysql_real_escape_string($_POST["benutzer"])' 
  AND pass = 'mysql_real_escape_string($_POST["password"])'
  LIMIT 1";
$ergebnis = mysql_query($sqlabfrage) or die(mysql_error());

if(mysql_num_rows($ergebnis))
  {
  mysql_free_result($ergebnis);
  header("Location: login_bereich.php");
  exit();
  }
else
  {
  mysql_free_result($ergebnis);
  ?>
  <p style="font-size:20px;">Sie sind noch nicht registriert !</p>
  <a href="login_register.php">Registrierung ?</a>
  <?php
  }
?>
Leider erhalte ich nun eine Fehler-Meldung, mit der ich schon immer meine
Probleme hatte : :confused:

Kann mir jemand sagen, was in den Zeilen 4 und 5 noch eingetragen werden muß ?

Gruß, Mike

PHP:
<?php 

$user = mysql_real_escape_string($_POST["benutzer"]);
$password = mysql_real_escape_string($_POST["password"]);

include ("db_connect.inc.php"); 
$sqlabfrage = "SELECT * FROM user_login  
  WHERE user = '".$user."'  
  AND pass = '".$password."'
  LIMIT 1"; 
$ergebnis = mysql_query($sqlabfrage) or die(mysql_error()); 

if(mysql_num_rows($ergebnis)) 
  { 
  mysql_free_result($ergebnis); 
  header("Location: login_bereich.php"); 
  exit(); 
  } 
else 
  { 
  mysql_free_result($ergebnis); 
  ?> 
  <p style="font-size:20px;">Sie sind noch nicht registriert !</p> 
  <a href="login_register.php">Registrierung ?</a> 
  <?php 
  } 
?>

Gruss
Uli
 
Zurück