Hoi,

Ik ben een beginner en probeer om informatie uit de database weer te geven. Helaas haalt het script niet alles uit de database, namelijk de eerste regel in de tabel laat die niet zien :S... Ik krijg ook geen foutmeldingen te zien. Dit is de enigste code die ik heb in het bestand.


//Database verbinding
mysql_connect("localhost", "test", "test") or die(mysql_error());
mysql_select_db("test");

//gegevens ophalen uit de database
$sql= "SELECT * FROM `members`";
$res= mysql_query($sql);
$data= mysql_fetch_assoc($res);

if(empty($data))
{
echo "Er is nog geen data toegevoegd.";
}
else
{
while($data= mysql_fetch_assoc($res))
{
$naam= $data['naam'];
echo $naam. "<br>";
}
}

Als er niks in de tabel members staat geeft die netjes weer dat er nog geen data is in de database
Als ik 1 naam in de database heb geeft die deze niet weer.. maar zegt ook niet dat er niks in staat. Pas vanaf de 2de naam geeft hij de data weer..
het is net of de eerste regel niet word weergegeven.
Kan iemand mij helpen?
Alvast bedankt
if(mysql_num_rows($res)==0)
{
echo "Er is nog geen data toegevoegd.";
}
else
{
while($data= mysql_fetch_assoc($res))
{
$naam= $data['naam'];
echo $naam. "<br>";
}
}
barnie schreef op 10.02.2006 01:25

$naam= $data['naam'];
echo $naam. "<br>";
Waarom deze constructie? Je hebt een array $data waar al je gegevens in staan en nu maak ook nog eens een variabele $naam aan waar dezelfde gegevens in staan als in $data['naam']. Dat levert alleen maar extra tikwerk (met kans op fouten) en extra geheugengebruik op. Tevens heeft dit als nadeel dat je (zeker bij grote scripts) niet meer weet waar $naam vandaan komt.

Verder altijd controleren of een query wel is gelukt en heeft opgeleverd wat jij verwacht.

Tenslotte nooit en te nimmer backtics ` gebruiken, dat gaat vroeg of laat problemen opleveren.
Je gebruikt in je script 2x de regel

'$data= mysql_fetch_assoc($res);'

De bovenste wordt echter nooit weergegeven :P da's de reden dat je eerste 'record' verdwijnt.


//Database verbinding
mysql_connect("localhost", "test", "test") or die(mysql_error());
mysql_select_db("test");

//gegevens ophalen uit de database
$sql= "SELECT * FROM `members`";
$res= mysql_query($sql);
$data= mysql_fetch_assoc($res); // DIT RECORD WORDT NOOIT GEPRINT

if(empty($data))
{
echo "Er is nog geen data toegevoegd.";
}
else
{
while($data= mysql_fetch_assoc($res)) // MAAR VANAF DIT RECORD WEL
{
$naam= $data['naam'];
echo $naam. "<br>";
}
}
Mensen bedankt voor jullie snelle reacties. Heb van ieder jullie tips toegepast en het werkt nu perfect! BEDANKT !! :)
Frank schreef op 10.02.2006 10:18
Waarom deze constructie? Je hebt een array $data waar al je gegevens in staan en nu maak ook nog eens een variabele $naam aan waar dezelfde gegevens in staan als in $data['naam']. Dat levert alleen maar extra tikwerk (met kans op fouten) en extra geheugengebruik op. Tevens heeft dit als nadeel dat je (zeker bij grote scripts) niet meer weet waar $naam vandaan komt.
Er zijn verschillende redenen om de waarde van $data['naam'] wél toe te kennen aan een variabele:

1) De verwerking in strings is eenvoudiger. Althans, ik geef zelf de voorkeur aan

<? $str = "blabla $naam zwamzwam"; ?>

boven

<? $str = "blabla $data[naam] zwamzwam"; ?>

En nu zal het halve forum wel weer op mijn nek springen dat ik mijn variabelen buiten de quotes moet halen, maar ik blijf nog steeds bij mijn standpunt dat je dat moet doen wat (voor jou) het meest duidelijk is, en ik vind dat door dat gegoochel met quotes de code er niet duidelijker op wordt (en een ieder die dat wel vindt, moet dat gewoon blijven doen; dat is een kwestie van persoonlijke programmeerstijl).

2) Als je $data['naam'] vaak gebruikt, moet PHP elke keer de array $data dereferencen, en dat kost veel tijd. Het is dan efficiënter om de waarde eenmalig aan een variabele toe te kennen en met die variabele te gaan werken.

Wat betreft het extra geheugengebruik: als het simpele waardes betreft, zou ik me daar niet druk over maken. Betreft het blokken data van een paar kilobyte, dan zou je geheugengebruik een rol kunnen spelen. In dat geval kun je dan met references gaan werken:

<? $naam =& $data['naam']; ?>

Hierbij verwijst $naam naar dezelfde geheugenlocatie als $data['naam'] en kost het je dus alleen een entry in de symbol table (en die is niet groter dan een paar bytes).

Wat betreft je argument dat je in een groot script niet meer weet waar je $naam vandaan komt: Da's een kwestie van je namen goed kiezen ;-) Als je grote scripts programmeert is naamgeving sowieso een belangrijk issue, dus ik ga er eigenlijk vanuit dat je dat dan vanzelf wel doet...
Helder deze duidelijke (althans voor mij) uitleg Willem_vp over de strings en arrays en dan de vars.

Ik loop daar altijd mee te klooien om maar te zwijgen over de single en dubbel quotes en ben ook van mening dat je zelf een stijl van programmeren vindt die bij je past en waar je dan ook relatief gezien minder (typ)fouten in maakt.

Ik ben van de hoofdletters in vars afgestapt omdat ik vind dat ik hier fouten in maak van wat was het ook alweer dus ik sluit me aan bij deze manier van noteren:

<? $str = "blabla $naam zwamzwam"; ?>

boven

<? $str = "blabla $data[naam] zwamzwam"; ?>

Bedankt maar weer :)

Reageren