Rechercher : dans
Par :

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

Dernière réponse le 31 mar 2008 à 20:02:59 chantaussel, le 31 mar 2008 à 18:26:02 
 Signaler ce message aux modérateurs

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 ;)
Quelques bases en javascript, débute en php/mySQL
J'essaie de mettre en ligne mon arbre généalogique.
Configuration: Windows XP
Firefox 2.0.0.13

Meilleures réponses pour « [SQL/PHP] lancer une requête ds une fonction » dans :
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
PHP - Mail et fonctions réseau VoirPHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est...

1

giheller, le 31 mar 2008 à 18:55:54

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;
?>

JL,  m'enfin c'est juste mon avis @+
se faire aider, n'est pas faire faire son travail

Répondre à giheller

2

chantaussel, le 31 mar 2008 à 19:48:00

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! Quelques bases en javascript, débute en php/mySQL
J'essaie de mettre en ligne mon arbre généalogique.

Répondre à chantaussel

3

 chantaussel, le 31 mar 2008 à 20:02:59
  • +2

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!
Quelques bases en javascript, débute en php/mySQL
J'essaie de mettre en ligne mon arbre généalogique.

Répondre à chantaussel