Login script kan niet inloggen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mohammed Mohammed

Mohammed Mohammed

23/03/2017 13:17:51
Quote Anchor link
hoi, ik heb een registreer en login script gemaakt met behulp van een tutorial via youtube.
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)
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
<!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>


en dit is mijn code van login.php
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
<!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>


en nog welcome.php
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
<?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
 
PHP hulp

PHP hulp

14/08/2020 16:34:45
 
- Ariën -
Beheerder

- Ariën -

23/03/2017 13:38:27
Quote Anchor link
Aller eerst zou ik aan foutafhandeling beginnen op je $query, en kijken of deze false kan zijn. In dat geval kan je met mysqli_error($conn); prima zien wta er mis in. Ikzelf vermoed een typfout en dat je 'userpass' bedoelt.

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.
 
- SanThe -

- SanThe -

23/03/2017 13:40:38
Quote Anchor link
In deze regel wil je de database selecteren en tegelijkertijd een select uitvoeren.

$db = mysqli_select_db($conn, "SELECT * FROM userpassWhere user ='".$user."'AND pass='".$pass."'");
 



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.