Login form - Werkt niet zoals het moet.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Webmaster Robbe

Webmaster Robbe

21/12/2014 13:41:59
Quote Anchor link
Hallo iedereen :)
Ik heb een vraag(je).
Ik ben bezig met een loginform te maken, met een database.
Maar ik stoot op een klein probleem. Hij wil namelijk niet inloggen.
hier mijn code:

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
                <article id="login">                  
                        
                       <?php
                        if(isset($_POST['submit'])){
                            $Gebruikersnaam = $_POST['username']; //Variable aanmaken voor het ingegeven gebruikersnaam.
                            $Wachtwoord = $_POST['password']; //Variable aanmaken voor het ingegeven wachtwoord.
                            
                            // Beveiliging tegen Mysql injection.

                            $Gebruikersnaam = stripslashes($Gebruikersnaam);
                            $Wachtwoord = stripslashes($mypassword);
                            $Gebruikersnaam = mysql_real_escape_string($Gebruikersnaam);
                            $Wachtwoord = mysql_real_escape_string($Wachtwoord);
                            $sql="SELECT * FROM Gebruikers WHERE Gebruikersnaam=".$Gebruikersnaam." and Wachtwoord=".$Wachtwoord."";
                            $result=mysql_query($sql);
                            
                            // Aantal records tellen
                            $count=mysql_num_rows($result);
                            
                            // Kiijk of er 1 rij overeen komt.
                            if($count==1){
                            
                            // Registreren van Gebruikersnaam en Wachtwoord en doorverwijzen naar de login_succes.php
                            session_register("Gebruikersnaam");
                            session_register("Wachtwoord");
                            header("location:login_success.php");
                            }

                            else {
                                echo "Oeps er ging iets mis. Gelieve de juiste login gegevens in te geven.";
                                echo "U wordt terug gestuurd naar de login pagina.";
                                echo '<meta http-equiv="refresh" content="5;url=login.php" />';
                            }
                            }
else{
                            disconnectfromdb();
                                ?>

                            <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                                <p>Gebruikersnaam:</p>
                                    <input id="name" name="username" placeholder="Gebruikersnaam" type="text">
                                <p>Wachtwoord:</p>
                                    <input id="password" name="password" placeholder="**********" type="password"><br />
                                    <input name="submit" type="submit" value=" Login" />
                               </form>
                                <?php
                            }
                    ?>

                        
                </aricle>


Iemand die mij kan vertellen, waarom ik steeds de foutmelding krijg, en niet kan worden doorgestuurd naar de login_succes.php ?

Alvast bedankt :)
Gewijzigd op 21/12/2014 13:46:26 door - Ariën -
 
PHP hulp

PHP hulp

25/04/2024 12:33:11
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 13:43:56
Quote Anchor link
Je code is heel belabberd te lezen. Kan je dit even aanpassen en deze tussen [code] en [/code] tags plaatsen?
 
Webmaster Robbe

Webmaster Robbe

21/12/2014 13:44:46
Quote Anchor link
Is gebeurd, mijn excuses :)
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 13:49:10
Quote Anchor link
Quote is geen code-tag. Ik heb het aangepast zodat het nu goed leesbaar is.


session_register() is een hele oude functie die tegenwoordig niet meer zal werken.
Je kan gewoon $_SESSION['Username'] = $_POST['username'] gebruiken.
Waarom je een wachtwoord in een sessie wilt opslaan is mij niet duidelijk, maar het is onnodig en bovendien ook zeer onveilig.

Verder zijn regel 5 en 6 overbodig, omdat je die $_POST variabelen al direct kan gebruiken.
Gewijzigd op 21/12/2014 13:51:08 door - Ariën -
 
Webmaster Robbe

Webmaster Robbe

21/12/2014 13:51:25
Quote Anchor link
Bedankt :)
Dan is dat toch al ietsjes veiliger ;)
Maar zit ik nog steeds met het zelfde probleem :/
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 13:51:56
Quote Anchor link
Welke foutmelding krijg je precies?
 
Webmaster Robbe

Webmaster Robbe

21/12/2014 13:55:03
Quote Anchor link
Ik krijg namelijk geen foutmelding.
Mijn code telt het aantal records in mijn database en als er 1 record is dat overeenkomt met de ingevulde gegevens, dan moet die doorverwijzen naar login_succes.php
Ander geeft die een melding:

"Oeps er ging iets mis. Gelieve de juiste login gegevens in te geven. U wordt terug gestuurd naar de login pagina." En dan word je na 5 seconde doorgestuurd naar de login.php opnieuw (zodat je opnieuw een formulier krijgt te zien.)

Probleem is nu.
Hij geeft altijd die foutmelding. Ook als ik het juiste wachtwoord en juiste gebruikrsnaam invul.
En ik weet niet waar het probleem zit :/ (connectie met men db zou normaal gezien moeten kloppen :) )
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 13:56:31
Quote Anchor link
Dan zal je query ergens wel stuk zijn. Een mooie reden om foutafhandeling op toe te passen (iets wat je eigenlijk altijd hoort te doen)

http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/voorbeeld-1-het-ophalen-van-gegevens/1931/
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/12/2014 14:09:29
Quote Anchor link
Een paar aanbevelingen:

Begin boven in je script met de php logica en onderin pas met de output.
Je wilt een gebruiker na een correcte login doorsturen naar een andere pagina met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 header("location:login_success.php");
?>


Dat zal niet werken als er al output (HTML) naar de browser is verstuurd.

Waarom gebruik je niet uitsluitend kleine letters in je database en engelse termen zoals username en password

Dit is korter en je hoeft dan niet meer na te denken of het nu met een hoofdletter was of zonder hoofdletter.


Waarom de gebruiker terugsturen naar de loginpagina? De gebruiker was daar immers toch al? laat die pagina gewoon constant refreshen tot er een juiste login heeft plaats gevonden.

mysql_ functies zijn niet veilig meer. Ook niet met mysql_real_escape_string. Gebruik mysqli of PDO met prepared statements.

stripslashes() moet je al helemaal niet gebruiken

Zet je database op Collatie utf8_unicode_ci. en gebruik mysqli_set_charset($con, "utf8"); nadat je verbinding hebt gemaakt met mysqli_connect().

Zoals Aar zegt: session_register() moet je niet meer gebruiken

Geen passwords opslaan in de sessie

Passwords met iets als sha256 versleutelen en dan versleuteld in de database opslaan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sleutel
= hash('sha256', $password);
?>


Dus na registratie als de gebruiker een password heeft gekozen deze eerst versleutelen en dan pas in de database opslaan

Dan bij de login ook het password eerst versleutelen en dan de sleutels met elkaar vergelijken.
Als die kloppen en de gebruikersnaam klopt, pas dan mag de gebruiker ingelogd worden.

Toevoeging op 21/12/2014 14:16:22:

Een ander algemene afspraak is om variabelen zonder hoofdletter te schrijven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$var
= 'waarde';
$loginCount = 1; // tweede woord mag wel met een hoofdletter omdat dat de leesbaarheid ten goede komt
?>


class namen worden wel met een hoofdletter geschreven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Authentication
{
    ...
{


$auth = new Authentication();
?>
Gewijzigd op 21/12/2014 14:18:24 door Frank Nietbelangrijk
 
Webmaster Robbe

Webmaster Robbe

21/12/2014 14:17:44
Quote Anchor link
bedankt.
Zal het op deze manier naar een oplossing proberen te zoeken :)
@Frank Nietbelangrijk
Bedankt voor je uitleg :D
Ik ga het deze middag even rustig bekijken :)
Gewijzigd op 21/12/2014 14:19:37 door Webmaster Robbe
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/12/2014 14:25:20
Quote Anchor link
De opbouw doe je zo:
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
<?php

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // check password en gebruikersnaam
    if( /* correcte logingegevens */ )
    {

        // set session['login'] zodat de gebruiker ingelogd is
         header('Location: login_success.php');
        
    }
}

// Hieronder de output: ?>

<!DOCTYPE html>
<html>

...

<div id='error'><?php echo $error; ?></div>
<form action="" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>
...

</html>


Toevoeging op 21/12/2014 14:25:46:

Graag gedaan :-)
Gewijzigd op 21/12/2014 14:29:04 door Frank Nietbelangrijk
 
Webmaster Robbe

Webmaster Robbe

21/12/2014 14:50:37
Quote Anchor link
Bedankt!
T'is gelukt!
Maar met die hash256 snap ik niet goed hoe ik dat moet toepassen.
Moet ik gewoon in mijn php code die has256 toepassen zoals je in je vorige reactie zei?
Want in mijn mysql database zelf vind ik nergens dat die kan opgeslagen worden als hash256.
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 14:53:12
Quote Anchor link
SHA256 is 256bit groot. Dus Een varchar van 64 zal voldoende zijn.
 
Webmaster Robbe

Webmaster Robbe

21/12/2014 14:55:09
Quote Anchor link
Okay bedankt :)
Eens zien of het zo lukt :)
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/12/2014 14:55:31
Quote Anchor link
Je doet gewoon het volgende om jouw wachtwoorden in een sleutel in de database te zetten:

Stel jij hebt password '1234'.

vul die 1234 in het scriptje hieronder in en bekijk het resultaat in de browser
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$sleutel
= hash('sha256', '1234');

echo $sleutel;

?>


Kopieer de sleutel die je in de browser ziet en ga naar je wachtwoord veld in phpmyadmin

Vervang het oude wachtwoord voor de nieuwe

p.s. je wachtwoordveld moet je gewoon op varchar zetten met een lengte van 64.


Toevoeging op 21/12/2014 14:57:30:

dan je query bij het inlogggen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
="SELECT * FROM Gebruikers WHERE Gebruikersnaam=".$Gebruikersnaam." and Wachtwoord=".hash('sha256', $Wachtwoord);
?>
Gewijzigd op 21/12/2014 15:02:31 door Frank Nietbelangrijk
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 14:58:29
Quote Anchor link
256 bits = 32 bytes

Dus VARCHAR255 is erg overdreven ;-)
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/12/2014 15:00:53
Quote Anchor link
Dank je Aar ik heb het aangepast.

Het is 64 bytes blijkt na een strlen()
Gewijzigd op 21/12/2014 15:04:48 door Frank Nietbelangrijk
 
Pipo Clown

Pipo Clown

21/12/2014 15:05:15
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                            $Gebruikersnaam = $_POST['username'];


Volgens mij moet dit ijn :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                            $Gebruikersnaam = $_POST['name'];


Dit soort problemen is te voorkomen door de veld-name en de veld-id zoveel mogelijk gelijk te houden. (Dit kan niet altijd, bij radiobuttons bijv. gaat dit niet)
 
- Ariën  -
Beheerder

- Ariën -

21/12/2014 15:06:47
Quote Anchor link
Beter schrap je die hele lijn, het wekt alleen verwarring op.
Je kan $_POST['username'] en $_POST['password'] al direct gebruiken nadat je je formulier gesubmitted hebt.
Gewijzigd op 21/12/2014 15:07:03 door - Ariën -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/12/2014 15:07:35
Quote Anchor link
Ik las laatst de term KISS:

Keep it short & simple
 



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.