[Php] Mettre les resultas while en variable

Résolu/Fermé
Profil bloqué - 15 mai 2010 à 12:09
 Profil bloqué - 15 mai 2010 à 18:20
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.
A voir également:

9 réponses

Neliel Messages postés 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
15 mai 2010 à 12:20
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
Neliel Messages postés 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
15 mai 2010 à 12:12
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(...)
1
Profil bloqué
15 mai 2010 à 12:15
OK mais comment faire? car while mer redonne bien les alias que je veux réinjecter dans le sql
0
Profil bloqué
15 mai 2010 à 12:30
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neliel Messages postés 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
15 mai 2010 à 12:40
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))
      {
            ....
       }
}

0
Profil bloqué
15 mai 2010 à 16:28
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?
0
Neliel Messages postés 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
15 mai 2010 à 17:58
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.
0
Profil bloqué
15 mai 2010 à 18:11
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
0
Profil bloqué
15 mai 2010 à 18:20
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.
0