[SQL/PHP] lancer une requête ds une fonction

Résolu/Fermé
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 31 mars 2008 à 18:26
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 - 31 mars 2008 à 20:02
Salut!

Mon problème est un peu compliqué, alors je vais essayer d'être aussi claire que possible:

Ce que je souhaite faire:

J'ai fait une fonction (tab_leaf($sosa)) qui me permet de:
1. Exécuter une requête sur une bdd, avec comme paramètre $sosa (la variable $sosa contient un chiffre)
Lors de la requête je cherche à sélectionner l'entrée qui a la valeur $sosa dans le champ 'sosa'. (Il n'y en a forcément qu'une seule)
2. Puis je récupère ensuite toutes les données de l'entrée qui a été trouvée (nom, prenom, date_n, lieu_n, date_d et lieu_d), et je les stocke dans un array $leaf.

J'ai fait une fonction car je voudrais lancer plusieurs fois la même requête avec différentes valeurs pour $sosa.
Je ne peux pas (ou du moins je pense que je ne peux pas) faire une boucle car les différentes valeurs de $sosa que je veux chercher ne se suivent pas...

Pourquoi je fais pas toutes les sélections dans la même requête? (avec WHERE ... OR ... OR ...) Parce que si à un moment une des valeurs de $sosa n'apparait pas dans la base de données, je veux lui attribuer une valeur "par défaut".

Puis, une fois la fonction exécutée un certain nombre de fois, j'affiche toutes les données du tableau $leaf avec un echo.


Là où le bât blesse:

Dans l'état actuel des choses, avec le script ci-dessous, rien ne s'affiche....
Je pense que ça vient du fait qu'une fois la fonction terminée, je n'arrive pas à récupérer les valeurs contenues dans le tableau $leaf. J'ai l'impression qu'après avoir fini la fonction, les valeurs stockées sont "oubliées"...
Ca doit être un problème de portée de variable, mais je ne sais pas comment récupérer les variables crées par la fonction pour m'en servir en dehors de celle-ci...

J'ai essayé return $leaf; à la fin de la fonction, et aussi d'attribuer la fonction à une variable au lieu de l'exécuter, mais ya rien à faire :(

Bref voilà mon code:

$counter = 1;

mysql_connect("localhost", "mon_site", "pass");
mysql_select_db("ma_bdd");

function tab_leaf($sosa) {
	$reponse = mysql_query("SELECT * FROM table WHERE sosa='$sosa'");
	$donnees = mysql_fetch_array($reponse);
	

//si la requête n'est pas vide je stocke les données dans le tableau $leaf. La 1ère requête attibura des valeurs à $leaf[1], la 2ème à $leaf[2], etc...

	if ($donnees) {
		$leaf[$counter][0] = $donnees['sosa'];
		$leaf[$counter][1] = $donnees['nom'];
		$leaf[$counter][2] = $donnees['prenom'];
		$leaf[$counter][3] = $donnees['date_n'];
		$leaf[$counter][4] = $donnees['lieu_n'];
		$leaf[$counter][5] = $donnees['date_d'];
		$leaf[$counter][6] = $donnees['lieu_d'];
	}


//si elle est vide j'attribue une valeur par défaut (merci sly bzh!)
	else {
		$leaf[$counter][0] = $sosa;
	}

//puis j'augmente le "compteur" de 1...
	$counter++;
}


//c'est ici que j'appelle la fonction, en attribuant tour à tour différentes valeurs à $sosa
tab_leaf($i);
tab_leaf($j);

echo $counter; // ça c'est pour voir si ma fonction marche... et visiblement ça fonctionne pas car $counter affiche toujours ...1!


//et ici j'affiche toutes les données contenues dans $leaf...

echo $leaf[1][0];
echo $leaf[1][1];
echo $leaf[1][2];
echo $leaf[1][3];
echo $leaf[1][4];
echo $leaf[1][5];
echo $leaf[1][6];
echo "<br /> <br />";
echo $leaf[2][0];
echo $leaf[2][1];
echo $leaf[2][2];
echo $leaf[2][3];
echo $leaf[2][4];
echo $leaf[2][5];
echo $leaf[2][6];



J'espère que je vous ai pas filé mal au crane!

Merci d'avance au courageux / courageuses ;)

3 réponses

chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 30
31 mars 2008 à 20:02
Bon, ben voilà, tout fonctionne!

Voilà le code, je ne me sers finalement que de return:


mysql_connect("localhost", "mon_site", "pass");
mysql_select_db("ma_bdd");

function tab_leaf($sosa, $counter) {
	$reponse = mysql_query("SELECT * FROM table WHERE sosa='$sosa'");
	$donnees = mysql_fetch_array($reponse);
	
	if ($donnees) {
		$leaf[$counter][0] = $donnees['sosa'];
		$leaf[$counter][1] = $donnees['nom'];
		$leaf[$counter][2] = $donnees['prenom'];
		$leaf[$counter][3] = $donnees['date_n'];
		$leaf[$counter][4] = $donnees['lieu_n'];
		$leaf[$counter][5] = $donnees['date_d'];
		$leaf[$counter][6] = $donnees['lieu_d'];
	}
	else {
		$leaf[$counter][0] = $sosa;
	}
	return $leaf[$counter];  //et voilà la phrase magique!
}

$leaf[1] = tab_leaf($i, 1);    //attribution de la fonction à un array, qui fait que les valeurs retournées ($leaf[$counter]) se trouvent stockées dans cet array
$leaf[2] = tab_leaf($j, 2);


// bon pour cette longue série de echo une petite boucle sera la bienvenue, mais c'est temporaire, juste pour voir si ma fonction marche...
echo $leaf[1][0];
echo $leaf[1][1];
echo $leaf[1][2];
echo $leaf[1][3];
echo $leaf[1][4];
echo $leaf[1][5];
echo $leaf[1][6];
echo "<br /> <br />";
echo $leaf[2][0];
echo $leaf[2][1];
echo $leaf[2][2];
echo $leaf[2][3];
echo $leaf[2][4];
echo $leaf[2][5];
echo $leaf[2][6];


Bon, c'est surement pas du beau code bien écrit mais au moins ca fonctionne! Et n'hésitez pas si vous avez des tournures plus élégantes, je prends!
2
Utilisateur anonyme
31 mars 2008 à 18:55
Bonsoir,


j'ai pas repris tout ton code mais regarde ce résumé

<?php

$b=1;
function test($a,$b) {
global $b;
$b=7;

}

$a=1;
$b=6;
test($a,$b);
echo $b;
?>

0
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 30
31 mars 2008 à 19:48
Merci Giheller! Je ne connaissais pas la fonction global qui sert faire passer la valeur d'une variable qui se trouve dans le corps principal du code à une fonction (je viens de le chercher...)

Mais bon moi ce qu'il me fallait c'est l'inverse : faire passer la valeur d'une variable qui se trouve dans la fonction au corps principal.

Bon mais finalement en me renseignant sur global j'ai trouvé des explications sur return et sur l'attribution d'une fonction à une variable et j'ai ENFIN compris! Ca faisait un moment que ça me posait problème ce return... (pour ceux que ça intéresse c'est ici plus les quelques pages qui suivent)

Bon c'est pas encore tiptop, mais avec une pincée de global et un chouia de return, je vais bientôt y arriver je pense.

Je reviens poster mon code dès qu'il est au point pour avoir des avis!
-1