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

<?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);
    }
}

?>


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.

Reageren