PHP und MySql - Daten auslesen

04/09/2013 15:56 Praim#1
Hi.
Ich versuche grade ein Loginsystem mit PHP und MySql zu basteln.
Die Registration habe ich schon, im folgenden Format werden die Benutzer gespeichert:
ID | username | mail | password | browser | ip | date
1 Peterchen [Only registered and activated users can see links. Click Here To Register...] hallo123 uswusw.

Wie kann ich nun beim Login bspw auslesen, ob der Benutzername vorhanden ist?
Und dann das Passwort mit dem eingegebenen Passwort vergleichen?

Viele Grüße
04/09/2013 16:10 Missing No#2
Einfach ne whileschleife, die die Spalte durchgeht, bis die Werte übereinstimmen. Dann vergleichst du das eingegebene mit dem gespeicherten passwort.
04/09/2013 16:13 arbass#3
Kurzer Snippet aus meiner PHP Register Class:

-----------------------------------------------------------------------------
public function checkUserNameInUse()
{
// send query that will return results with that email
$request = "SELECT " . USERCOLUMN . " FROM " . USERTABLE . " ";
$request .= "WHERE " . USERCOLUMN . " LIKE '" . $this->email . "'";

$res = pg_query(getDBConnection(), $request );
$dsatz = pg_fetch_assoc( $res );

// if the result were 0 rows -> there is no user with that email
if( strcmp( $dsatz[USERCOLUMN], $this->email) == 0 )
{
$error = 1;
return false;
}

return true;
}


-----------------------------------------------------------------------------
04/10/2013 08:53 Synatex#4
Nicht zu vergessen das wenn du weißt das nur ein Datensatz benötigt wird LIMIT 1 anzugeben. Das spart einiges an Ressourcen!
04/10/2013 15:07 Delinquenz#5
Quote:
Einfach ne whileschleife, die die Spalte durchgeht, bis die Werte übereinstimmen. Dann vergleichst du das eingegebene mit dem gespeicherten passwort.
Nicht ein kleines bisschen ressourcenfressend?
04/10/2013 15:18 Missing No#6
Kommt immer drauf an, wie die Datenbank aufgebaut/ geordnet ist und wie viele Einträge vorhanden sind.

In diesem Falle wär dies allerdings wohl die einfachste.
04/10/2013 15:59 Delinquenz#7
Wozu gibts denn im SQL Query die "WHERE-Clause"?
04/11/2013 00:01 zorndyuke#8
Quote:
Einfach ne whileschleife, die die Spalte durchgeht, bis die Werte übereinstimmen. Dann vergleichst du das eingegebene mit dem gespeicherten passwort.
Was?!

Quote:
Kommt immer drauf an, wie die Datenbank aufgebaut/ geordnet ist und wie viele Einträge vorhanden sind.

In diesem Falle wär dies allerdings wohl die einfachste.
Welchen Fall gibt es, dass dies sinnvoll wäre??

Selbst wenn man an die User Daten ran will zum Testen, wäre eine SQL-Query sinnvoller.

SELECT `spalteX`, `spalteY`, `spalteZ` FROM `accounts` WHERE `spalteX`='administrator' AND `password`='HASH' LIMIT 0,1;


Die Zeit sollte man sich wirklich der Qualitäts und Ordnungshalber nehmen!

Bitte!

Gruß
04/13/2013 10:50 Atomix74#9
Wenn scon Qualität und Ordnung herschen soll.

Du hast Die Struktur
Code:
 ID | username | mail | password | browser | ip | date
Dann würde eine saubere Abfrage wie folgt ablaufen.
Code:
$sql = ' SELECT `password`FROM `accounts`WHERE ` `username` = "' . mysql_real_escape_string($username) . ' " LIMIT 1;';

$r = mysql_fetch_assoc(mysql_query($sql));
Das Escapen wird gerne und oft vergessen, ist aber in der bösen Welt da draussen sehr wichtig.
Sonst bedanken sich hundertausende schonmal im Vorfeld für die Benutzerdaten.

Du hast zwar nicht nachgefragt, aber schau Dir bzgl. des Passwort die PHP hash() Funktion an. Zorn hat mehr oder weniger direkt ebenfalls schon darauf hingewiesen.
04/15/2013 18:38 adistoe#10
PHP Code:
<?php
//Zur Datenbank verbinden
include ("inc/db-connect.php");

//Cookieabfrage - Eingeloggt?
if(isset($_COOKIE['ID_my_site']))

//Eingeloggt - Weiterleiten zum gesicherten Bereich
 
{
     
$username $_COOKIE['ID_my_site'];
     
$pass $_COOKIE['Key_my_site'];
     
$check mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error());
     while(
$info mysql_fetch_array$check ))
         {
         if (
$pass != $info['password'])
             {
                          }
        else
            {
            
header("Location: index.php");
        }
    }
}

//Loginbutton geklickt 
if (isset($_POST['submit'])) {

//Felder nicht ausgefüllt
     
if(!$_POST['username'] | !$_POST['pass']) {
         die(
'Sie haben keinen Usernamen oder kein Passwort angegeben.');
     }

//Datenbank prüfen
     
$check mysql_query("SELECT * FROM admin_users WHERE username = '".$_POST['username']."'")or die(mysql_error());

//Username existiert nicht
$check2 mysql_num_rows($check);
if (
$check2 == 0) {
        die(
'Dieser User existiert nicht.');
                }
while(
$info mysql_fetch_array$check ))
{
    
$_POST['pass'] = stripslashes($_POST['pass']);
    
$info['password'] = stripslashes($info['password']);
     
$_POST['pass'] = md5($_POST['pass']);

//Falsches Passwort
     
if ($_POST['pass'] != $info['password']) {
         die(
'Das Passwort ist nicht korrekt.');
     }
else
{
//Login ok - Cookies erstellen
$_POST['username'] = stripslashes($_POST['username']);
$hour time() + 3600;
setcookie(ID_my_site$_POST['username'], $hour);
setcookie(Key_my_site$_POST['pass'], $hour);

//Weiterleiten zum gesicherten Bereich
header("Location: index.php");
            }
        }
    }
else
{
//Nicht eingeloggt
?>
--- Loginform anzeigen ---

PHP Code:
<?php
}
?>