Hallo,
ik ben echt al een aantal dagen bezig met een login systeem en wat ik ook doe telkens krijg ik weer een andere error! Nu ben ik zover dat ik geen errors meer krijg maar ik kan ook niet inloggen. Het maakt niet uit of ik het juiste wacht woord invul hij knalt hem telkens naar wrong pass or user.
Ik wordt er debiel van
<?php
include_once("connect.php") ;
// username and password sent from form
$username=$_POST['username'];
$password=$_POST['password'];
// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM admis WHERE username='$username' and password='$password'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("username");
session_register("password");
header("location:admin.php");
}
else {
echo "Wrong Username or Password";
}
?>
?
Onbekende gebruiker
20-05-2009 11:23
En waarom kan dit niet in je andere topic?
Verder: Variabelen buiten quotes.
Waar is de foutafhandeling?
Kijk eens wat $count bevat.
Een [php]exit[/php] is soms handig na een header.
Zorg dat magic quotes uitstaat, hoef je ook geen stripslashes.
Je wilt niet je password gewoon als password in de database hebben, sla het op als een md5 hash met een salt.
// username and password sent from form
$username=$_POST['username'];
$password=$_POST['password'];
na dit ben ik al gestopt met lezen
Waarom kopieer je vars ?
nou ja toch maar ff verder gelezen:
<?
$username=$_POST['username'];
$password=$_POST['password'];
// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
?>
word:
<?
// To protect MySQL injection (more detail about MySQL injection)
$_POST['username'] = stripslashes(mysql_real_escape_string($_POST['username']));
$_POST['password'] = stripslashes(mysql_real_escape_string($_POST['password']));
?>
en dan ga ik nu je vraag lezen :)
<?
$sql="SELECT * FROM admis WHERE username='$username' and password='$password'";
?>
word:
<?
$sql="SELECT * FROM admis WHERE username='" . $_POST['username'] . "' and password='" . $_POST['password'] . "'";
?>
en waar is je fout afhandeling ?
dit script is nog lang niet klaar !
kortom dit script is KUT(kwalitatief uitermate teleurstellend)
Je hebt inderdaad nog het een en ander te verbeteren. Wachtwoord PLAIN opslaan (als normale tekst), zeer af te raden! Genoeg functies in php, gebruik [php]md5[/php], [php]sha1[/php], of nog beter [php]hash[/php] in combinatie met salt en eventueel zelfs nog pepper
Onnodig variabelen kopieren, session register word niet meer gebruikt tegenwoordig, en nog wat dingetjes waar ik niet op kom en die al eerder genoemd zijn. Dit moet het ongeveer worden (met gebruik van m'n custom mysql_real_escape_string functie)
<?php
session_start();
include_once("connect.php") ;
function escape($string)
{
if(get_magic_quotes_gpc()==1){
$temp = stripslashes($string);
return mysql_real_escape_string($temp);
}
else {
return mysql_real_escape_string($string);
}
}
$sql="SELECT * FROM admis WHERE username='".escape($_POST['username'])."' and password='".escape($_POST['password'])."'";
$result=mysql_query($sql);
if(!$result){
echo 'hier je error iets';
}
else {
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['logged'] = true;
header("location:admin.php");\
}
else {
echo "Wrong Username or Password";
}
?>
okee, het was inderdaad niet echt netjes gescript en misschien had ik inderdaad een aantal fout afhandelingen in moeten bouwen. Na dit alsnog gedaan te hebben zag het script er zo uit:
<?php
include_once("connect.php") ;
$sql="SELECT * FROM admis WHERE username='" . $_POST['username'] . "' and password='" . $_POST['password'] . "'";
$result=mysql_query($sql) or die ("De query is mislukt $query. ".mysql_error());
$count=mysql_num_rows($result) or die ("Het script is gestopt op de variabele $count");
if($count==1){
session_register("username");
session_register("password");
header("location:admin.php");
}
else {
echo "Wrong Username or Password";
}
?>
Nu weet ik ook waarom ik nooit inlogt wordt. Want dit is de output die ik krijg: Het script is gestopt op de variabele 0
Hier uit maak ik op dat de $count op 0 blijft staan en die moet 1 worden anders werkt het niet. Nu kan ik het oplossen door $count op 0 te zetten inplaats van op 1 maar dan kan iedereen ten alle tijden zonder iets in te vullen inloggen en dat is niet de bedoeling van een login systeem. Kan iemand mij hiermee helpen?
Weet iemand anders een goede tutorial? met een betere beveiliging?
?
Onbekende gebruiker
20-05-2009 11:50
Dan klopt je query niet lijkt mij, als je geen resultaten krijgt.
THNX! inderdaad het probleem zat hem in de query=P Naja de query is goed, maar als je in je formulier niet de juiste gegevens mee zendt dan werkt het nooit natuurlijk=P
Hier moet je de OR DIE() weghalen, die wordt namelijk altijd uitgevoerd.
$count=mysql_num_rows($result) or die ("Het script is gestopt op de variabele $count");