Ik ben nog maar pas begonnen met een cursus waarin ook PHP geleerd wordt. Nu krijg ik een thuisopdracht waarin dingen staan die ik maar nauwelijks begrijp. Wie helpt mij op weg met bijvoorbeeld een stap-voor-stap uitleg? Alvast bedankt voor de hulp.
Dit zijn bijvoorbeeld twee deelopdrachten waarbij ik echt op weg geholpen wil worden:

1
Ik heb al een apart php-bestand gemaakt met daarin een multidimensionaal array voor het menu en een foreach loop binnen een <ul> om het menu zichtbaar te krijgen.

<?php
$menu = array
(
   array
   (
	'href' => 'dierenvoedsel_3_home.php',
	'content' => 'Home',
	'target' => '_self',
	'seq' => 1,
   ),
   array
   (
	'href' => 'dierenvoedsel_3_over.php',
	'content' => 'Over ons',
	'target' => '_self',
	'seq' => 2,
   ),
   array
   (
	'href' => 'dierenvoedsel_3_product.php',
	'content' => 'Producten',
	'target' => '_self',
	'seq' => 3,
   ),
   array
   (
	'href' => 'dierenvoedsel_3_historie.php',
	'content' => 'Korte historie',
	'target' => '_self',
	'seq' => 4,
   ),
   array
   (
	'href' => 'dierenvoedsel_3_advies.php',
	'content' => 'Ons advies',
	'target' => '_self',
	'seq' => 5,
   ),
   array
   (
	'href' => 'dierenvoedsel_3_contact.php',
	'content' => 'Contact',
	'target' => '_self',
	'seq' => 6,
   )
);		

echo '<ul>';		
foreach ($menu as $key => $value)
   {
   echo '<li><a href="'.$value['href'].'" target="'.$value['target'].'">'.$value['content'].'</a></li>';
   }				
echo '</ul>';
?>


De menuknoppen zijn links en die werken. Op de Home-pagina heb ik dit toegevoegd:

<nav>			
<?php require_once('menu_dierenvoedsel.php');?>
</nav>


Maar hoe pak ik het volgende aan?

Aan het menu moet af te leiden zijn op welke pagina de gebruiker zich momenteel bevindt.
Maak hiervoor gebruik van if statements en de $_SERVER superglobal van PHP om dit dynamisch te krijgen.

2
Midden op de webpagina moet een rubriek "Enkele producten" komen. En dit is de instructie waarbij ik graag wat hulp krijg:
Het kopje “Enkele producten” laat standaard 4 producten zien.
Maak gebruik van de $_GET parameter om ervoor te zorgen dat gebruikers in de adresbalk zelf kunnen opgeven hoeveel producten ze willen zien, bijv. met “?products=8”.
De website moet uiteraard correct meegroeien als hij groter wordt.

Ik hoop dat er iemand is die mij op weg kan helpen.
Voor vraag 1 heb ik dit bedacht :

echo '<ul>';
foreach ($menu as $key => $value) {
	$bold_b = '';
	$bold_e = '';
	if ( $value['href'] == basename($_SERVER[REQUEST_URI]) ) {
		$bold_b = '<b>';
		$bold_e = '</b>';
	}
	echo '<li>' . $bold_b . '<a href="' . $value['href'] . '" target="' . $value['target'] . '">' . $value['content'] . '</a>' . $bold_e . '</li>';
}
echo '</ul>';


[size=xsmall]Toevoeging op 14/10/2017 19:55:54:[/size]

Hier een voorbeeld uit een PHP les over $_GET :

http://html.net/tutorials/php/lesson10.php

http://html.net/tutorials/php/lesson10_ex2.php?name=Joe&age=33
Merci Adoptive Solution voor uw reactie.
Ik zie dat u mijn foreach loop hebt aangepast. Ik ben nog maar debutant, maar ik probeer te begrijpen wat er nu staat.

$_bold_b staat voor de begin-tag van dikgedrukt <b> en $_bold_e staat voor de sluit-tag </b>.
Als aan een bepaalde voorwaarde wordt voldaan wordt dat in de list-item ingevuld.

Maar wat is eigenlijk die voorwaarde: basename($_SERVER[REQUEST_URI]) ?
Waar verwijst 'basename' naar en is [REQUEST_URI] iets dat standaard bestaat?

Voor het probleem met $_GET zal ik de links eerst eens bekijken.

Mogelijke optimalisaties:
- haal alle HTML buiten PHP
- maak van basename($_SERVER['REQUEST_URI']) een aparte variabele die je buiten de loop initialiseert, je rekent nu telkens eenzelfde waarde uit
- introduceer een CSS-klasse "active" o.i.d. voor het actieve item, het uiterlijk kun je dan later nog aanpassen/verfijnen via een stylesheet in plaats van dat je code moet wijzigen

REQUEST_URI is overigens geen constante.

Je krijgt dan bijvoorbeeld het volgende:
<ul><?php
    $currentPage = basename($_SERVER['REQUEST_URI']);
    foreach ($menu as $key => $value) {
        $class = '';
        if ($currentpage == $value['href']) {
            $class = 'active';
        }
        ?><li class="<?php echo $class ?>"><a href="<?php echo $value['href'] ?>" target="<?php echo $value['target'] ?>"><?php echo $value['content'] ?></a></li><?php
    }
?></ul>
basename geeft de naam van de webpagina in the url. Dus

dierenvoedsel_3_historie.php == basename(http://www.domein.nl/subdirectory/dierenvoedsel_3_historie.php)

Als die vergelijking klopt is het de huidige pagina en wordt de href vet getoond.

Als je niet weet wat de inhoud van een variable is, doe je een echo :

<?php
echo $_SERVER[REQUEST_URI];
echo basename($_SERVER[REQUEST_URI]);
?>
Merci Adoptive Solution, merci Thomas,
Danzij de voorstellen van beiden heb ik het volgende kunnen formuleren:

<?php
echo '<ul>';		
foreach ($menu as $key => $value)
{
   $class = '';
   if ($value['href'] == basename($_SERVER['REQUEST_URI']))
   {
      $class = 'current';
   }
   echo '<li>
         <a class="'.$class.'"href="'.$value['href'].'"target="'.$value['target'].'">'.$value['content'].'</a>
         </li>';
}				
echo '</ul>';
?>



En in de CSS staat nu:

nav {	
	width:1134px;
	height: 45px;
	background-image: url("../images_2/menubalk_2.jpg");
}

nav ul {
	margin-left: 456px;
	padding: 7px;
	list-style-type: none;
	display: flex;
	flex-direction: row; 
}

nav li {
	height: 20px;
	line-height: 20px;
	margin: 5px 17.4px;
}

nav li a {	
	text-decoration: none;
	display: block;
	color: #ffffff;
	letter-spacing: 0.8px;
}

nav li a.current {
	color: yellow;
	font-style: italic;
}


Dit geeft het gewenste resultaat.


[size=xsmall]Toevoeging op 20/10/2017 19:53:58:[/size]

Van die opmaak-codes wist ik niet. Ik ben maar pas nieuw op dit forum. Sorry dat ik dat niet eerder heb begrepen en toegepast.
Uit nieuwsgierigheid: waarom eigenlijk dienen HTML-tags te worden vermeden?
En wat is 'bumpen'?

Reageren