Voor het eerst probeer ik iets met classes. Leek me wel handig. Ik heb het script overgetypt en nagekeken op fouten maar ik krijg steeds de volgende foutmelding:

Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /usr/home/domains/public_html/mijn_toegang.inc.php on line 62

Wat heb ik niet goed of het boek?


<?php
class mijn_toegang{
//Variabelen voor toegangsgegevens
var $user=""; //Gebruikersnaam voor MySql
var $password=""; //Wachtwoord
var $host="localhost"; //Naam (ip-adres) van computer met MySql
var $dbname=""; //Naam van de database
//Overige variabelen
var $db_verbinding=false; //Resultaat van verbinding
var $sql_result=false; //Resultaat van uitgevoerde Sql-opdracht

//Constructor definiëren
function mijn_toegang(){
//Functie verbinden wordt uitgevoerd bij aanroepen klasse
$this->verbinden();
}
//Als verbinding niet bestaat,
//verbinding opzetten en database als standaard definiëren
function verbinden(){
if ($this->db_verbinding==false){
$this->db_verbinding = @mysql_connect($this->host, $this->user, $this->password);
if (empty($this->db_verbinding)){
$this->fout("Bij opzetten verbinding");
}
$keuze = @mysql_select_db($this->dbname, $this->db_verbinding);
if(empty ($keuze)){
$this->fout("Bij selecteren van DB");
}
return $this->db_verbinding;
}
}

//Geef foutmelding weer en sluit script af
function fout($foutpunt){
echo $foutpunt . " is een fout opgetreden!<br />";
echo mysql_error() . "<br />"; //beschrijving van fout
echo mysql_errno(); //foutnummer
echo "</body></html>"; //html-tags sluiten
exit;
}

//Sql-opdracht uitvoeren
function sql_opdracht ($sql){
$this->sql_result = @mysql_query($sql, $this->db_verbinding);
if (empty($this->sql_result)){
$this->fout("Bij verzenden query");
}
return $this->sql_result;
}

//Als er al eerder een Sql-opdracht is uitgevoerd,
//wordt hier de array met de records weergegeven
function sql_gegevens(){
if(!empty($this->sql_result)){
$sql_array=@mysql_fetch_array($this->sql_result);
return $sql_array;
}else{
$this->fout ("Bij het weergeven van de records");
}
}
//Aan het einde van het script wordt de klasse direct aangeroepen
$db=new mijn_toegang();
?>
Je bent vergeten de class af te sluiten.

<?php
class mijn_toegang{
//Variabelen voor toegangsgegevens
var $user=""; //Gebruikersnaam voor MySql
var $password=""; //Wachtwoord
var $host="localhost"; //Naam (ip-adres) van computer met MySql
var $dbname=""; //Naam van de database
//Overige variabelen
var $db_verbinding=false; //Resultaat van verbinding
var $sql_result=false; //Resultaat van uitgevoerde Sql-opdracht

//Constructor definiëren
function mijn_toegang(){
//Functie verbinden wordt uitgevoerd bij aanroepen klasse
$this->verbinden();
}
//Als verbinding niet bestaat,
//verbinding opzetten en database als standaard definiëren
function verbinden(){
if ($this->db_verbinding==false){
$this->db_verbinding = @mysql_connect($this->host, $this->user, $this->password);
if (empty($this->db_verbinding)){
$this->fout("Bij opzetten verbinding");
}
$keuze = @mysql_select_db($this->dbname, $this->db_verbinding);
if(empty ($keuze)){
$this->fout("Bij selecteren van DB");
}
return $this->db_verbinding;
}
}

//Geef foutmelding weer en sluit script af
function fout($foutpunt){
echo $foutpunt . " is een fout opgetreden!<br />";
echo mysql_error() . "<br />"; //beschrijving van fout
echo mysql_errno(); //foutnummer
echo "</body></html>"; //html-tags sluiten
exit;
}

//Sql-opdracht uitvoeren
function sql_opdracht ($sql){
$this->sql_result = @mysql_query($sql, $this->db_verbinding);
if (empty($this->sql_result)){
$this->fout("Bij verzenden query");
}
return $this->sql_result;
}

//Als er al eerder een Sql-opdracht is uitgevoerd,
//wordt hier de array met de records weergegeven
function sql_gegevens(){
if(!empty($this->sql_result)){
$sql_array=@mysql_fetch_array($this->sql_result);
return $sql_array;
}else{
$this->fout ("Bij het weergeven van de records");
}
}
}//<<<<<<<<<<<<<<<<<
//Aan het einde van het script wordt de klasse direct aangeroepen
$db=new mijn_toegang();
?>
Bedankt jongens, stom dat dat in het boek vergeten is. Daar moet ik het tenslotte van leren.

(Het boek heet: MySQL zonder stress, nou ik heb dus al zitten stressen !!)
Klopt het hoe ik dit aanroep in mijn script?

Of moet ik $data steeds een andere naam geven.
Nu laat hij namelijk de artikelen niet zien die onder categorie komen(groep)

?
<div class="categorie" >
<?php
$db->sql_opdracht("SELECT cat_id,cat_naam FROM categorie ORDER BY cat_naam");

echo '<form method="POST" >';
echo '<select name="categorie" class="select">';

while ($data = $db->sql_gegevens()){
echo '<option value="'.$data['cat_id'] .'">'.$data['cat_naam'].'</option>';
}
echo '</select>';
echo '<input name="submit" type="image" value="categorie" src="plaatjes/pijlrechts.gif" alt="Bekijk deze categorie" />';
echo '</form>';
?>
</div> <!-- einde div categorie in het menulinks-->
<h1>Groep</h1>

<div class="groep" >
<?php
$db->sql_opdracht = ("SELECT groep_id,groep_naam FROM groep ORDER BY groep_naam");

while ($data = $db->sql_gegevens()){
echo '<a href="?groep_id='.$data['groep_id'] .'">'.$data['groep_naam'].'</a><br />';
}

?>
</div> <!-- einde div groep in menulinks -->
?>
Volgens mij gaat het helemaal goed.

In de variabele $data zit voor iedere loop een array met daarin de kolommen van de query (Ofwel 1 record uit bijvoorbeeld 1 of meer tabellen). Als er geen records meer zijn dan wordt $data gelijk aan (boolean) false en stopt dus de while loop (of lus).

edit:

Dit bedoelt u:
<?php
//Dit gaat goed:
while ($data = $db->sql_gegevens())
{
...
}
while ($data = $db->sql_gegevens())
{
...
}

// MAAR, dit niet:
while ($data = $db->sql_gegevens())
{
while ($data = $db->sql_gegevens())
{
...
}
}
?>

In het onderste geval wordt $data overschreven door de binnenste while lus. Als dit het gewenste resultaat is dan hoeft het natuurlijk niet fout te zijn.
Maar we kunnen na de binnenste while lus niet meer met de $data uit de buitenste while lus werken.
Oke, dat begrijp ik.

Maar ik heb mijn while lussen afgesloten voordat ik met een nieuwe begin. Maar hij laat de gegevens niet zien.

Testpagina

Toen ik het op de oude manier deed, dus het selecteren van de database, stond er bij groepen: Algemeen, kinderen, vrouwen, mannen, dieren.

Reageren