Gegevens checken
In mijn vorige bericht over account aanmaken controleerden we of een account naam al bestond door daar een primary key aan te geven. Nu wil ik gewoon kijken of een account al bestaat omdat ik een login systeem maak.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="**********"; // Mysql password weggehaald op forum
$db_name="wizzardz"; // Database name
$tbl_name="account"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['Nickname'];
$mypassword=$_POST['Password'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$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"
echo "bestaat";
}
else {
echo "Wrong Username or Password";
}
?>
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="**********"; // Mysql password weggehaald op forum
$db_name="wizzardz"; // Database name
$tbl_name="account"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// username and password sent from form
$myusername=$_POST['Nickname'];
$mypassword=$_POST['Password'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$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"
echo "bestaat";
}
else {
echo "Wrong Username or Password";
}
?>
Het zou gewoon moeten werken maar hij geeft deze error:
Quote:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/WizzardzLoginCheck.php on line 26
Hij zegt dat het een boolean is ipv een nummer. Heeft iemand een idee hoe ik dit kan oplossen?
Bram unknown op 07/02/2011 15:19:49:
...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// username and password sent from form
$myusername=$_POST['Nickname'];
$mypassword=$_POST['Password'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
?>
// username and password sent from form
$myusername=$_POST['Nickname'];
$mypassword=$_POST['Password'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
?>
Hier ben je fout bezig.
Je moet zelf goed beseffen wanneer je welke bescherming nodig hebt, en waarom.
stripslashes helpt niet tegen injection. Laat die twee lijnen weg. mysql_real_escape_string volstaat.
Verder: de warnig die je krijgt:
Er is iets mis met je SQL string. Echo na lijn 22 eens $sql. Copy paste dat in phpMyAdmin om te zien wat mySQL zegt.
Misschien gebruik je velden of tabelnamen die niet bestaan in je db, maar dat kunnen we van hier niet zien.
Wat me echter nog het meest stoort, is dat je een login systeem maakt waarin je paswoorden ongecodeerd opslaat. Dat is echt Not done.
Gewijzigd op 07/02/2011 15:40:56 door Kris Peeters
Zoals je waarschijnlijk wel merkt ben ik echt een "newb" in php. Maar ik zal later proberen die passwords te coderen.
Ik probeer even wat je verteld en daarna reageer ik wel.
Bedankt alvast
Toevoeging op 07/02/2011 16:12:06:
Oke dit was een hele simpele fout. Ik had per ongeluk de verkeerde database overgezet van mijn computer naar mijn laptop.
Waardoor de username nickname heette.
Heel erg bedankt. ^^
Bram unknown op 07/02/2011 16:06:42:
Zoals je waarschijnlijk wel merkt ben ik echt een "newb" in php. Maar ik zal later proberen die passwords te coderen.
Zo moeilijk is dat niet. Gooi er nu dan op zen minst al een sha1() over. En ga daarna aan de slag met een salt.
Gewijzigd op 07/02/2011 17:04:38 door Jasper DS
- Variabelen hoeven niet tussen quotes. Zeker niet als parameters.
- Niet onnodig variabelen kopieëren, $myusername = $_POST['Nickname'] is onzin. Je stopt de variabele pas in een nieuwe variabele als je weet dat die veilig is (voor je doeleinde, dus hier mysql_real_escape_string overheen hebt gegooid).
- Selecteer wat je wilt hebben, gebruik niet *.
- mysql_query kan ook foutafhandeling gebruiken.
PHP Jasper op 07/02/2011 17:04:16:
Zo moeilijk is dat niet. Gooi er nu dan op zen minst al een sha1() over. En ga daarna aan de slag met een salt.
Bram unknown op 07/02/2011 16:06:42:
Zoals je waarschijnlijk wel merkt ben ik echt een "newb" in php. Maar ik zal later proberen die passwords te coderen.
Zo moeilijk is dat niet. Gooi er nu dan op zen minst al een sha1() over. En ga daarna aan de slag met een salt.
Waarom niet direct tegelijkertijd? Dat kan best.