Login script kan niet inloggen
er zit geen echt beveiliging op het script maar dat maakt (voor nu) niet uit.
het registreren lukt al als je het formulier invult komen je naam en wachtwoord in de db te staan alleen krijg je nog wel een foutmelding
als je vervolgens gaat inloggen krijg ik deze meldingen en word ik niet doorgestuurd naar welcome.php
meldingen login.php:
Notice: Undefined variable: query in C:\xampp1\htdocs\login.php on line 24
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\xampp1\htdocs\login.php on line 24
melding register.php:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp1\htdocs\Register.php on line 24
dit is mijn script op register.php :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
<html>
<head>
<title>User registration</title>
</head>
<body>
<h1>Registreren</h1>
<form action="" method="post">
<label>Gebruikersnaam :</label><input type="text" name="user"><br /><br />
<label>Wachtwoord :</label><input type="password" name="pass"><br /><br />
<input type="submit" value="Register" name="submit"><br /><br />
<!--login link-->
<a href="login.php">Login</a>
</form>
<?php
if(isset($_POST["submit"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])){
$user = $_POST['user'];
$pass = $_POST['pass'];
$conn = new mysqli('localhost','root', '') or die (mysqli_error()); // DB Conection
$db = mysqli_select_db($conn, 'login') or die("DB error"); // select db from database
//selecting database
$query = mysqli_query($conn, "SELECT * FROM usserpass WHERE user='".$user."'");
$numrows = mysqli_num_rows($query);
if($numrows == 0){
//insert to mysqli query
$sql = "INSERT INTO userpass(user,pass) VALUES('$user','$pass')";
$result = mysqli_query($conn, $sql);
//result message
if($result){
echo "Uw account is succesvol aangemaakt";
}
else{
echo "Er is helaas wat misgegaan probeer het opnieuw";
}
}
else{
echo "uw gekozen gebruikersnaam bestaat al! probeer wat anders";
}
}
else{
?>
<!--Javascript alert-->
<script>alert('U heeft niet alle velden correct ingevuld');</script>
<?php
}
}?>
</body>
</html>
<html>
<head>
<title>User registration</title>
</head>
<body>
<h1>Registreren</h1>
<form action="" method="post">
<label>Gebruikersnaam :</label><input type="text" name="user"><br /><br />
<label>Wachtwoord :</label><input type="password" name="pass"><br /><br />
<input type="submit" value="Register" name="submit"><br /><br />
<!--login link-->
<a href="login.php">Login</a>
</form>
<?php
if(isset($_POST["submit"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])){
$user = $_POST['user'];
$pass = $_POST['pass'];
$conn = new mysqli('localhost','root', '') or die (mysqli_error()); // DB Conection
$db = mysqli_select_db($conn, 'login') or die("DB error"); // select db from database
//selecting database
$query = mysqli_query($conn, "SELECT * FROM usserpass WHERE user='".$user."'");
$numrows = mysqli_num_rows($query);
if($numrows == 0){
//insert to mysqli query
$sql = "INSERT INTO userpass(user,pass) VALUES('$user','$pass')";
$result = mysqli_query($conn, $sql);
//result message
if($result){
echo "Uw account is succesvol aangemaakt";
}
else{
echo "Er is helaas wat misgegaan probeer het opnieuw";
}
}
else{
echo "uw gekozen gebruikersnaam bestaat al! probeer wat anders";
}
}
else{
?>
<!--Javascript alert-->
<script>alert('U heeft niet alle velden correct ingevuld');</script>
<?php
}
}?>
</body>
</html>
en dit is mijn code van login.php
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
37
38
39
40
41
42
43
44
45
46
47
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
37
38
39
40
41
42
43
44
45
46
47
<!doctype html>
<html>
<head>
<title>test login</title>
</head>
<body>
<h1>Inloggen</h1>
<form action="" method="post">
<label>Gebruikersnaam:</label><input type="text" name="user"><br />
<label>Wachtwoord:</label><input type="password" name="pass"><br />
<input type="submit" name="submit" value="login"><br />
<!--new user register link -->
<p><a href="register.php">Nieuw? registreer je hier!</a></p>
</form>
<?php
if(isset($_POST["submit"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])){
$user = $_POST['user'];
$pass = $_POST['pass'];
//db connection
$conn = new mysqli('localhost','root', '') or die (mysqli_error());
//selecting database
$db = mysqli_select_db($conn, "SELECT * FROM userpassWhere user ='".$user."'AND pass='".$pass."'");
$numrows = mysqli_num_rows( $query );
if($numrows !=0){
while($row = mysqli_fetch_assoc($query)){
$dbusername = $row['user'];
$dbpassword = $row['pass'];
}
if($user == $dbusername && $pass == $dbpassword){
session_start();
$_SESSION['sess_user']=$user;
//redirect browser
header("location:welcome.php");
}
}
}
else{
echo "uw gebruikersnaam en wachtwoord komen niet overeen (let op hoofdletters)";
}
}
else{
echo "alle velden zijn verplicht om in te vullen!";
}
?>
</body>
</html>
<html>
<head>
<title>test login</title>
</head>
<body>
<h1>Inloggen</h1>
<form action="" method="post">
<label>Gebruikersnaam:</label><input type="text" name="user"><br />
<label>Wachtwoord:</label><input type="password" name="pass"><br />
<input type="submit" name="submit" value="login"><br />
<!--new user register link -->
<p><a href="register.php">Nieuw? registreer je hier!</a></p>
</form>
<?php
if(isset($_POST["submit"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])){
$user = $_POST['user'];
$pass = $_POST['pass'];
//db connection
$conn = new mysqli('localhost','root', '') or die (mysqli_error());
//selecting database
$db = mysqli_select_db($conn, "SELECT * FROM userpassWhere user ='".$user."'AND pass='".$pass."'");
$numrows = mysqli_num_rows( $query );
if($numrows !=0){
while($row = mysqli_fetch_assoc($query)){
$dbusername = $row['user'];
$dbpassword = $row['pass'];
}
if($user == $dbusername && $pass == $dbpassword){
session_start();
$_SESSION['sess_user']=$user;
//redirect browser
header("location:welcome.php");
}
}
}
else{
echo "uw gebruikersnaam en wachtwoord komen niet overeen (let op hoofdletters)";
}
}
else{
echo "alle velden zijn verplicht om in te vullen!";
}
?>
</body>
</html>
en nog welcome.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
session_start();
if(!isser($_SESSION["sess_user"])){
header("location: login.php");
}
else{
?>
<!doctype html>
<html>
<head>
<title>Welkom</title>
</head>
<body>
<h1>welkom</h1>
<?=$_session['sess_user'];?>!<a href="logout.php"></a>
</body>
</html>
<?php
}
?>
session_start();
if(!isser($_SESSION["sess_user"])){
header("location: login.php");
}
else{
?>
<!doctype html>
<html>
<head>
<title>Welkom</title>
</head>
<body>
<h1>welkom</h1>
<?=$_session['sess_user'];?>!<a href="logout.php"></a>
</body>
</html>
<?php
}
?>
ik heb zelf nog niet heel veel ervaring met php ik werk normaal met wordpress maar php leek me handig om te leren
dit script heeft verder ook nog geen doel het is meer om te testen
Gewijzigd op 23/03/2017 13:20:16 door Mohammed Mohammed
Zorg er ook voor dat je het liefst geen procedurele en object-georiënteerde functies van MySQLi door elkaar gebruikt. Zie in dit voorbeeld op #example1 het eerste en het derde codeblok. Het mengen kan op zich geen kwaad, maar het kunnen complicaties of onduidelijkheden bij ontstaan.
Dus kies één van beiden, en bij voorkeur de object-oriénted versie met de pijl (->).
Als je dit hebt aangepast zullen de andere problemen ook wel weggenomen zijn. Maar let wel op de beveiliging. Ik zie dat je zomaar $_POST['user'] aan je query voert, zonder deze te escapen met $conn->real_escape_string(...). Ook je wachtwoord is onbeveiligd en in 'plain text'. Niemand van je toekomstige gebruikers zou het waarderen dat zijn wachtwoord open en bloot en ongecodeerd is opgepast. Ikzelf raad aan om password_hash en password_verify te gebruiken.
Ook zie ik een query in mysqli_select_db(). Hier zou een database moeten staan, maar die hoor je al in 'new mysqli' op te geven als vierde parameter.
Quote:
er zit geen echt beveiliging op het script maar dat maakt (voor nu) niet uit.
Met zulke gedachten zal je mogelijk nog meer problemen op de hals halen. Als je een huis bouwt dan bouw je er toch ook meteen een deur in om te voorkomen dat onbevoegden er toegang tot hebben? En als je later de lekken gaat dichten, dan is de kans dat je er een paar openhoudt vrij groot. Hierdoor ontstaan vaak veiligheidsgaten in applicaties en sites is mij verteld.
En dan nog even een puntje, waar veel mensen over struikelen: Ik zie dat je een header hebt met een location. Zorg ervoor dat het script dan ook stopt met een exit. Nu worden er dingen uitgevoerd wat niet nodig is. Ook session_start hoort helemaal bovenaan in je code, op de plek voordat er enige HTML of witregels zijn geplaatst.
Al met al is er nog een hoop werk aan de winkel om deze berg code een goede structuur te geven.
$db = mysqli_select_db($conn, "SELECT * FROM userpassWhere user ='".$user."'AND pass='".$pass."'");