Gerturnde value van functie geeft maar één row terug
Ik ben bezig met een newsfeed voor mijn cms. Nu heb ik een twee functies gemaakt in mijn
functions.php bestand. Deze include ik overal uiteraard. Dit zijn de volgende functies:
function getAllNewsElements(){
global $connection;
$query = "SELECT title, author, date, content
FROM news
";
$result_set = mysql_query($query , $connection);
confirmQuery($result_set);
return $result_set;
}
function printNewsElements(){
global $news;
$result_set = getAllNewsElements();
while($news = mysql_fetch_array($result_set)){
return $news; /* HIER RETURN IK DE ARRAY $news
/*echo "<p>{$news["title"]}</p>";
echo "<p>{$news["author"]}</p>";
echo "<p>{$news["date"]}</p>";
echo "<p>{$news["content"]}</p>";
echo "<br/>";
*/ DIT RETURNED WEL ALLE ROWS
}
}
Het probleem hierbij is dat ik in de functie zelf wel alle rows terug krijg maar als ik de $news array in een ander bestand op deze manier echo:
printNewsElements();
foreach($news as $key){
echo $key;
echo "<br/>"
}
Krijg ik maar één row terug die twee keer wordt weergegeven. Mijn database is niks mis mee dat zou moeten kloppen.
Naar mijn idee komt het omdat de de array $news na dat hij 1x gefetched is al returned. Ik heb echter geen idee hoe dit op te lossen. Hopelijk kan iemand mij adviseren of een oplossing bieden.
Alvast bedankt voor de tijd en moeite,
Om alles op te halen kan je het eerst in een array stoppen en die array (een multidimensionale array dus) returnen na je while loop.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$results = array();
while($news = mysql_fetch_array($result_set)){
$results[] = $news;
}
return $results;
?>
$results = array();
while($news = mysql_fetch_array($result_set)){
$results[] = $news;
}
return $results;
?>
Verder graag je code tussen [.code][./code] tags (zonder de puntjes) of tussen php tags zoals je die ook in php scripts gebruikt zodat alles iets makkelijker leesbaar is.
Als je in een while() een return zet wordt de while() gestopt. Dus logisch dat er slechts alleen de eerste waarde uitkomt.
Erwin H op 04/07/2012 15:09:59:
Na een return verdwijnt de scope uit de functie. Je while loop zal dus onherroepelijk stoppen na de eerst fetch en de rest wordt genegeerd.
Om alles op te halen kan je het eerst in een array stoppen en die array (een multidimensionale array dus) returnen na je while loop.
Verder graag je code tussen [.code][./code] tags (zonder de puntjes) of tussen php tags zoals je die ook in php scripts gebruikt zodat alles iets makkelijker leesbaar is.
Om alles op te halen kan je het eerst in een array stoppen en die array (een multidimensionale array dus) returnen na je while loop.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$results = array();
while($news = mysql_fetch_array($result_set)){
$results[] = $news;
}
return $results;
?>
$results = array();
while($news = mysql_fetch_array($result_set)){
$results[] = $news;
}
return $results;
?>
Verder graag je code tussen [.code][./code] tags (zonder de puntjes) of tussen php tags zoals je die ook in php scripts gebruikt zodat alles iets makkelijker leesbaar is.
Bedankt voor je antwoord. Het werkt!
Heb je toevallig ook enig idee hoe ik netjes alle elementen van een bericht kan echo en? Ik heb nu dus
een multidimensionale array ge echo ed maar als ik dus bijvoorbeel de 'title' echo krijg ik de twee titels onder elkaar
en ik wil zeg maar per bericht alles gegroepeerd hebben. Dus titel1->content1 en titel2->content2
Alvast bedankt,
Jaron T op 04/07/2012 17:44:58:
Hiervoor zou je implode kunnen gebruiken; http://php.net/implode
Super! Heel erg bedankt:) Gewenste eindresultaat:
Eerste Mededeling
Pim Meijer
2012-07-04 13:13:21
Dit is de eerste mededeling
Tweede mededeling
Pim Meijer
2012-07-04 13:27:54
Dit is de tweede mededeling
Tweede mededeling