foutcode bij inlogscript.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Coenie

Mark Coenie

04/02/2015 22:22:23
Quote Anchor link
Hallo allemaal,

Ik ben php aan het leren uit een boek.
In het hoofdstuk waar ik nu mee bezig ben wordt er contact gemaakt tussen een inlog script en de database.
het hele hoofdstuk liep voorspoedig tot het eind. Toen kreeg ik de volgende foutmelding:

Parse error: syntax error, unexpected '}' in C:\XAMPP\htdocs\inlog_pagina\login.php on line 99

Ik heb alle scripts nagegekeken en gecontroleerd of de code overeen kwam met de code uit het boek. Hier en daar heb ik wat kleine foutjes eruit kunnen halen maar de foutmelding blijft.

Ik heb het boek al enkele keren betrapt op codefoutjes. Ik vermoed dat er een fout in het boek staat die ik niet kan vinden. Ook heb ik mijn twijfels over bepaalde stukjes code uit het boek.
In de bijgevoegde code heb ik bij die stukjes code vraagtekens bijgezet.

Kan iemand de fout vinden? En kan iemand mij toelichting geven over de stukjes code waar ik vraagtekens bij heb staan? Wellicht kunnen die stukjes code ook de foutmelding veroorzaken.

Bij voorbaat dank

index.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
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
<?php
session_start();
// Identieficatie
if( !isset($_SESSION['sid']) || ($_COOKIE['PHPSESSID'] != $_SESSION['sid'])):
    header('location: ./login.php');
    return;
endif;


//view
//inlog index.php

include('html_kop.inc.php');
?>


<h1>Inlog script</h1>
<div>Gebruiker: <?php echo $_SESSION['naam'] ?></div>
<div id="afmeldformulier">
    <form name="signup" action="login.php" method="POST">
        <input type="submit" name="signout" value="Uitloggen">
    </form>
</div>
 
 
<?php
include('html_staart.inc.php');
?>

[/quote]

login.php
[quote]
<?php
//controller
session_start();
$sessie = false;
$form = '';

include('config.inc.php');
include('dbklasse.inc.php');
$db = new dbklasse(DB_HOST, DB_NAME, DB_USER, DB_PASS);
$db->opendb();
    
if( isset($_POST['signout']) ):
    vernietig_sessie();
endif;


if( isset($_SESSION['sid']) && $_COOKIE['PHPSESSID'] == $_SESSION['sid']):
    header('location: ./index.php');
else:
    if( isset($_POST['in']) ):
        $controleer = signin($fouten);
        if( $controleer === false ):
            $form = form_in($fouten);
        else:
            maak_sessie($controleer);
            $sessie = true;
            header('location: ./index.php');
        endif;

    elseif( isset($_POST['up']) ):
        if( !signup($fouten) ):
            $form = form_up($fouten);
        else:
            maak_sessie($_POST['naam']);
            $sessie = true;
            header('location: ./index.php');
        endif;

    elseif( isset($_GET['signin']) ):
        $form = form_in();
    elseif( isset($_GET['signup']) ):
        $form = form_up();
    else:
        $form = form_inup();
    endif;
endif;


$db->sluitdb();

//view
include('html_kop.inc.php');


function
signin(&$terug){
        $ok = true;
        if( $_POST['mail'] == '' ):
            $terug['error_mail'] = 'Vul uw e-mailadres in!';
            $ok &= false;
        endif;

        if( $_POST['pass'] == '' ):
            $terug['error_pass'] = 'Vul uw wachtwoord in!';
            $ok &= false;
        endif;

    
        if( $ok ):
            // controleer gegevens in database
            // haal NAAM uit database

            $sql = "            
                SELECT
                id, naam
                FROM
                gebruikers
                WHERE
                mail='"
.$_POST['mail']."' && pass='".$db->versleutel($_POST['pass'])."'
            "
;
        $records = $db->rijendb($sql);
        if( count($records) > 0 ):
        
        // sessie_id in db stoppen
                $sql = "
                UPDATE
                gebruikers
                SET
                sid = '"
.session_id()."'
                WHERE
                id='"
.$records[0]['id']."'
                "
;
        $db->querydb($sql);
        return $records[0]['naam'];

            if( true ):
                return "NAAM";
            else:
                $terug['error_mail'] = 'Gegevens niet correct!';
                return false;
            endif;

        else:
            return false;
        endif;
    }
    
function
signup(&$terug){
        $ok = true;
        if( $_POST['naam'] == ''):
            $terug['error_naam'] = 'Vul uw naam in!';
            $ok &= false;
        endif;

        if( $_POST['mail'] == ''):
            $terug['error_mail'] = 'Vul uw e-mailadres in!';
            $ok &= false;
        endif;

        if( $_POST['pass1'] == '' || $_POST['pass1'] != $_POST['pass2'] ):
            $terug['error_pass'] = 'Vul uw tweemaal hetzelfde wachtwoord in';
            $ok &= false;
        endif;

    
        if( $ok ):
        // Controleer in database of email nog niet bestaat
        $sql = "
            SELECT
            id
            FROM
            gebruikers
            WHERE
            mail='"
.$_POST['mail']."'
        "
;
        if( $db->aantaldb($sql) == 0 ):
        
                // maak nieuw record in database
                $ml = $db->schonestring($_POST['mail']);
                $nm = $db->schonestring($_POST['naam']);
                $sid = session_id();
                $pass = $db->versleutel($_POST['pass1']);
                $nu = $db->maaksqldate(time());
                $sql = "
                    INSERT TO
                    gebruikers
                    (mail, naam, pass, sid, aanmaak, login)
                    VALUES
                    ('$ml', '$nm', '$pass', '$sid', '$nu', '$nu')
                "
;
                return $db->querydb($sql);
            else:
                $terug['error_mail'] = 'E-mail is al in gebruik!';
                return false;
            endif;

        else:
            return false;
        endif;
    }

function
maak_sessie($naam){
    $_SESSION['sid'] = session_id();
    $_SESSION['naam'] = $naam;
}


function
vernietig_sessie(){
    session_unset();
    session_destroy();
    setcookie('PHPSESSID', '', time()-3600, './');
}

function
form_inup(){
    return '
        <h1>Aanmelden of inloggen</h1>
        wilt u
        <a href="'
.$_SERVER["SCRIPT_NAME"].'?signin">Inloggen</a> of
        <a href="'
.$_SERVER["SCRIPT_NAME"].'?signup">Annmelden</a>?<br>
    '
;
}

function
form_in($gegevens = array()){
    $regels = '<h1>Inloggen</h1>';
    $regels .= '<form name="signin" action="" method="POST">';
    if( isset($gegevens['error_mail']) ):
        $regels .= $gegevens['error_mail'].'<br>';
    endif;

    $regels .= '
        E-mailadres:
        <input type="text" name="mail" value="'
.$_POST['mail'].'"><br>
        '
;
    if( isset($gegevens['error_pass']) ):
        $regels .= $gegevens['error_pass'].'<br>';
    endif;

    $regels .= '
        Wachtwoord:
        <input type="password" name="pass" value=""><br>
        <input type="submit" name="in" value="Inloggen"><br>
    '
;
    $regels .= '</form>';
    return $regels;
}

function
form_up($gegevens = array()){
    $regels = '<h3>Sign up</h3>';
    $regels .= '
        <form name="signup" action="" method="POST">
        '
;
    if( isset($gegevens['error_mail']) ):
        $regels .= $gegevens['error_mail'].'<br>';
    endif;

    $regels .= '
        E-mailadres:
        <input type="text" name="mail" value="'
.$_POST['mail'].'"><br>
    '
;
    if( isset($gegevens['error_naam']) ):
        $regels .= $gegevens['error_naam'].'<br>';
    endif;

    $regels .= '
        Naam:
        <input type="text" name="naam" value="'
.$_POST['naam'].'"><br>
    '
;
    if( isset($gegevens['error_pass']) ):
        $regels .= $gegevens['error_pass'].'<br>';
    endif;

    $regels .= '
        Wachtwoord:
        <input type="password" name="pass1" value=""><br>
        Herhaal wachtwoord:
        <input type="password" name="pass2" valeu=""><br>
        <input type="submit" name="up" value="Aanmelden"><br>
    '
;
    $regels .= '</form>';
    return $regels;
}


include('html_staart.inc.php');

?>


config.inc.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
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
define('DB_HOST', 'localhost'); // meestal localhost
define('DB_USER', '#'); // naam van de gebruiker
define('DB_PASS', '#');
define('DB_NAME', 'inlog_pagina'); // naam van de database

include('config.inc.php');//???
include('dbklasse.inc.php');

$mail = 'marietje@nogeen.nl';
$naam = 'marietje';
$sid = session_id();
$pass = 'geheim wachtwoord';

$db = new dbklasse(DB_HOST, DB_NAME, DB_USER, DB_PASS);
$db->opendb();

$sql = "
    INSERT INTO
    gebruikers
        (mail, naam, pass, sid, aanmaak, login)
    VALUES
        ('$mail', '$name', '"

        .$db->vesleutel($pass).
        "', '$sid', '"
        .$db->maaksqldate(time()).
        "', '"
        .$db->maaksqldate(time()).
        "')
    "
;
    
if( $db->querydb($sql) ):
    echo "<p>Gebruiker $naam aangemaakt</p>";
endif;


$db->sluitdb();
?>

[/quote]

dbklasse.inc.php
[quote]
<?php

class dbklasse{
    var
$dbhost;
    var
$dbname;
    var
$dbuser;
    var
$dbpass;
    var
$dblink;
    // aanmeld gegevens vastellen
    function _construct($h, $n, $u, $p){
        $this->dbhost = $h;
        $this->dbname = $n;
        $this->dbuser = $u;
        $this->dbpass = $p;
    }

    // db verbinding openen
    function opendb(){
        $this->dblink = mysql_connect(DB_HOST, DB_USER, DB_PASS)
            or die ('<p>fout: connect</p>');
        mysql_select_db(DB_NAME, $this->dblink)
            or die ('<p>fout: select</p>');//???
        return true;
    }
    
    function
sluitdb(){
        mysql_close($this->dblink)
        or die ('<p>fout: close</P>'); //???
    return true;
    }
    
    function
querydb($sql){
        return mysql_query($sql, $this->dblink)
            or die ("<p>fout: $sql</p>");//???
    }
    
    function
aantaldb($sql){
        $reslutaat = mysql_query($sql, $this->dblink)
            or die ("fout: $sql");//???
        return mysql_num_rows($resultaat);
    }
    
    function
rijendb($sql){
        $resultaat = mysql_query($sql, this->dblink)
            or die ("fout: $sql");//???
        $data = array();
        while( $d = mysql_fetch_array($resultaat, MYSQL_ASSOC)):
            $data[] = $d;
        endwhile;

        return $data;
    }
    
    function
schonestring($string, $html=false){
        $string = trim($string);
        if ( !$html ):
            $string = strip_tags($string);
        endif;

        $string mysql_real_escape_string($string);
        return $string;
    }

    // maak een datum en tijdstip
    function maaksqldate($tijdstamp){
        return date('Y-m-d H:i:s', $tijdstamp);
    }

    // versleuteld wachtwoord
    function versleutel($pass){
        return md5($pass);
    }
}


?>

- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 04/02/2015 23:06:47 door - Ariën -
 
PHP hulp

PHP hulp

22/01/2020 06:45:53
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/02/2015 22:55:22
Quote Anchor link
Er mist een endif; in de functie signin().

Als je een if(): schrijft moet er ook altijd een endif; volgen.
als je een if in een if schrijft eindig je ook met endif; endif;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($a == 1):
    if($b == 1):
        // doe iets
    endif;
endif;

?>


Goed inspringen zoals ik hierboven doe is hierbij ook belangrijk om je code leesbaar te houden. (Bij iedere if, while, for, foreach etc doe je een tab erbij en bij een endif of } doe je weer een tab minder)

Verder wil ik graag adviseren om accolades te gebruiken {}. Dit wordt door de meeste programmeurs zo gedaan en komt ook overeen met veel andere programmeertalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($a == 1) {
    if($b == 1) {
        // doe iets
    }
}

?>
Gewijzigd op 04/02/2015 22:58:54 door Frank Nietbelangrijk
 
Thomas van den Heuvel

Thomas van den Heuvel

05/02/2015 01:38:00
Quote Anchor link
Just curious, welk boek is dit (ISBN nummer)?

Want als je de code haast letterlijk hebt overgenomen weet ik niet of dit zo'n fantastisch boek is om PHP te leren :).
 
- Ariën -
Beheerder

- Ariën -

05/02/2015 09:15:30
Quote Anchor link
Een drukfoutje kan gebeuren. Daarvoor hoef je niet een heel boek voor af te schrijven.
 
Henk de Vriep

Henk de Vriep

05/02/2015 09:54:39
Quote Anchor link
- Aar - op 05/02/2015 09:15:30:
Een drukfoutje kan gebeuren. Daarvoor hoef je niet een heel boek voor af te schrijven.



Is het uberhaupt wel slim om te leren uit een boek dat geen accolades in if-loops gebruikt? Ik ken niet anders dan accolade gebruik namelijk...
Gewijzigd op 05/02/2015 10:03:43 door Henk de Vriep
 
Thomas van den Heuvel

Thomas van den Heuvel

05/02/2015 14:33:30
Quote Anchor link
EDIT:
Henk de Vriep op 05/02/2015 09:54:39:
Is het uberhaupt wel slim om te leren uit een boek dat geen accolades in if-loops gebruikt? Ik ken niet anders dan accolade gebruik namelijk...

Ik kan mij vergissen, maar volgens mij bedient WordPress zich hier nog wel eens van.


- Aar - op 05/02/2015 09:15:30:
Een drukfoutje kan gebeuren. Daarvoor hoef je niet een heel boek voor af te schrijven.

Daar heb ik het dan ook niet over, het gaat mij meer om naamgeving en de algehele organisatie van de code.

Daarnaast is het niet belangrijk wat je precies doet, maar waarom je iets doet. Uit dat laatste spreekt namelijk motivatie wat een gedachtenproces impliceert, die gebaseerd is (of zou moeten zijn) op kennis.

Naar aanleiding van de codefragmenten werd ik nieuwsgierig naar het pad wat wordt gevolgd dat uitmondt in die code. Als ik de beweegredenen kan inzien, kan ik misschien beter begrijpen waarom de code er zo uitziet.
Gewijzigd op 05/02/2015 14:40:48 door Thomas van den Heuvel
 
Niek Kasius

Niek Kasius

05/02/2015 15:29:16
Quote Anchor link
in het de index zoals jij die hier hebt staan moet regel 99 en 100 een regel zijn

WHERE mail='".$_POST['mail']."' && pass='".$db->versleutel($_POST['pass'])."'";
en daarin staat mail dat in de SELECT daar boven niet voorkomt Dus dat zou de fout melding wel eens kunnen zijn,
Pas op ik ben ook maar een leek, dus pin me daar niet op vast, ik probeer alleen maar te helpen.
 
Henk de Vriep

Henk de Vriep

05/02/2015 15:47:36
Quote Anchor link
Niek Kasius op 05/02/2015 15:29:16:
in het de index zoals jij die hier hebt staan moet regel 99 en 100 een regel zijn

WHERE mail='".$_POST['mail']."' && pass='".$db->versleutel($_POST['pass'])."'";
en daarin staat mail dat in de SELECT daar boven niet voorkomt Dus dat zou de fout melding wel eens kunnen zijn,
Pas op ik ben ook maar een leek, dus pin me daar niet op vast, ik probeer alleen maar te helpen.


Nee dat is de fout niet. De SELECT clause heeft niks van doen met de WHERE clause in dit voorbeeld. In de select geef je alleen aan wat er verwacht wordt in het resultaat van de query.

Hoewel de error zegt dat het op regel 99 fout gaat is dat in dit geval niet de zelfde regel 99 als van de error.
 
Elmar vH

Elmar vH

05/02/2015 15:51:02
Quote Anchor link
"Parse error: syntax error, unexpected '}' in C:\XAMPP\htdocs\inlog_pagina\login.php on line 99"

Je geeft index.php en config.inc.php

S.v.p. login.php plaatsen
Gewijzigd op 05/02/2015 15:52:32 door Elmar vH
 
Mark Coenie

Mark Coenie

05/02/2015 19:06:16
Quote Anchor link
Quote:
Als je een if(): schrijft moet er ook altijd een endif; volgen.
als je een if in een if schrijft eindig je ook met endif; endif;

Bedankt Frank!
Dit was idd de foutmelding.
Ik kan weer verder.

Quote:
Een drukfoutje kan gebeuren. Daarvoor hoef je niet een heel boek voor af te schrijven.

Quote:
Is het uberhaupt wel slim om te leren uit een boek dat geen accolades in if-loops gebruikt? Ik ken niet anders dan accolade gebruik namelijk...

Ik ben opzich best tevreden over het boek.
Het heeft me al mooi op weg geholpen.
Fouten kunnen idd voorkomen.
Ik denk zelfs dat er maar weinig programmeerboeken bestaan waar geen code fouten in staan.
 
WD Freak

WD Freak

05/02/2015 20:16:30
Quote Anchor link
Php En mysql voor beginners van Victor Peters? Ik heb dit boek ook. Veel foutjes, toch veel uit geleerd
 
Ivo P

Ivo P

05/02/2015 20:25:15
Quote Anchor link
Quote:
Is het uberhaupt wel slim om te leren uit een boek dat geen accolades in if-loops gebruikt? Ik ken niet anders dan accolade gebruik namelijk...


Het is een alternatieve syntax.
Beide zijn mogelijk

if(true) {
}

of
if(true):
endif;

en idem voor for, foreach en while.

De keuze voor een van beide is een persoonlijke. Een groot deel van de PHP gemeenschap heeft inderdaad een voorkeur voor de accolades. Mede vanwege het kleiner aantal karakters.

Daarmee is de if: endif; versie echter niet fout.
In vooral templates heb ik zelf ook een voorkeur voor de if/endif versie.
 



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.