login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Foreach in functies

Offline Plukkie - 28/10/2011 16:40
Avatar van PlukkieLid Hallo,

Ik ben nog niet zo lang geleden begonnen met PHP en hoop dat iemand mij kan helpen. Ik wil graag in mijn html page (bijv. home.html.hp) functies toevoegen die aangemaakt zijn in het index.php bestand. De functie hieronder werkt volledig, maar output alle drie de $item variabelen (productname, brandname, rating) in 1 keer in mijn html page als ik de functie recents() toevoeg. Hierdoor kan ik aan elke afzonderlijke $item variable geen markup meer toevoegen.

Wat ik graag wil doen is voor elke $item variabele een functie aanmaken. Ik zou onderstaande code 3 keer kunnen kopieren in het index.php bestand en 3 functies kunnen maken, elke met 1 $item variabele, maar dat lijkt mij erg inefficient. Is er een manier waarop ik de code van start t/m het foreach gedeelte 1 keer schrijf en hergebruik in het maken van de 3 functies, zonder het opnieuw te kopieren?

<?php
function recents()
{
global $link;
//display products from database
$p_result = mysqli_query($link,
'SELECT brand.name AS brandname, product.name AS productname, total, votes FROM product INNER JOIN lookup ON product.id = p_id INNER JOIN brand ON brand.id = b_id');

if (!$p_result){
$error = 'Error fetching products: ' . mysqli_error($link);
include 'error.html.php';
exit();
}

while ($row = mysqli_fetch_array($p_result)){
$output[] = array ('brandname' => $row['brandname'], 'productname' => $row['productname'], 'rating' => (($row['total'])/($row['votes']))); //outputs values and also calculates total/votes = rating
}

foreach ($output as $item):

echo htmlspecialchars ($item['productname'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars ($item['brandname'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars ($item['rating'], ENT_QUOTES, 'UTF-8');
endforeach;
}
?>

6 antwoorden

Gesponsorde links
Offline vinTage - 28/10/2011 17:10 (laatste wijziging 28/10/2011 17:10)
Avatar van vinTage Nieuw lid je kan die opmaak toch in die foreach meegeven?
okay, dit is niet echt netjes/handig, maar zo vind ik je hele functie ook niet netjes/handig 

Offline Plukkie - 28/10/2011 17:21
Avatar van Plukkie Lid Klopt, maar ik wil opmaak/php graag zoveel mogelijk gescheiden houden. Maar gezien je de code niet zo netjes vindt, tips zijn van harte welkom!
Offline vinTage - 28/10/2011 17:41
Avatar van vinTage Nieuw lid Als je het echt gescheiden wilt hebben, dan maak je iets met templates.
Verder is het werken met global sowieso niet netjes.

Wat ik bedoelde met mn vorige reactie is:

  1. foreach ($output as $item):
  2. echo '<div class="prods">'.htmlspecialchars ($item['productname'], ENT_QUOTES, 'UTF-8').'</div>';
  3. echo '<div class="brand">'.htmlspecialchars ($item['brandname'], ENT_QUOTES, 'UTF-8').'</div>';
  4. echo '<div class="rating">'.htmlspecialchars ($item['rating'], ENT_QUOTES, 'UTF-8').'</div>';
  5. endforeach;

Offline Plukkie - 28/10/2011 18:09
Avatar van Plukkie Lid Zo heb ik het ook ongeveer in mijn html staan. Waar ik eigenlijk tegenaan loop is dat ik niet weet hoe ik de bovenstaande code in home.html.php kan laden, zonder dat deze ook geladen wordt in bijv. search.html.php. Voorheen had ik na het "while" gedeelte "include 'home.html.php'" staan, en had ik in home.html.php hetzelfde staan als in jouw post. Daarbij wordt alles netjes getoond.

Het probleem hiervan was echter dat als de search.html.php geladen is, de home.html.php geladen werd IN de search.html.php, simpelweg omdat er geen conditie is op de "include 'home.html.php'" in de index. Deze wordt dus altijd geladen. Om dit te omzeilen wilde ik er een functie van maken, zodat deze alleen werd geladen als ik die opgenomen had in het html bestand. Maar dit kon weleens een verkeerde workaround zijn... Weet jij misschien hoe ik dit kan oplossen?

Alvast bedankt!
Offline vinTage - 28/10/2011 18:36 (laatste wijziging 28/10/2011 18:37)
Avatar van vinTage Nieuw lid Je moet alleen de content includen (bv home) en als je in home die rating meuk wilt includen, dan kan je dat doen in de home.

Je moet dat rating ding dus niet in je index planten.



Bedankt door: Plukkie
Offline Plukkie - 28/10/2011 19:00
Avatar van Plukkie Lid Bedankt vinTage, ik zat veel te moeilijk te denken terwijl de oplossing eigenlijk eenvoudig is. De controller beperken tot get en post en de rest in de overige pagina's knallen.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.425s