Archief - PHP: Database klasse

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

KO

Legacy Member
Hallo,

Ik heb 2 jaar géén PHP-code bekeken gehad, dus mijn kennis is wat roestig.

Ik zit nu in het 6e jaar informaticabeheer en moet nu terug PHP kennen, dus dacht ik een project van vroeger verder af te werken in PHP


Nu heb ik natuurlijk meteen een probleem. Ik ben bezig aan een database klasse:

PHP:
<?php
class sql{
	var $qaant;
	
	function fout($soort){
		echo "MySQL error: " . $soort;
		echo "<br><hr>De foutmelding: " . mysql_error() . "<br><hr>";    
	}
	function dbstart($host="localhost", $gebruiker, $pass, $database){
		@mysql_connect($host, $gebruiker, $pass) or die($this->fout("Error bij het verbinden met de host!"));
		@mysql_select_db($database) or die($this->fout("Error bij het verbinden met de database!"));
    }
	function query($opdracht){
		$this->qaant++;
		$query = mysql_query($opdracht) or die($this->fout("Fout bij query uitvoeren!"));
		return $query;
	}
    function qaantal(){
		if(empty($this->qaant)) return 0;
        else return $this->qaant;
	}
	function dbstop(){
		return mysql_close();
	}
}
$db = New sql();
?>

Deze klasse werkt prima, maar ik doe iets fout bij het uitlezen.

PHP:
<?php
require_once("./includes/kern.php");
$db->dbstart("", $kern->bdgeb, $kern->dbpass, $kern->dbnaam);
 
echo $kern->path . " <br>\n";

while ($show = mysql_fetch_assoc($db->query("SELECT * FROM gebruikers"))){
	echo "<b>Voornaam: </b> $show[voornaam]<br>";
} 

echo $db->qaantal();
$db->dbstop();
 ?>

Dit levert een oneindige lus op die steeds het eerste record herhaald.

PHP:
<?php
$doen = "SELECT * FROM gebruikers";
$query = mysql_query($doen);
while ($show = mysql_fetch_assoc($query)){
	echo "<b>Voornaam: </b> $show[voornaam]<br>";
} 
?>
Werkt dan natuurlijk wel perfect.

Wat doe ik hier fout ? Het is wa lang geleden :)

Tyfius

Legacy Member
Lijkt me toch vrij logisch ?
Een query levert een rij van resultaten op. Dus uw juiste stuk code voert uw query uit en dan gaat gij op die rij met resultaten uw fetch_assoc op uitvoeren, de juiste oplossing.
In uw fout stuk code gaat gij elke keer opnieuw die query uitvoeren, dus die begint terug bij uw 1ste item in de rij, gaat dat tonen, voert uw query opnieuw uit ipv de resultatenrij te gebruiken en komt dus terug bij uw 1ste item uit.

KO

Legacy Member
Lol,idd.

Vrij achterlijke fout.


PHP:
<?php
require_once("./includes/kern.php");
$db->dbstart("", $kern->bdgeb, $kern->dbpass, $kern->dbnaam);
 
echo $kern->path . " <br>\n";

$q = $db->query("SELECT * FROM gebruikers");
while ($row = mysql_fetch_assoc($q)){
	echo $row['id'] . " ";
	echo $row['naam'] . " " . $row['voornaam'] . "<br> \n";
}

echo $db->qaantal();
$db->dbstop();
?>

werkt :)

[BAT] Hydra

Legacy Member
Tyfius zei:
Lijkt me toch vrij logisch ?
Een query levert een rij van resultaten op. Dus uw juiste stuk code voert uw query uit en dan gaat gij op die rij met resultaten uw fetch_assoc op uitvoeren, de juiste oplossing.
In uw fout stuk code gaat gij elke keer opnieuw die query uitvoeren, dus die begint terug bij uw 1ste item in de rij, gaat dat tonen, voert uw query opnieuw uit ipv de resultatenrij te gebruiken en komt dus terug bij uw 1ste item uit.

Inderdaad, dit zou wel moeten werken:

PHP:
<?php
require_once("./includes/kern.php");
$db->dbstart("", $kern->bdgeb, $kern->dbpass, $kern->dbnaam);
 
echo $kern->path . " <br>\n";

$query_result = $db->query("SELECT * FROM gebruikers");
while ($show = mysql_fetch_assoc($query_result)){
	echo "<b>Voornaam: </b> $show[voornaam]<br>";
} 

echo $db->qaantal();
$db->dbstop();
 ?>

Edit: =[KO]= is me voor ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan