Inlog systeem
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
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
<?php
session_start();
mysql_connect("mysql","gebruiker","wachtwoord");
mysql_select_db("databasenaam");
if(isset($_SESSION['loggedin']))
{
die("You are already logged in!");
}
if(isset($_POST['submit']))
{
$name = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
if(mysql_num_rows($mysql) < 1)
{
die("Password was probably incorrect!");
}
$_SESSION['loggedin'] = "YES";
$_SESSION['name'] = $name;
die("You are now logged in!");
}
echo "<form type='login.php' method='POST'>
Username: <br>
<input type='text' name='username'><br>
Password: <br>
<input type='password' name='password'><br>
<input type='submit' name='submit' value='Login'>
</form>";
?>
session_start();
mysql_connect("mysql","gebruiker","wachtwoord");
mysql_select_db("databasenaam");
if(isset($_SESSION['loggedin']))
{
die("You are already logged in!");
}
if(isset($_POST['submit']))
{
$name = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
if(mysql_num_rows($mysql) < 1)
{
die("Password was probably incorrect!");
}
$_SESSION['loggedin'] = "YES";
$_SESSION['name'] = $name;
die("You are now logged in!");
}
echo "<form type='login.php' method='POST'>
Username: <br>
<input type='text' name='username'><br>
Password: <br>
<input type='password' name='password'><br>
<input type='submit' name='submit' value='Login'>
</form>";
?>
Staan die ge-codeerd in de db?
Toevoeging op 03/03/2013 18:53:37:
Zie jij het probleem in de code?
dan kopieer je die query en plak je die in phpmyadmin, daar krijg je wel een foutmelding terug (denk ik).
Als ik het is phpmyadmin plak krijg ik het volgende met een groen vinkje: MySQL gaf een lege resultaat set terug (0 rijen). ( Query duurde 0.0081 sec )
http://www.php.net/mysql_connect kijkt dan zie je dat mysql-functies verouderd zijn en eigenlijk vervangen moeten worden voor mysqli. Bovendien zie je daar dat deze functie een waarde teruggeeft true of false afhankelijk of de connectie tot stand gebracht is. Het zou natuurlijk handiger zijn als je daar in de code iets mee deed zodat je als gebruiker op de hoogte gesteld wordt wanneer een connectie niet gemaakt kan worden.
jaahaa en als je dan eens naar Code (php)
1
2
3
4
5
6
2
3
4
5
6
$db_con = mysql_connect("localhost","gebruiker","@wachtwoord");
if (!$db_con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database", $db_con);
if (!$db_con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database", $db_con);
Resultaat: geen error, de pagina wordt gewoon weergeven
Toevoeging op 03/03/2013 19:33:16:
Het probleem zit hem dus niet in de connectie
Een paar tips:
- Herschrijf alles naar Mysqli
- Gebruik geen die() maar nette foutafhandeling. Waarom moet je script en de layout stoppen als iets wel/niet goed is gegaan? Nergens voor nodig
- Sla je wachtwoorden gecodeerd op met sha1() en een unieke saltstring:
sha1("Ietsuniekshier".$_POST['password']), ook bij controle pas je die unieke string toe, en deze aan het wachtwoord te plakken
- Gebruik if($_SERVER['REQUEST_METHOD']=="POST") { om je controleren of je formulier verstuurd is.
Mijn probleem blijft dus nog steeds staan, iets klopt niet aan de code waardoor hij de invoer afwijst.
Pas
Code (php)
1
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
aanpast naar:
Code (php)
1
2
3
2
3
$sql = "SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'";
echo $sql."<br />";
$mysql = mysql_query($sql);
echo $sql."<br />";
$mysql = mysql_query($sql);
Dan zie je welke query er wordt uitgevoerd, en deze kan je dan in phpMyAdmin uitvoeren. Als deze geen resultaten geeft, dan geloof ik zeer zeker dat wat je invoert gewoon niet klopt.
Maar ik raad aan om het script toch even te herschrijven met onze tips. Daarbij ben ik vergeten om foutafhandeling op je query te noemen. Ook iets wat verschrikkelijk belangrijks is.
Ik heb het script al werkend gekregen, wat zijn precies de voordelen van mysqli?
Gewijzigd op 03/03/2013 20:02:58 door - Ariën -
Gewijzigd op 03/03/2013 22:46:11 door php knipper
Om het systeem veiliger te maken, kun je bijvoorbeeld de sessies loggen in de database, zo kun je bijvoorbeeld makkelijker voorkomen dat iemand je sessies steelt. Correct if I'm wrong.
Dit zal een nieuwe SESSIONID geven, dat maakt sessie stelen moeilijk, tot onmogelijk