Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/03/2011, 21h04   #1
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Par défaut requete dans une fonction sql

bonjour

page fonction :
Code :
1
2
3
4
5
6
7
function RequeteRencontre($cat,$rankLocaux,$rankVisiteurs,$saison,$SelectionParEquipe,$Order)
{
	$sqlEffectue = "[...]";
	$reqEffectue = mysql_query($sqlEffectue) or die('Erreur SQL : <br />'.$sqlEffectue);
	global $reqEffectue;
 
}
page d'affichage :

Code :
1
2
3
4
RequeteRencontre($cat,$rankLocaux,$rankVisiteurs,$saison,$SelectionParEquipe,$Order);
 
	//Pas de résultat
	if (mysql_num_rows($reqEffectue) == 0) [...]
me renvoie
Citation:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
pourquoi?

Merci pour vos réponses ...
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 22h11   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 102
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 102
Points : 8 465
Points : 8 465
le global au le faire au début de la fonction, d'ailleurs de te déconseiller d'utiliser global, ainsi que de faire un or die comme ca en plein milieux d'une fonction, je tu veux voir les erreurs de mysql active le mysql.trace_mode, vérifie aussi des résultats la y'a rien
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 22h32   #3
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
oui, mais ça ne craint rien je suis en local

il faut mettre global au début de ma fonction alors?
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 22h36   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 102
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 102
Points : 8 465
Points : 8 465
Citation:
Envoyé par ledisciple Voir le message
oui, mais ça ne craint rien je suis en local

il faut mettre global au début de ma fonction alors?
c'est pas une question de craindre quelque chose, c'est une question de bonne pratique

sinon oui mais le global au debut
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 21h56   #5
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
je l'avais toujours vu à la fin, enfin c'est ce que je pensais

Merci
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 17h44   #6
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Par défaut prolongation

Je reviens vers vous car j'ai un autre soucis qui découle de mon premier post

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
page fonction :
 
function RequeteRencontre($cat,$rankLocaux,$rankVisiteurs,$saison,$SelectionParEquipe,$Order)
{
global $reqEffectue;
global $sqlEffectue;
	$sqlEffectue = "[...]";
	$reqEffectue = mysql_query($sqlEffectue) or die('Erreur SQL : <br />'.$sqlEffectue);
}
 
page php
 
while($data = mysql_fetch_array($reqEffectue)) 
{		{ 
echo $data[...]
}
 
$reqEffectue = mysql_query($sqlEffectue) or die('Erreur SQL : <br />'.$sqlEffectue);
 
while($data = mysql_fetch_array($reqEffectue)) 
{		{ 
echo $data[...] // d'autres data évidemment
}
 
//me renvoi Notice: Undefined variable: sqlEffectue pour le deuxième while
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 20h38   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 709
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 709
Points : 3 279
Points : 3 279
Salut

Il doit avoir une erreur à mon sens.

A savoir que mysql_query() renvoie soit une ressource, soit FALSE, voir même TRUE pour une requête de type insert, delete, update.
Donc normalement il est préférable de vérifier ça.

Si on prend l'exemple dans la doc Php, il y a ceci :
Code :
1
2
3
4
5
 
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
    die('Requête invalide : ' . mysql_error());
}
En somme, il vaut mieux éviter de lancer une boucle sans même savoir si en amont ça c'est bien passé ou pas.


Question comme ça. Tu fais 2 boucles qui ont l'air d'exploiter la même ressource, du coup, est ce la même requête ou pas ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 21h01   #8
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Citation:
Envoyé par RunCodePhp Voir le message
Question comme ça. Tu fais 2 boucles qui ont l'air d'exploiter la même ressource, du coup, est ce la même requête ou pas ?
Pour être précis, je fais tourner un première fois ma requête pour récupérer une parties des données, les transformer et les afficher ( la sommes de chiffres de plusieurs tables)

cette partie ce passe très bien

Le problème c'est que je n'arrive pas à à refaire tournée ma requête une deuxième fois pour récupérer l'autre partie des données.
//me renvoi
Citation:
Notice: Undefined variable: sqlEffectue pour le deuxième while
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 20h32   #9
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 709
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 709
Points : 3 279
Points : 3 279
Citation:
Le problème c'est que je n'arrive pas à à refaire tournée ma requête une deuxième fois pour récupérer l'autre partie des données.
Pourquoi donc parcourir 2 fois les mêmes données, car théoriquement ce sont les mêmes.
Ca ne sert à rien de solliciter la Bdd comme, il y a plus simple, et plus rapide théoriquement.

Effectue la boucle 1 fois, et fais ce qu'il y a à faire d'une traite.
Code :
1
2
3
4
5
6
 
while($data = mysql_fetch_array($reqEffectue)) {
    // On effectue les traitements de la 1ère partie
 
    // On effectue ceux de la 2ème
}
Si ceci te parais pas simple, alors une autre façon consiste de stocker toutes les données dans un 1er temps dans un tableau :
Code :
1
2
3
4
 
while($data = mysql_fetch_array($reqEffectue)) {
    $donnees[] = $data; 
}
Ensuite, on pourra exploiter le tableau $donnees autant de fois qu'il est nécessaire.
Code :
1
2
3
4
 
foreach (donnees as valeur) {
    echo $valeur['nom_du_champ'];
}
A savoir aussi qu'il est possible de faire certaines manips du coté de la requête, comme faire un calcul, fusionner/concaténer des valeurs de champs, formatage de date, etc, etc ...
Ca peu éviter des traitements en Php.



A coté de ça, si l'erreur Php dit que la ressource $reqEffectue n'est plus valide, c'est qu'entre la fin de la 1ère boucle et le début de la 2ème il doit avoir une erreur qui par exemple la détruirait.
Il n'y aurait pas un mysql_close() ou mysql_free_result() par hasard ?
Les fonctions mysql_* je ne les utilisent plus depuis longtemps, je ne sais plus trop, mais je doute qu'au bout du 1er parcourt MySQL détruit la ressource, on doit pouvoir la ré-exploiter, ça me semble pas normal quand même.
Tu pourrais faire des echo $reqEffectue après la 1ère boucle, puis en rajouter à des points/lignes différentes pour savoir à quel moment cette ressource est perdue, du coup quel code provoquerait ça.
Bref, faire du débogage.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 17h43   #10
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
Au final, j'ai placé ma requête dans une page .inc.php. j'ai protégé l'accès à mes .inc par htaccess et par une fonction qui analyse l'adresse entrée avant d'afficher la page. Bon pour la fonction, c'est un basique ( je ne cache pas les secrets du monde)

C'est grave docteur?

Sinon, j'ai besoin de parcourir deux fois mon tableau, car j'ai besoin d'une analyse avant d'afficher les données.

Plus clairement, c'est pour afficher le nombre de victoires etc ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$victory = 0;
	$defeat =0;
	$draw = 0;
 
	while($data = mysql_fetch_array($reqEffectue)) 
		{ 
 
		////////////////////////////////////////////////////////////
 
		$definirResultats = array('num_locaux_rencontre','num_visiteurs_rencontre');
 
		foreach ($definirResultats as $defini)
		{
			if ($_SESSION['numequipecorrect'] == $data[$defini])
			{
				if ( ($data['but_local'] > $data['but_visiteur']) || ($data['tab_local'] > $data['tab_visiteur']) )
				{
					$victory++;
				}
				if ( ($data['but_local'] < $data['but_visiteur']) || ($data['tab_local'] < $data['tab_visiteur']) )
				{
					$defeat++;
				}
				if ( ($data['but_local'] == $data['but_visiteur']) &&  (empty($data['tab_local']) && empty($data['tab_visiteur'])) && (!is_null($data['but_local']) && !is_null($data['but_visiteur'])) )
				{
					$draw++;
				}
			}
		}
echo $victory [...]
c'est pour ça que j'aurai voulu faire une deuxième boucle avec
Code :
while($data = mysql_fetch_array($reqEffectue))
pour afficher le nom ,des équipes ...

du coup depuis que j'ai placé ma requête dans une page .inc mes deux boucles marchent impeccablement
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h10.


 
 
 
 
Partenaires

Hébergement Web