MYSQLI Login/register form

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Enrico van der List

Enrico van der List

14/09/2015 22:07:06
Quote Anchor link
Hey allen,

Momenteel heb ik een tutorial gevolgd voor een mysqli register/login form alleen loop ik vast wanneer ik ga inloggen. want ik kom niet verder wanneer ik een gebruiker wil inloggen.

https://www.youtube.com/playlist?list=PL-Db3tEF6pB_1oKlnpxyQGZIa8EYmA_1K

Register Form
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php require "php_conectie/Connectie.php";?>
<?php
    if(isset($_POST['Register'])){
        
        session_start();
        $FName = $_POST['First_Name'];
        $LName = $_POST['Last_Name'];
        $Email = $_POST['Email'];
        $PW = $_POST['Password'];
        
        $StorePassword = password_hash($PW, PASSWORD_BCRYPT, array('cost'=> 10));
        
        $sql = $con->query("INSERT INTO user (Fname, Lname, Email, Password)Values('{$FName}', '{$LName}', '{$Email}', '{$StorePassword}')");    
        
        header('Location: Login.php');
    }

?>

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
    <div class="Container">
        <div class="Header"></div>
        <div class="Menu">
            <div id="Menu">
                <nav>
                    <ul class="cssmenu">
                        <li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">
        <form action="" method="post" name="RegisterForm" id="RegisterForm">
                <div class="FormElement">
                    <input name="First_Name" type="text" required="required" class="TField" id="First_Name" placeholder="First Name">
                </div>
                <div class="FormElement">
                    <input name="Last_Name" type="text" required="required" class="TField" id="Last_Name" placeholder="Last Name">
                </div>
                <div class="FormElement">
                    <input name="Email" type="email" required="required" class="TField" id="Email" placeholder="E-mail">
                </div>
                <div class="FormElement">
                    <input name="Password" type="password" required="required" class="TField" id="Password" placeholder="Password">
                </div>
                <div class="FormElement">
                    <input name="Register" type="submit" class="button" id="Register" value="Register">
                </div>
            </form>
        </div>
        <div class="Footer"></div>
     </div>
</body>
</html>


Login
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php require "php_conectie/Connectie.php";?>
<?php
    if(isset($_POST['LogIn'])){
        
        $EM = $_POST['email'];
        $PW = $_POST['password'];
        
        //$result = $con->query("select * from user where Email='$EM' AND Password='$PW'");
        $result = $con->query("select * from user where Email='$EM'");
        
        $row = $result-> fetch_array(MYSQLI_BOTH);
        
        if(password_verify($PW, $row['Password'])){
        
            session_start();
            $_SESSION["UserID"] = $row['UserID'];
            header('Location: Account.php');
        }
else{
            session_start();
            $_SESSION["LogInFail"] = "Yes";    
        }
    }

?>

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>LogIn</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
    <div class="Container">
        <div class="Header"></div>
        <div class="Menu">
            <div id="Menu">
                <nav>
                    <ul class="cssmenu">
                        <li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">
            <form name="form1" method="post" action="">
            <?php if(isset($_SESSION["LogInFail"])){?>
                <div class="FormElement">LogIn Failed! Please Try Again.</div>
            <?php } ?>
                <div class="FormElement">
                    <input name="email" type="email" required="required" class="TField" id="email" placeholder="E-mail">
                </div>
                <div class="FormElement">
                    <input name="password" type="password" required="required" class="TField" id="password" placeholder="Password">
                </div>
                <div class="FormElement">
                    <input name="LogIn" type="submit" class="button" id="LogIn" value="LogIn">
                </div>
            </form>
        </div>
        <div class="Footer"></div>
     </div>
</body>
</html>


Account
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php require "php_conectie/Connectie.php";?>
<?php
    session_start();
    if(isset($_SESSION["UserID"])){
    }
else{
        //header('Location: Login.php'); // hier loop ik vast
    }
?>

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Account</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
    <div class="Container">
        <div class="Header"></div>
        <div class="Menu">
            <div id="Menu">
                <nav>
                    <ul class="cssmenu">
                        <li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                        <li><a href="LogOut.php">LogOut</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">Your Account<br>
            <br><?php echo $_SESSION["UserID"];?>
      </div>
        <div class="Footer"></div>
     </div>
</body>
</html>


Logout
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php require "php_conectie/Connectie.php";?>
<?php
    session_start();
        unset($_SESSION["UserID"]);
        session_destroy();
?>

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>LogOut</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
    <div class="Container">
        <div class="Header"></div>
        <div class="Menu">
            <div id="Menu">
                <nav>
                    <ul class="cssmenu">
                        <li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">You have Logged Out!<br>
            <br><?php echo $_SESSION["UserID"];?>
          </div>
        <div class="Footer"></div>
</div>
</body>
</html>


Update Account
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php require "php_conectie/Connectie.php";?>
<?php
    session_start();
    if(isset($_SESSION["UserID"])){
    }
else{
        header('Location: Login.php'); // hier loop ik vast
    }
?>

<?php
    $User
= $_SESSION["UserID"];
    $result = $con->query ("select * from user where UserID='$User'");
    $row = $result->fetch_array(MYSQLI_BOTH);
    session_start();
    
    $_SESSION["FirstName"] = $row['Fname'];
    $_SESSION["LastName"] = $row['Lname'];
    $_SESSION["Email"] = $row['Email'];
    $_SESSION["PW"] = $row['Password'];
?>

<?php
    if(isset($_POST['Update'])){
        
        $UpdateFName = $_POST['FirstName'];
        $UpdateLName = $_POST['LastName'];
        $UpdateEmail = $_POST['Email'];
        $UpdateFPassword = $_POST['Password'];
        
        $sql = $con->query("UPDATE user SET Fname = '{$UpdateFName}', Lname = '{$UpdateLName}', Email='{$UpdateEmail}', Password='{$UpdateFPassword}' where UserID= $User");
        
        header('Location: UpdateAccount.php');
        
    }

?>

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>UpdateAccount</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
    <div class="Container">
        <div class="Header"></div>
        <div class="Menu">
            <div id="Menu">
                <nav>
                    <ul class="cssmenu">
                        <li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">
            <form name="form1" method="post" action="">
                <div class="FormElement">
                  <input name="FirstName" type="text" required="required" class="TField" id="FirstName" value="<?php echo $_SESSION["FirstName"]; ?>">
                </div>
                <div class="FormElement">
                    <input name="LastName" type="text" required="required" class="TField" id="LastName" value="<?php echo $_SESSION["LastName"]; ?>">
                </div>
                <div class="FormElement">
                    <input name="Email" type="email" required="required" class="TField" id="Email" value="<?php echo $_SESSION["Email"]; ?>">
                </div>
                <div class="FormElement">
                    <input name="Password" type="password" required="required" class="TField" id="Password" value="<?php echo $_SESSION["PW"]; ?>">
                </div>
                <div class="FormElement">
                    <input name="Update" type="submit" class="button" value="Update Info">
                </div>
            </form>
        </div>
        <div class="Footer"></div>
</div>
</body>
</html>
 
PHP hulp

PHP hulp

12/05/2024 05:49:13
 
Thomas van den Heuvel

Thomas van den Heuvel

14/09/2015 22:17:37
Quote Anchor link
Quote:
want ik kom niet verder wanneer ik een gebruiker wil inloggen.

En hoe komt dit tot uiting? Het inloggen lukt niet? Je komt in een oneindige loop terecht? Je krijgt een foutmelding? Wat gebeurt er wat je niet verwacht?

Na een header('Location: ...'); hoort trouwens altijd een exit; te staan.
Gewijzigd op 14/09/2015 22:18:34 door Thomas van den Heuvel
 
Enrico van der List

Enrico van der List

14/09/2015 22:19:15
Quote Anchor link
Thomas van den Heuvel op 14/09/2015 22:17:37:
Quote:
want ik kom niet verder wanneer ik een gebruiker wil inloggen.

En hoe komt dit tot uiting? Het inloggen lukt niet? Je komt in een oneindige loop terecht? Je krijgt een foutmelding? Wat gebeurt er wat je niet verwacht?


Ik krijg een scherm met helemaal niets erin. Geen errors, geen meldingen. ook niet aan de hand van een echo melding
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 22:29:58
Quote Anchor link
Dan zou ik me eerst eens richten op het melden van foutmeldingen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
 
Enrico van der List

Enrico van der List

14/09/2015 22:32:12
Quote Anchor link
- Aar - op 14/09/2015 22:29:58:
Dan zou ik me eerst eens richten op het melden van foutmeldingen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>


Fatal error: Call to a member function query() on a non-object in /home/i296429/domains/i296429.iris.fhict.nl/public_html/page/WP31/Week1/Login.php on line 13
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 22:34:46
Quote Anchor link
Wat staat er (met gecensureerde inloggegevens!) in php_conectie/Connectie.php?
 
Enrico van der List

Enrico van der List

14/09/2015 22:43:55
Quote Anchor link
- Aar - op 14/09/2015 22:34:46:
Wat staat er (met gecensureerde inloggegevens!) in php_conectie/Connectie.php?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
// Verbinden met MySQL Database
    $host = "localhost"; // Welke server : localhost
    $username = "Gebruikersnaam"; // Gebruikersnaam
    $password321 = "Wachtwoord"; // Wachtwoord
    $dbnaam = "Naam database"; // Naam van de database
    

$con = mysqli_connect("$host", "$username", "$password321", "$dbnaam");
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 22:54:40
Quote Anchor link
Ah, ik zie het al. Je gebruikt procedureel en en object-oriënted door elkaar heen, en dat kan niet. Zie ook deze voorbeelden.

Gebruik dan dit als connectie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// aanmaken variabelen hier.
$con= new mysqli($host, $username, $password321, $dbnaam);
?>


Verder is er op lijn 9 van de login nog een SQL-injection mogelijk.
Gewijzigd op 14/09/2015 22:55:41 door - Ariën -
 
Willem vp

Willem vp

14/09/2015 23:50:53
Quote Anchor link
> Je gebruikt procedureel en en object-oriënted door elkaar heen, en dat kan niet.

Kan prima (zie documentatie PHP). Hooguit is het niet aan te bevelen, maar het zou wel gewoon moeten werken.
 
- Ariën  -
Beheerder

- Ariën -

14/09/2015 23:58:47
Quote Anchor link
Is dit zo? Want die melding die hij vertelt, duidt er toch echt op dat de instance ontbreekt. of zou elke mysqli_*()-functie dan gewoon werken via die OO-instance?
 
Willem vp

Willem vp

14/09/2015 23:59:26
Quote Anchor link
Volgens mij zit het probleem hierin:

In het formulier staat

<input name="Email" ...>

en in het script wordt verwezen naar

$EM = $_POST['email'];

Aangezien array indices case sensitive zijn, bestaat $_POST['email'] niet; het moet $_POST['Email'] zijn.

> of zou elke mysqli_*()-functie dan gewoon werken via die OO-instance?
Jep.
Gewijzigd op 15/09/2015 00:01:27 door Willem vp
 
Enrico van der List

Enrico van der List

15/09/2015 09:58:47
Quote Anchor link
OP een of andere manier werkt het gewoon helemaal niet meer....

want ik krijg nu op elke pagina dezelfde error...

Fatal error: Call to a member function query() on a non-object in /home/i296429/domains/i296429.iris.fhict.nl/public_html/page/WP31/Week1/Login.php on line 12
 
- Ariën  -
Beheerder

- Ariën -

15/09/2015 10:14:47
Quote Anchor link
Hoe zit je config nu in elkaar dan, want daar staat de connectie in.
 
Willem vp

Willem vp

15/09/2015 10:37:06
Quote Anchor link
Misschien ook handig om na de mysqli_connect nog iets te doen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if (mysqli_connect_errno($con)) {
    echo mysqli_connect_error();
}

?>

(of, als je het OO wilt doen)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($con->connect_errno) {
    echo $con->connect_error;
}

?>
 
Enrico van der List

Enrico van der List

15/09/2015 10:37:30
Quote Anchor link
- Aar - op 15/09/2015 10:14:47:
Hoe zit je config nu in elkaar dan, want daar staat de connectie in.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// Verbinden met MySQL Database
    $host = "localhost"; // Welke server : localhost
    $username = "i296429_i296429"; // Geberuikersnaam
    $password321 = "wachtwoord"; // Wachtwoord
    $dbnaam = "databasenaam"; // Naam van de database
    
    //$con = mysqli_connect ("$host", "$username", "$password321", "$dbnaam");

    $con= new mysqli($host, $username, $password321, $dbnaam);
    
    if ($con){
        echo("je bent verbonden");    
    }
else{
        echo("je bent niet verbonden");    
    }

?>


dit is wat ik er nu uit krijg als antwoord:

Access denied for user 'i296429_i296429'@'localhost' (using password: YES)
Gewijzigd op 15/09/2015 10:43:31 door Enrico van der List
 
Willem vp

Willem vp

15/09/2015 10:41:59
Quote Anchor link
> if ($con)

Dit gaat niet werken om te kijken of het connecten gelukt is, want je zult altijd een resource terugkrijgen. Je moet kijken of het connecten een error heeft opgeleverd.
Gewijzigd op 15/09/2015 10:42:36 door Willem vp
 
Ivo P

Ivo P

15/09/2015 10:52:07
Quote Anchor link
los van dit verhaal kun je ook nog een melding Header already sent verwachten.

session_start() moet aangeroepen worden voordat je iets naar de browser stuurt. Je kúnt dat wel doen op regel 25 van een script, maar dan moet je niet zoals in je eerste script op regel 1 ?> gebruiken en dan een enter plaatsen.

Op regel 2 begint je script weer, maar intussen is er wel een enter naar de output geschreven.
Alleen als je output buffering op je server aan hebt staan, zal er niets gebeuren.

In een ander geval zal Apache roepen "he browser, hier komt wat html aan." (de header) en daarna stuurt hij een ascii karakter (de enter).

Bij session start wil php nog een header toevoegen, maar helaas, die zijn al naar de browser dus niet meer aan te passen.

Toevoeging op 15/09/2015 10:52:27:

session_start dus een eind naar boven (in elk script)
 
- Ariën  -
Beheerder

- Ariën -

15/09/2015 10:58:53
Quote Anchor link
Enrico van der List op 15/09/2015 10:37:30:
Access denied for user 'i296429_i296429'@'localhost' (using password: YES)

Foute inloggegevens dus.

Je moet verder met dit controleren of de gegevens correct zijn, of niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if ($mysqli->connect_error) {
    die('Connectie error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

?>

Los daarvan is die() niet de beste manier, maar als je het heel netjes wilt doen raad ik een Exception aan.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.