[Php] Mettre les resultas while en variable

Résolu/Fermé
Signaler
-
 Profil bloqué -
Bonjour tous le monde.

Je cherche a faire un truc peut être bourrin mais j'ai pas d'autre idée pour le faire;

J'ai des articles enregistrez dans des catégorie. chaque catégorie peut contenir une autre catégorie.

Admettons que j'ai la catégorie "Foie Gras" d'alias:"foiegras" qui contient d'autres catégories:"Foie Gras Entier" alias "foiegrasentier" et "Foie Gras Cru" alias "foiegrascru".
Les deux sous-catégories sont pour id_parent l'id de leur parent :p

Le but du script est d'afficher les articles de la catégorie Foie gras et des sous catégorie (il peut y avoir des sous-sous-sous-....-catégories, et la je ne sais pas encore comment faire)

J'applique donc une requête pour recherche dans la table catégorie l'id de la catégorie foie gras demander, puis une autre pour recherche les catégorie qui sont enfants de la catégorie Foie Gras et la, comme j'ai plusieurs données, j'utilise un while pour les sortir.
mais je dois les réutiliser pour la troisième requête qui vas cherche dans la table articles

mais comment appliquer les résultat d'un while dans l'écriture d'une requête?
j'ai essayer de l'installer dans la requête mais cela me donne une erreur j'ai essayer de mettre le while en valeur de variable mais la aussi, j'ai des erreurs.

Voila le code:
<?php
$cat=$_GET['alias_cat'];//recupere l'alias de la catégorie

$sql_cat_sec='SELECT id FROM categorie WHERE alias="'.$cat.'"';//vas cherhcez l'id de la categorie demander
$rep_cat_sec=mysql_query($sql_cat_sec);
$don_cat_sec=mysql_fetch_array($rep_cat_sec);

$sql_cat_sec2='SELECT alias FROM categorie WHERE id_parent="'.$don_cat_sec['id'].'"';//vas cherhcez les alias des categorie faisant partie de $cat grace a l'id de $cat et id_parent
$rep_cat_sec2=mysql_query($sql_cat_sec2);

//ATTENTION VOILA LES PROBLEMES:
//J'ai tester les possibilite ci dessous mais n'y arrive pas.
/*/--1--/*/$azert=while($don_cat_sec2=mysql_fetch_array($rep_cat_sec2)){' AND alias_cat="'.$don_cat_sec2['alias'].'"';};
		   $sql_acc='SELECT * FROM article WHERE alias_cat="'.$cat.'"'.$azert.' ORDER by ordre ASC'//mettre dans une variable le while afin d'enregistrez les resultats
/*/--2--/*/$sql_acc='SELECT * FROM article WHERE alias_cat="'.$cat.'"'while($don_cat_sec2=mysql_fetch_array($rep_cat_sec2)){' AND alias_cat="'.$don_cat_sec2['alias'].'"';}' ORDER by ordre ASC';//mettre dans la requete sql le while
/*/--3--/*/$sql_acc='SELECT * FROM article WHERE alias_cat="'.$cat.'"'.while($don_cat_sec2=mysql_fetch_array($rep_cat_sec2)){' AND alias_cat="'.$don_cat_sec2['alias'].'"';}.' ORDER by ordre ASC';//mettre dans la requete sql le while avec les '.' pour ajouter les infos.

/*/--mettre le 1, 2 ou 3 ici avec la requete qui vas cherhcez les articles qui font partie de $cat et de c'est enfants./*/
$rep_acc=mysql_query($sql_acc);
while($don_acc=mysql_fetch_array($rep_acc)){
	?>
    <div class="bloc">
    <?php
	echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><u>'.$don_acc['name'].'</u></b><br /><br />';
	if(empty($don_acc['creation']) && ($don_acc['author'])){}else{
	echo '&nbsp;&nbsp;&nbsp;Rédigé le '.$don_acc['creation'].' par <b>'.$don_acc['author'].'</b><br /><br />';}
	echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.nl2br($don_acc['intro']).'';
	if(empty($don_acc['texte'])){}else{echo '<br /><br /><i><a href="">Lire la suite ...</a></i>';}
	if(empty($don_acc['modif'])){}else{echo '<br /><br />&nbsp;&nbsp;&nbsp;<i>Modifié le '.$don_acc['modif'].'</i>';}
	?>
    </div>
    <?php
}
?>


Merci de tout coeur si vous trouvez comment faire ce *** de code :p car je farfouille partout et enregistrer le résultat d'un while je parviens pas a la faire.

Sinon, si vous savez comment faire de la récursivité afin de regardez s'il y a des enfants pour chaque sous-catégorie trouver et ainsi pouvoir descendre jusqu'au bout, je vous en serait très reconnaissant.

9 réponses

Messages postés
6118
Date d'inscription
jeudi 9 juillet 2009
Statut
Contributeur
Dernière intervention
20 mars 2017
1 673
Ce n'est pas le while qui te donne les alias, mais le mysql_fetch_array qui lui est une fonction PHP qui renvoie une donnée.
Tu n'as qu'à essayer de les mettre dans une liste du genre:

while($don_cat_sec2=mysql_fetch_array($rep_cat_sec2)
{
    $alias[]=$don_cat_sec2['alias'];
}

2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
6118
Date d'inscription
jeudi 9 juillet 2009
Statut
Contributeur
Dernière intervention
20 mars 2017
1 673
Bonjour,

while n'est pas une fonction PHP, c'est un mot clé comme if par exemple... while ne renvoie rien, tu ne peux donc pas faire:

$pc=while(...)

OK mais comment faire? car while mer redonne bien les alias que je veux réinjecter dans le sql

OK. comme ca, j'arrive a avoir les retour. seulement, comment avoir automatiquement les $alias[] dans le sql qui augmentent de chiffres afin de devenir $alias[0] puis $alias[1] jusqu'à ce qu'il n'y ait plus d'alias a mettre?
car la j' dois entre manuellement combien je vais avoir de catégorie.

P.S: bien sur, je continue de cherchez a cote. Je pose la question ca permet de ne pas perdre de temps mais c'est pas de la demande de boulot tout fait :p
Pour infos, je suis en train de faire mon cms donc je demande pas a ce que l'on me le fasse :p
Messages postés
6118
Date d'inscription
jeudi 9 juillet 2009
Statut
Contributeur
Dernière intervention
20 mars 2017
1 673
Comme ceci... (je prend une requête sql en exemple)

Imagines que tu as une liste de nom dans une liste $nom[], et que tu veux afficher le prénom, stocké dans une table "personne", de tous dans une page php, tu fais:

for($position=0;$position<sizeof($nom);$position++)
{
      $nom_courant=$nom[$position];
      $req="select prenom from personne where nom='".$nom_courant."'";
      $res=mysql_query($req) or die(mysql_error());
      $donnees=mysql_fetch_array($res);
      echo "prénom :".$donnees['prenom'];
}


En somme, tu met ta requête dans une boucle... tu peux très bien imbriqué plusieurs boucles ensembles, exemple, tu peux très bien faire:

for($position=0;$position<sizeof($nom);$position++)
{
      $nom_courant=$nom[$position];
      $req="select prenom from personne where nom='".$nom_courant."'";
      $res=mysql_query($req) or die(mysql_error());
      while($donnees=mysql_fetch_array($res))
      {
            ....
       }
}


Oui mais ce système augmente drastiquement le nombre de requête a effectué. si j'ai 100 articles a afficher, cela vas faire 100 requêtes.
C'est pour cela que je voulais avoir une requête qui se modifie automatiquement avec les données récolter.
déjà 3 requêtes pour afficher une suite d'articles, c'est pas très optimiser on doit pouvoir faire mieux, si j'en rajoute a mort, c'est le serveur qui vas m'éjecter.

c'est pas possible d'entrée en variable le résultat d'une recherche qui sort par un while ou un for?
car la j'ai plus qu'a modifier ma requête pour faire des ajout. le pb, c'est que le while ou le for ne vont pas dans la requête il faut donc que j'enregistre les données qu'il me donne afin de les réinjecter.

Donc comment faire?
Messages postés
6118
Date d'inscription
jeudi 9 juillet 2009
Statut
Contributeur
Dernière intervention
20 mars 2017
1 673
A tester:

Si tu as une liste $nom[]...

Alors, peut-être tu peux faire ceci:

$chaine="nom='";
while($pos<sizeof($nom))
{
nom_courant=$nom[$pos];
if($pos!=0)
$chaine=$chaine." AND nom=";
$chaine=$chaine.$nom_courant."'";
$pos++;
}

Tu devrais avoir une chaine qui ressemble à ça

"nom='patrick' AND nom='louis' AND nom='Marie'...."

Ensuite tu l'insère dans ta requête

req = "select prenom from personne where ".$chaine;

C'est un truc que je viens d'élaborer donc je n'ai aucune certitude que cela va fonctionner.

oki. Je vais tester j'ai aussi un truc que j'ai trouver ailleurs:
$req = mysql_query("SELECT nom FROM client;",$db);
 
while ($info = mysql_fetch_array($req))
{
    $varT .= $info[nom] .", " ;
}

a voir aussi

Bon, j'ai reussis avec le code
$varT='';
while($don_cat_sec2=mysql_fetch_array($rep_cat_sec2)){
$varT.=' OR alias_cat="'.$don_cat_sec2['alias'].'"'." ";
}
$sql_acc='SELECT * FROM article WHERE alias_cat="'.$cat.'"'.$varT.' ORDER by ordre ASC';

j'ai bien ce que je veux qui apparait en plus.

Merci de ton aide ( je vais aussi tester ton code afin de pouvoir passer de l'un a l'autre si nécessaire. mais il me semble que se sont les même.