PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP & MYSQL] LoginScript?



Blakkeight
12.02.2006, 19:58
Hallo leute,
ich sitze gerade an einem LoginScript wo die User aus einer MYSQL Datenbank geholt werden sollen und mit den Formulardaten verglichen werden sollen.
Schön und gut mit einem User bekomme ich das hin nur wie mache ich das mit mehreren user in der db?

Hoffe mir kann jemand helfen, bei fragen einfach fragen. o.O

greetz mj

Milchbox
12.02.2006, 20:16
Wie machst du das mit einem User Ô_ô?

Rolus
12.02.2006, 20:51
Hm, ich sehe das Problem nicht ganz (vielleicht weil's nicht ausreichend beschrieben worden ist?). Aber hier mal ein paar Denkanstöße oder so:

$res = mysql_query("SELECT `password` FROM `users` WHERE `name` = '".$_POST["name"]."';");
echo mysql_error();
if(mysql_affected_rows() < 1)
{
echo "Benutzer existiert nicht.<br />\n";
}
else
{
if($_POST["password"] == mysql_result($res,0,0))
{
echo "Login war erfolgreich.<br />\n";
}
else
{
echo "Falsches Passwort.<br />\n";
}
}
Wenn du die Passwörter verschlüsselt speicherst (sollte man machen), musst du die Verschlüsselung natürlich auch noch beim Vergleich auf das eingegebene Passwort anwenden.

freundliche Grüße, Rolus

Blakkeight
15.02.2006, 18:05
Ok dann muss ich es mal anders erklären.


Ich will die daten aus der DB in einen array speichern und nach und nach vergleichen mit einer schleife, bis einer gleich ist und man eingelogt würd.

Zurzeit mache ich das so:



if($_REQUEST['send']){
$sql=mysql_query("SELECT ID, user, passwort, email FROM ".$db."_userlog;") or die(mysql_error());
while($row=mysql_fetch_array($sql)){
if($_REQUEST['name']==$row['user']){
if(md5($_REQUEST['passwort'])==$row['passwort']){
session_register('session_name');
session_register('session_pass');
session_register('session_email');
session_register('session_logonoff');
$session_name=$row['user'];
$session_pass=$row['passwort'];
$session_email=$row['email'];
$session_logonoff=1;
if($session_name==$row['user']){
if($session_pass==$row['passwort']){
header("location: acp/admin_index.php?acp=status");
}
}
}
}
}


aber da nimmt er imo irgend einen aber leuft das scheinbar nicht durch bis er den richtigen gefunden hat.
Wie mach ich das, das er es so macht wie ich meine?

ps: ob der code nun zu lang oder komisch aussieht ist egal ich will damit keinen BlumenTopf gewinnen ist nur für mich selber.

Milchbox
15.02.2006, 18:38
Ahhhhhhhhhhhh was machst du den da xD
Du gehst das falsch an. Ich zeig dir mal etwas was viel schneller und besser geordnet ist xD

Hier mal nen Vorschlag:



$sql = "SELECT ID, user, passwort, email FROM ".$db."_userlog;"".
"WHERE ".
"(user like '".$_REQUEST["name"]."') AND ".
"(passwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0) {
$data = mysql_fetch_array ($result);

mysql_query ("UPDATE user SET Login = RAND( ) WHERE (user ='".$data['user']."')");

$passsql = "SELECT Login FROM ".$db."_userlog;" WHERE (user like '".$data['user']."')";
$passresult = mysql_query ($passsql);
$enter = mysql_fetch_array ($passresult);

setcookie("Enter",$enter["Login"]);
setcookie("Name",$data["Name"]);

header("Location: acp/admin_index.php?acp=status");
}
else
{
header ("Location: index.php?fehler=1");
}


So jetzt hab ich dir noch nen Spezial Timestamp der kein Timestamp ist eingebaut. xD
In dem Cookie Enter steht eine Art Zufallszahl die für Browserspiel geeignet ist.(Hackschutz)

In der Seite die du schützen willst muss folgendes:



<?php
if (!isset($_COOKIE["Enter"]) && !isset($_COOKIE["Name"])) {
header ("Location: index.php");
}
else {
?>

//Hier der Content

<?php
} ?>


Fertig! Fragen? xD

Manni
15.02.2006, 20:37
if($_REQUEST['send']){
$sql=mysql_query("SELECT ID, user, passwort, email FROM ".$db."_userlog;") or die(mysql_error());
while($row=mysql_fetch_array($sql)){
if($_REQUEST['name']==$row['user']){
if(md5($_REQUEST['passwort'])==$row['passwort']){
session_register('session_name');
session_register('session_pass');
session_register('session_email');
session_register('session_logonoff');
$session_name=$row['user'];
$session_pass=$row['passwort'];
$session_email=$row['email'];
$session_logonoff=1;
if($session_name==$row['user']){
if($session_pass==$row['passwort']){
header("location: acp/admin_index.php?acp=status");
}
}
}
}
}

Mal ein paar Tipps ;)

session_register("bla") und $bla = "foo" ist veraltet. Benutz stattdessen session_start() und $_SESSION['bla'] = "foo".
Die Schleife ist unnötig. Wähl doch einfach direkt in der MySQL-Query mit "... WHERE `name` = ".$_POST['name']." ..." gleich den richtigen Benutzer aus.
Schreib am besten die Namen der Felder in der MySQL-Query in ` und `. Damit vermeidest du Doppeldeutigkeiten und es sieht besser aus (imho)

Blakkeight
18.02.2006, 15:48
Danke an euch alle habe es jetzt geschafft mit dem LoginScript. ^___^

Milchbox
18.02.2006, 18:41
Und wie? Zeig mal Code ._.

Blakkeight
19.02.2006, 15:59
if($main=="login"){
if($_REQUEST['send']){
$sql=mysql_query("SELECT ID, user, passwort, email FROM ".$db."_userlog WHERE user='".$_REQUEST['name']."';");
if($sql){
$row=mysql_fetch_array($sql);
if($_REQUEST['passwort']=$row['passwort']){
session_register('session_name');
session_register('session_pass');
session_register('session_email');
session_register('session_logonoff');
$session_name=$row['user'];
$session_pass=$row['passwort'];
$session_email=$row['email'];
$session_logonoff=1;
if($session_name==$row['user']){
if($session_pass==$row['passwort']){
echo"<a href='' target='_blank'>Weiter zum ACP</a>";
}
}
}else{echo("Passwort Falsch!");}
}else{echo("Keinen User gefunden!");}
}
}elseif($main=="adminlog"){
echo"<form action='index.php?main=login' method='post'>
<table id='login'>
<tr><td>Name:</td><td><input id='login' name='name' type='name'></td></tr>
<tr><td>Passwort:</td><td><input id='login' name='passwort' type='password'></td></tr>
<tr><td></td><td><input id='login' name='send' type='submit' value='&nbsp; Login &nbsp;'></td></tr>
</table>
</form>";
}


so sieht meine Login.php aus.