PHP & MySQL: inlogsysteem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bavo

Bavo

18/10/2008 21:40:00
Quote Anchor link
Hallo allemaal

Check de volgende post, voor reeds aangepast script!

Ik zit een beetje in de knoop met volgend script.
Het probleem is heel eenvoudig: het werkt gewoon niet, hopelijk is de oplossing net zo eenvoudig.

Iemand een idee?
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
<?php
include 'inc_stats.php'; //hier includen we stats.php, om de bezoekgegevens van deze pagina bij te houden.
if ($valid !== 'TRUE') { //We kijken of we al aangemeld zijn, als de variabele valid niet gelijk is aan 'TRUE', dan krijgen we het inlogformulier te zien, hieronder in html te vinden.
?>

<br>
<h3>Inloggen</h3>
<FORM METHOD="post" ACTION="">
<table width="350" border="0">
  <tr>
    <td>Gebruikersnaam:</td>
    <td><div align="right"><input name="user" type="text" value="" size="20" maxlength="255"/></div></td>
  </tr>
  <tr>
    <td>Wachtwoord:</td>
    <td><div align="right"><input name="pass" type="password" value="" size="20" maxlength="255" /></div></td>
    <td><div align="right"><INPUT NAME="logon" TYPE="submit" VALUE="Inloggen" /></div></td>
  </tr>
</table>
</FORM>
<p>Inloggen doe je door je gebruikersnaam in te vullen. Je gebruikersnaam is je klas, gevolgd door je klasnummer.<br>
  Bijvoorbeeld: 6j01 (kleine letter).<br>
Je wachtwoord heb je normaal reeds ontvangen, zoniet, gelieve contact op te nemen met de vakleerkracht.</p>
<br>
  <?php
  }
else {
if (isset($_POST['logon'])) { //Als op de 'Inloggen' knop gedrukt is, mogen we door naar wat volgt.

    include 'inc_connect2.php';

    $user = $_GET['user']; //De ingevulde gegevens worden toegekend aan variabelen.
    $pass = $_GET['pass'];

    $querypass = "SELECT `pass` FROM `users` WHERE `user`=`".$user."`"; //We halen het wachtwoord op voor de ingegeven gebruikersnaam in de database. Dit is de MySQL Query.
    $fetchpass = mysql_query($querypass) or die ( mysql_error( ) ); //Hier voeren we de Query uit.
    $checkpass = mysql_fetch_object($fetchpass); //Hier wordt het wachtwoord toegekend aan een variabele.
    
    if ($pass == $checkpass) { //We kijken of het opgehaalde wachtwoord gelijk is aan het gegeven wachtwoord, zoja mogen we verder, anders ...¨(*)
        $valid = 'TRUE';
        echo 'Yes!'; //moet nog weg, ter controle tijdens testen. (pagina die hieronder geïnclude wordt moet nog weg)
        include 'sec_index.php?page=home'; //Alles is ok, we geven de volgende pagina in (waar nogmaals een beveiliging wordt ingebouwd.)
        }
    else {
        echo 'Uw gebruikersnaam of wachtwoord is niet correct, gelieve opnieuw te proberen.'; // (*)... wordt dit weergegeven.
         }
        }
     }

?>


Op volgende url kan je gaan kijken:
http://project.bafke.be/index.php?page=inloggen
(wordt wel constant aan gewerkt, dus kan zijn dat straks het probleem anders is ofzo, het valt hieronder dan wel te lezen)

Een gebruikersnaam en wachtwoord voor jullie om te testen:
gebruikersnaam: 6j01
wachtwoord: project

Zoals je zult zien gebeurt er na het klikken op inloggen niks, terwijl het script 'Yes!' zou moeten weergeven, en het formulier zou moeten verdwijnen.

Kan iemand helpen?

Dank bij voorbaat!

(die script is geïnclude in een andere pagina, vandaar geen html opening enz...)
Gewijzigd op 01/01/1970 01:00:00 door Bavo
 
PHP hulp

PHP hulp

25/04/2024 14:29:32
 
Joren de Wit

Joren de Wit

18/10/2008 21:42:00
Quote Anchor link
In je eerste if-statement controleer je of $valid gelijk is aan 'TRUE', terwijl je deze waarde pas toekent in het bijbehorende else statement.

Met andere woorden, $valid zal nooit de waarde TRUE krijgen omdat altijd het if-statement uitgevoerd wordt...
 
Bavo

Bavo

18/10/2008 21:47:00
Quote Anchor link
Bedankt voor de snelle reactie.

Dus ik gebruik beter gewoon ACTION="" in het formulier en ik gebruik een andere pagina om het script uit te voeren?
Anders zie ik niet onmiddelijk hoe ik het formulier kan verbergen na aanmelding, of zie ik iets over het hoofd?

Zo is het in 2 pagina's:

inc_inloggen.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
include 'inc_stats.php'; //hier includen we stats.php, om de bezoekgegevens van deze pagina bij te houden.
?>

<br>
<h3>Inloggen</h3>
<FORM METHOD="post" ACTION="index.php?page=exc_inloggen.php">
<table width="350" border="0">
  <tr>
    <td>Gebruikersnaam:</td>
    <td><div align="right"><input name="user" type="text" value="" size="20" maxlength="255"/></div></td>
  </tr>
  <tr>
    <td>Wachtwoord:</td>
    <td><div align="right"><input name="pass" type="password" value="" size="20" maxlength="255" /></div></td>
    <td><div align="right"><INPUT NAME="logon" TYPE="submit" VALUE="Inloggen" /></div></td>
  </tr>
</table>
</FORM>
<p>Inloggen doe je door je gebruikersnaam in te vullen. Je gebruikersnaam is je klas, gevolgd door je klasnummer.<br>
  Bijvoorbeeld: 6j01 (kleine letter).<br>
Je wachtwoord heb je normaal reeds ontvangen, zoniet, gelieve contact op te nemen met de vakleerkracht.</p>
<br>


inc_exc_inloggen.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
    if (isset($_POST['logon'])) { //Als op de 'Inloggen' knop gedrukt is, mogen we door naar wat volgt.

        include 'inc_connect2.php';

        $user = $_POST['user']; //De ingevulde gegevens worden toegekend aan variabelen.
        $pass = $_POST['pass'];

        $querypass = "SELECT * FROM 'users' WHERE 'user'='".$user."'"; //We halen het wachtwoord op voor de ingegeven gebruikersnaam in de database. Dit is de MySQL Query.
        $fetchpass = mysql_query($querypass) or die ( mysql_error( ) ); //Hier voeren we de Query uit.
        $checkpass = mysql_fetch_object($fetchpass); //Hier wordt het wachtwoord toegekend aan een variabele.
    
        if ($pass == $checkpass->pass) { //We kijken of het opgehaalde wachtwoord gelijk is aan het gegeven wachtwoord, zoja mogen we verder, anders ...¨(*)
            $valid = 'TRUE';
            echo '<p>Yes!</p>'; //moet nog weg, ter controle tijdens testen. (pagina die hieronder geïnclude wordt moet nog weg)
            include 'sec_index.php?page=home'; //Alles is ok, we geven de volgende pagina in (waar nogmaals een beveiliging wordt ingebouwd.)
            }
        else {
            echo '<p>Uw gebruikersnaam of wachtwoord is niet correct, gelieve opnieuw te proberen.</p>'; // (*)... wordt dit weergegeven.
         }
    }

?>


(het klopt dat de url vanuit inc_inloggen.php naar inc_exc_inloggen.php naar exc_inloggen.php verwijst, in index.php wordt die inc_ toegevoegd.)
Gewijzigd op 01/01/1970 01:00:00 door Bavo
 
Joren de Wit

Joren de Wit

18/10/2008 22:19:00
Quote Anchor link
Nee, je hoeft enkel de controle of er een formulier gepost is buiten het dat else-statement te halen en voor dat andere if-statement te zetten.

Op die manier wordt er eerst gecontroleerd of iemand inlogt en als dat lukt wordt $valid op TRUE gezet. Vervolgens wordt het if-statement voor het weergeven van het formulier niet meer uitgevoerd omdat $valid op TRUE staat...
 
Bavo

Bavo

18/10/2008 22:25:00
Quote Anchor link
Ik snap het.

Maar dat is het probleem niet meer, omdat het zoals het nu is nog steeds niet werkt...
Ook als ik het doe zoals je net zei.
Ik zie echter de fout echt niet, en ookal zou mijn query fout zijn of de database problemen geven, ik zou een foutmelding moeten krijgen, maar ik krijg helemaal niks.

Bedankt dat je de tijd wil nemen om te antwoorden trouwens. Ik vindt het op fora over onderwerpen waar ik zelf veel ervaring in heb ook vervelend om die koppige newbies te gaan helpen. Veel respect dus! :)
Gewijzigd op 01/01/1970 01:00:00 door Bavo
 
Joren de Wit

Joren de Wit

18/10/2008 22:33:00
Quote Anchor link
Plaats in je script eens wat echo's zodat je weet welke delen er nu wel en niet uitgevoerd worden. Met name het if statement waarin je controleert of het formulier gepost is.
 
Bavo

Bavo

18/10/2008 22:42:00
Quote Anchor link
Oké, nu heb ik al meer info. Ik krijg nu een SQL error, dus er is een fout in mijn query.

De houdige 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
<?php
include 'inc_stats.php'; //hier includen we stats.php, om de bezoekgegevens van deze pagina bij te houden.
?>

<br>
<h3>Inloggen</h3>
<FORM METHOD="post" ACTION="">
<table width="350" border="0">
  <tr>
    <td>Gebruikersnaam:</td>
    <td><div align="right"><input name="user" type="text" value="" size="20" maxlength="255"/></div></td>
  </tr>
  <tr>
    <td>Wachtwoord:</td>
    <td><div align="right"><input name="pass" type="password" value="" size="20" maxlength="255" /></div></td>
    <td><div align="right"><input name="logon" type="submit" value="Inloggen" /></div></td>
  </tr>
</table>
</FORM>
<p>Inloggen doe je door je gebruikersnaam in te vullen. Je gebruikersnaam is je klas, gevolgd door je klasnummer.<br>
  Bijvoorbeeld: 6j01 (kleine letter).<br>
Je wachtwoord heb je normaal reeds ontvangen, zoniet, gelieve contact op te nemen met de vakleerkracht.</p>
<br>
<?php
    if (isset($_POST['logon'])) { //Als op de 'Inloggen' knop gedrukt is, mogen we door naar wat volgt.
        
        include 'inc_connect2.php';

        $user = $_POST['user']; //De ingevulde gegevens worden toegekend aan variabelen.
        $pass = $_POST['pass'];

        $querypass = "SELECT * FROM 'users' WHERE 'user'='".$user."'"; //We halen het wachtwoord op voor de ingegeven gebruikersnaam in de database. Dit is de MySQL Query.
        $fetchpass = mysql_query($querypass) or die ( mysql_error( ) ); //Hier voeren we de Query uit.
        $checkpass = mysql_fetch_object($fetchpass); //Hier wordt het wachtwoord toegekend aan een variabele.
    
        if ($pass == $checkpass->pass) { //We kijken of het opgehaalde wachtwoord gelijk is aan het gegeven wachtwoord, zoja mogen we verder, anders ...¨(*)
            $valid = 'TRUE';
            echo 'Yes!'; //moet nog weg, ter controle tijdens testen. (pagina die hieronder geïnclude wordt moet nog weg)
            include 'sec_index.php?page=home'; //Alles is ok, we geven de volgende pagina in (waar nogmaals een beveiliging wordt ingebouwd.)
            }
        else {
            echo 'Uw gebruikersnaam of wachtwoord is niet correct, gelieve opnieuw te proberen.'; // (*)... wordt dit weergegeven.
         }
    }

?>


De error: "You have an error in your SQL syntax near ''users' WHERE 'user'=''' at line 1"

Mocht je de fout zien, je hulp is welkom, maar hier kan ik zelf ook achter komen denk ik. :)

alvast bedankt voor alle hulp!
 
Joren de Wit

Joren de Wit

18/10/2008 22:44:00
Quote Anchor link
Wat doen die quotes daar rond je tabel- en kolomnaam? Die horen daar niet thuis. Quotes gebruik je enkel rond strings...
 
Bavo

Bavo

18/10/2008 22:49:00
Quote Anchor link
Nu voel ik me dom... :)

Allesinds, nu moet ik enkel nog eens controleren of de tabelnaam juist is, want de error vertelt me dat die tabel niet bestaat.

edit: had een foutje gemaakt in connect2.php, geen probleem nu, alles werkt!

Bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Bavo
 



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.