Hoi,
Ik probeer alle tekst op mijn site vanuit de database te halen.
Nou wil ik een controle inbouwen dat als er geen data is, er een melding wordt weer gegeven dat er geen data is.

Dat heb ik als volgt geprobeerd:

<?php
// data exists
if($query) {
while($result = mysql_fetch_array($query)) {
echo $result['bericht'];
}
}
// no data excists
else {
echo 'Op dit moment zijn er nog geen gegevens beschikbaar.';
}
?>
Hier heb ik vervolgens een functie van gemaakt, maar dat werkt nog niet zoals het helemaal moet.

Ik wil namelijk de eerste echo, de echo waarmee ik dus het resultaat uit de database haal, als het ware variabel maken. Ik wil namelijk de functie meerdere keren aanroepen, eerst voor de titel, dan bericht, en vervolgens op datum en bron.

Als je meer informatie wilt, zegt u t maar, ik weet het niet meer... :S

Gr. mark
Beetje vreemd dit:
if($query) {

Zie de diverse tutorials.
Bouw foutafhandeling in.
Werkt die afhandeling gegevens/geen gegevens wel naar behoren op deze manier?
Of is het probleem dat je niet weet welke variabele je op wilt halen?

1) Controleren of er gegevens in je result (hetgeen mysql_query terug geeft) zitten kan op meerdere manieren. Een gemakkelijke manier is mysql_num_rows():


<?php

$exec = mysql_query( 'SELECT * FROM table WHERE id = 1');

if(mysql_num_rows( $exec ) > 0){

   // ja, er zijn gegevens, hier fetchen 

}else{

  // nee geen gegevens, echo'en maar

}
?>


2) Je wilt meerdere variabelen ophalen uit je database? Ja dat kan. In de SELECT query kun je aangeven welke kolommen er opgehaald worden. "*" voor alle kolommen, anders de kolomnaam specificeren, gescheiden door een komma, zoals SELECT id, name, title FROM table.

Daarna kunnen deze gegevens opgehaald worden met mysql_fetch-array():


<?php

while($data = mysql_fetch_array( $exec )){

   echo $data[ 'title' ];  // kolomnaam 'title' in de DB
   echo $data[ 'message']; // kolomnaam 'message' in DB
   // etc.
}
?>


Hopelijk helpt je dit verder.
@Dave: Waarom beide scriptjes twee keer in je post?

Edit: Okee, je had het al door en je was een stuk sneller. ;-)
Ja, UBB-parser is een beetje buggy, naar het schijnt :P
@SanThe:
die if($query) { sloeg op hierop, was ik vergeten in te voegen.

<?php
$query = mysql_query("SELECT titel,bericht,datum,link FROM tekst WHERE id='". $id ."'");
?>

Ik ben beginnend, wil t graag goed leren, kun je mij vertellen welke controles ik moet inbouwen? of anders een linkje geven, spit ik t zelf door.

@ Dave:
Jou script komt volgens mij aardig overeen met het doel wat ik met dat van mij voor ogen had, alleen waar het me om gaat is dat ik dit script in een functie wil stoppen, en vervolgens de gegevens, wanneer die bestaan, op een andere plek echoen.

EDIT:
Ik wil dus de kolomnaam als het ware variabel maken. Dat ik dus wanneer ik de functie aanroep een andere kolomnaam kan gebruiken.
mark moes schreef op 05.02.2009 11:01
@SanThe:
die if($query) { sloeg op hierop, was ik vergeten in te voegen.

<?php
$query = mysql_query("SELECT titel,bericht,datum,link FROM tekst WHERE id='". $id ."'");
?>

$query is dus niet zoals de naam doet vermoeden een query, maar een result van het uitvoeren van een query. $result zou een betere benaming zijn.
Edit (laatste edit)

Na heel veel edits hier in deze topic, en heel veel gepruts meer van mij, kan ik de blijde mededeling doen dat ik 'er uit' ben. Graag wat feedback (bijvoorbeeld van SanThe, jij gaf aan dat er meer controle moest komen)
of de controles goed zijn, en of er geen fouten in zitten.

Dit heb ik er van gemaakt, en het werkt hier vlekkeloos:

<?php

if(isset($_GET['id']) && is_numeric($_GET['id'])) {
$id = $_GET['id'];
}
else {
$id = 1;

}

$sql = "SELECT * FROM tekst WHERE id='". $id ."'";

$result = mysql_query($sql);

if (mysql_num_rows($result) >=1)
{
while ($row = mysql_fetch_array($result))
{
echo '<div class="headline">';
echo $row['titel'];
echo '</div>';

echo '<div class="text">';
echo $row['bericht'];
echo '</div>';

echo '<div class="footer">';
echo $row['datum'];
echo '</div>';

}
}
else
{
echo '<div class="headline">';

echo '</div>';

echo '<div class="text">';
echo 'Op dit moment zijn er (nog) geen gegevens beschikbaar.';
echo '</div>';

echo '<div class="footer">';

echo '</div>';
}
?>

Ik hoor t graag! Van fouten wil ik leren...

Reageren