Page 1 sur 1

Afficher 3 premières lignes Array

Posté : 28 nov. 2013, 11:53
par Emma_
Bonjour,

j'ai crée une fonction me permettant de récupérer les données nécessaires afin de pouvoir créer un menu par la suite:
<?php
function page($idRubr){
	$db = Base::getConnection();
	$query = $db->query("SELECT * FROM rubrique");

	$menu = array();

	while ($rubrique=$query->fetch(PDO::FETCH_OBJ)){
		
		$menu[$rubrique->idRubrique] = array("nom" => $rubrique->nomRubrique);
	}
		$query = $db->prepare("SELECT * FROM contenu_rubrique WHERE idRubrique = :idRubr");
		$query->bindParam(':idRubr', $idRurb);
		$query->execute();
		$obj = $query->fetch(PDO::FETCH_OBJ);
		
	return array("menu" => $menu, "content" => $obj);
}
?>
Je cherche maintenant à faire en sorte d'afficher uniquement les 3 premières rubriques de mon menu (j'en possède 8 au total).
Je ne peux pas effectuer un LIMIT 0,3 dans la requête de ma fonction précédente car je souhaite réutiliser cette fonction plus tard afin d'afficher les rubriques restantes.

Je dois donc plutôt regarder du coté du foreach et le changer.

Pour le moment j'ai le code suivant:
<?php
	if(isset($_GET['id'])){ 
		$id = $_GET['id'];
	} else {
		$id = -1;
	}
	$page = page($id);
	$menu = $page['menu'];
	$content = $page['content'];
	
        foreach ($menu as $idRubrique=> $objet) {
					
		$nom = $objet['nom'];
		echo '<li>';
		echo '<a href="http://monsite.fr/rubrique/id/'.$idRubrique.'">';
		echo '<br>';
        }
?>
Quelqu'un voit-il comment faire ?

Merci

Re: Afficher 3 premières lignes Array

Posté : 28 nov. 2013, 14:56
par sirakawa
Il y a deux solutions au moins:
modifier la requete :
function z($limite="")
{
$limite = ($limite == "") , "": "LIMIT $limite";
$req= "select ..... $limit";
}
l'autre remplacer foreach par un for ou un while

Re: Afficher 3 premières lignes Array

Posté : 28 nov. 2013, 15:19
par Emma_
J'opterai pour la seconde option, du fait que j'ai besoin de réutiliser ma fonction plus tard pour afficher les rubriques restantes.

Mais étant donné que je début en php, je ne vois pas pour le moment comment transformer mon foreach ($menu as $idRubrique=> $objet) en un simple for.

Si je fais for ($i = 0; $i < n; $i++) { ... } comment est-ce qu'ensuite je peux introduire mon instruction $menu as $idRubrique=> $objet ?

Re: Afficher 3 premières lignes Array

Posté : 28 nov. 2013, 16:35
par sirakawa
tu fais
$ligne = $menu[$i];
tu vérifies s'il y a ce que tu penses par:
print "<br />";
print_r($ligne);
tu extrais par :
$element = $ligne['l'index qui t'intéresse'];
Si tu ne comprends pas, envoie le résultat d'un print_r(); ci-dessus

Re: Afficher 3 premières lignes Array

Posté : 01 déc. 2013, 13:21
par orenx22
Bonjour, admettons que ta requête sql retourne plusieurs résultats avec comme attribues : id, col1, col2.

exemple :

<?php
$dsn = "mysql:dbname=maBdd;host:127.0.0.1;port:3306" ;
$database = new PDO( $dsn, 'root', null );
$sql = "SELECT * FROM table WHERE col1 = ?" ;
$req = $database-> prepare( $sql );
$req-> execute( array( 'nomCol1' ) );
$result = $req-> fetchAll( PDO::FETCH_ASSOC );
?>
<div id="result">
<table>
<thead>
<tr>
<th>id</th>
<th>col1</th>
<th>col2</th>
</tr>
</thead>
<tbody>
<?php for( $i = 0 ; $i < 3 ; $i++ ): ?>
<tr>
<td><?php echo $result[$i]['id'] ?></td>
<td><?php echo $result[$i]['col1'] ?></td>
<td><?php echo $result[$i]['col2'] ?></td>
</tr>
<?php endfor; ?>
</tbody>
</table>
</div>
La boucle for permet de joueur avec le curseur $i. On l'incrémente de 1 pour chaque passage. C'est la seul inconnu du script, il n'est donc pas nécessaire d’exploiter un boucle foreach pour extraire les valeurs de chaque tuple (ligne) de ton résultat de ta requête sql.

Ciao