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
<?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
<?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 = '[email protected]';
$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);
}
}
?>