Niet alle informatie wordt uit de database gehaald!
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
Gewijzigd op 10/02/2006 01:30:00 door Barnie
{
echo "Er is nog geen data toegevoegd.";
}
else
{
while($data= mysql_fetch_assoc($res))
{
$naam= $data['naam'];
echo $naam. "<br>";
}
}
barnie:
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.$naam= $data['naam'];
echo $naam. "<br>";
echo $naam. "<br>";
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.
'$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:
Er zijn verschillende redenen om de waarde van $data['naam'] wél toe te kennen aan een variabele: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.
1) De verwerking in strings is eenvoudiger. Althans, ik geef zelf de voorkeur aan
boven
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:
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...
Gewijzigd op 11/02/2006 08:58:00 door Willem vp
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:
boven
Bedankt maar weer :)