Probleme sur l'affichage d'une requete.

Eléphanteau du PHP | 17 Messages

25 mars 2005, 15:48

Salut !
voila j'ai un probleme sur ce code la

[code] $requete = "SELECT nomD FROM dessin;";
$resultat = mysql_query ($requete);

for ($i =0 ; $i < mysql_num_rows($resultat) ; $i++) {
$tab = mysql_fetch_array($i, $resultat);
echo "$tab[$i]";
echo "<br>";
}[/code]

Le message d'erreur est le suivant :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/d/f/kermystik/index.php on line 22

et il me l'affiche 10 fois, normalement cette requete devrais renvoyé 10 reponse.

J'ai essayé de changer quelque truc sur la ligne d'erreur, j'ai testé ça :

[code]$tab = mysql_fetch_array($resultat, $i,);[/code]

mais la je comprends encore moin bien le message d'erreur :

Warning: mysql_fetch_array(): The result type should be either MYSQL_NUM, MYSQL_ASSOC or MYSQL_BOTH. in /var/www/free.fr/d/f/kermystik/index.php on line 22

Voila si quelqun peut m'aider ce serai cool parcque la je bloque ...

Eléphant du PHP | 334 Messages

25 mars 2005, 16:01

	$requete = "SELECT nomD FROM dessin;";
	$resultat = mysql_query ($requete);

	for ($i =0 ; $i < mysql_num_rows($resultat) ; $i++) {
		$tab = mysql_fetch_array($resultat);
		echo "$tab[$i]";
		echo "<br>";
	}
Essaye ça (j'ai modifié le mysql_fetch_array)

Eléphant du PHP | 334 Messages

25 mars 2005, 16:04

	$requete = "SELECT nomD FROM dessin;";
	$resultat = mysql_query ($requete);

	for ($i =0 ; $i < mysql_num_rows($resultat) ; $i++) {
		$tab = mysql_fetch_array($resultat);
		echo "$tab[$i]";
		echo "<br>";
	}
Essaye ça (j'ai modifié le mysql_fetch_array)
Le mieux serait encore
$requete = mysql_query("SELECT nomD FROM dessin") or die (mysql_error());
while($resultat = mysql_fetch_array($requete))
{
      echo $resultat['nomD']."<br />";
}

Mammouth du PHP | 19672 Messages

25 mars 2005, 16:04

Essaye comme ça:
<?php
$requete = "SELECT nomD FROM dessin;";
$resultat = mysql_query ($requete);
/* On crée le tableau UNE SEULE FOIS, donc AVANT la boucle for() */
$tab = mysql_fetch_array($i, $resultat);
/* On compte le nombre de lignes une seule fois également, pas dans la boucle: */
$nb_lignes = mysql_num_rows($resultat);
/* version 1 */
for ($i =0 ; $i < $nb_lignes ; $i++)
{
	echo "$tab[$i]";
	echo "<br>";
}
/* Ou bien,  on aurait pu faire autrement: */
$nb_lignes2 = count($tab);
/* version 2 */
for ($i =0 ; $i < $nb_lignes2 ; $i++)
{
	echo "$tab[$i]";
	echo "<br>";
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 17 Messages

25 mars 2005, 16:16

Merci ça marche, par contre j'ai du mal à saisir comment marche la boucle ?


[php]$requete = mysql_query("SELECT nomD FROM dessin") or die (mysql_error());
while($resultat = mysql_fetch_array($requete))
{
echo $resultat['nomD']."<br />";
} [/php]

en fait le fetch_array permet egalement de verifié si une ligne existe ?[/code]

Isa
Invité n'ayant pas de compte PHPfrance

02 mai 2005, 22:54

Bonjour,

Je reprends ce poste, parce que mon problème traite sensiblement de la même chose, à savoir : mysql_fetch_array
Je ne connais rien au php, le code suivant a été développé par qqn d'autre que je ne peux pas contacter actuellement, et ce code concerne la validation d'inscription à un site.

Code : Tout sélectionner

<?php include("infoServeur.php"); if (isset($_GET['id']) && isset($_GET['pass'])) { $id=$_GET['id']; $pass=$_GET['pass']; $identifiant = md5($id); $connection = mysql_connect($host, $user,$password); mysql_select_db("$dbname", $connection); $query = mysql_query("SELECT nom, prenom, email FROM attenteValidation WHERE identifiant='$id' and password='$pass'"); $tab = mysql_fetch_array($query, MYSQL_NUM); mysql_query("insert into identification(identifiant, password, nom, prenom, email) values('$identifiant', '$pass', '$tab[0]', '$tab[1]', '$tab[2]')"); mysql_query("delete from identification where identifiant='$id'"); } else { echo "Un probl&egrave;me est survenu lors de la g&eacute;n&eacute;ration du lien"; } ?>
Le message d'erreur que les visiteurs obtiennent lorsqu'ils cliquent sur le lien pour valider leur inscription est :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/4/9/monsite/inscription.php on line 12

La ligne 12 étant : $tab = mysql_fetch_array($query, MYSQL_NUM);

Je ne sais vraiment pas ce que je dois modifier, j'ai eu beau chercher un peu, tout a été vain. Si vous pouviez m'aider, vous me seriez d'un grand secours !! Merci d'avance !

Mammouth du PHP | 19672 Messages

02 mai 2005, 23:08

Ce qui me surprend un peu, c'est qu'il a essayé de mettre le résultat de mysql_fetch_array dans une variable alors qu'il est beaucoup plus courant de l'utiliser directement dans une boucle.

D'autant plus surprenant encore quand on voit le requête qui ne devrait pas retournerplus d'une ligne de résultat avec trois champs.

Peu importe, on va commencer par vérifier quelque chose: juste avant la ligne indiquée, tu vas insérer une petite ligne :
    $query = mysql_query("SELECT nom, prenom, email FROM attenteValidation WHERE identifiant='". $id ."' and password='". $pass ."'");
    echo("<p>". $query ."</p>\n");
    $tab = mysql_fetch_array($query, MYSQL_NUM);
On affiche la requête: copie-la directement et essaye de l'exécuter tout aussi directement via PhpMyAdmin : tu auras une réponse qui te dira si la requête est correcte (affichage normal des information) ou si'il y a une erreur.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Isa
Invité n'ayant pas de compte PHPfrance

02 mai 2005, 23:27

Tout d'abord merci beaucoup pour cette réponse rapide !! :)

Je suis un peu paumée au niveau de PhpMyAdmin, ça ne me dit rien.

Toujours est-il que j'ai inséré le morceau de code que tu m'as donné et j'ai mis en ligne directement. Le message d'erreur indique la même partie de code... :(

Mammouth du PHP | 19672 Messages

02 mai 2005, 23:29

Tu peux me décrire ton installation ? Tu ne connais pas PhpMyAdmin ? Ou tu ne sais pas t'en servir ?

Autre chose : tu as fait afficher la requête : est-ce qu'elle est complète ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

02 mai 2005, 23:45

Disons que j'ai EasyPhp, et peut être je me suis déjà servie de PhpMyAdmin, mais là, je vois pas comment le tester en local si c'est ce que tu voulais que je fasse. Et si ce n'est pas ça, je crois que de toute façon je ne sais pas m'en servir. :?

Pour la 2e question, je crois que tu vas t'arracher les cheveux avec moi... Je suis vraiment novice avec ce language, et j'ai peur de te faire perdre ton temps. Je me demande si je ne vais pas laisser ce problème en suspend jusqu'à ce que la personne en question soit accessible et disponible...
Parce que si je bute sur chaque question qui te permettrait de voir plus clair sur ce que je fais ou pas, on ne va pas s'en sortir.
Donc je te remercie, mais je crois que je suis pas assez calée pour te suivre... C'est pas si "simple" que je pensais (façon de parler).

Mammouth du PHP | 19672 Messages

02 mai 2005, 23:54

T'inquiètes pas, c'est pas si compliqué que ça.
Procède par étapes:

-1- faire afficher la requête avec le petit ajout que je t'ai mis : normalement, quand tu vas cliquer sur le bouton de validation du formulaire, tu auras peut-être encore le message d'erreur, mais juste avant tu devrais voir un truc genre SELECT nom, prenom, email etc... : copie le directement sur l'écran colle ça dans un bloc note.

-2- PhpMyAdmin : en bas à droite de ton écran, tu as une icône de EasyPHP : fais un clic droit dessus et tu dois avoir un lien indiqué PhpMyAdmin. Ouvre le et tu vas arriver dans une interface de gestion de MySQL. À gauche, sélectionne ta base de donnée (celle avec laquelle tu travailles). Tu va voir apparaître une liste de tables en dessous et à droite la struture de la base

-3- Dans la partie de droite, tout en haut, tu as un bouton ou un lien marqué "SQL" : cliques dessus: ça va t'ouvrir une fenêtre avec une zone de saisie : récupères la requête de ton bloc-note et colle là dedans puis cliques sur le bouton [Exécuter]

-4- Reviens ici avec le résultat :)

C'est pas dur, c'est juste qu'il faut y aller pas à pas.

Sur ce, je vais me coucher :sleeping:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

03 mai 2005, 00:27

rhalala c'est sympa d'être aussi patient !

1. en fait quand on clique sur le bouton de validation, un mail est envoyé à la personne qui vient de s'inscrire, donc là ya pas d'erreur. Dans ce mail il y a un lien qui valide l'inscription et c'est lorsque l'on clique sur ce lien qu'apparait l'erreur, mais toujours telle que je l'ai recopiée, et je n'ai pas le truc "SELECT nom, prenom etc."

2.-3. ok, je vois ce que c'est maintenant !! merci.
par contre j'étais en train d'écrire un truc, quand je me suis rendu compte que je ne sais pas "faire afficher la requête". Donc je suis coincée...

Bon ben moi aussi je vais me coucher.... Merci encore.

Invité
Invité n'ayant pas de compte PHPfrance

08 mai 2005, 16:13

Me revoilà avec quelques jours d'absence... Mais j'ai la solution de mon problème. En fait il y avait une erreur toute bête.

Il se trouve que le code est correct et fonctionne, à condition d'enlever la majuscule de attenteValidation, qu'il faut donc écrire attentevalidation. Erreur qui se trouvait en fait sur la ligne précédant le mysql_fetch_array.

Voilà, je suis revenue pour donner la solution car il me semble que c'est le principe du forum.

A bientôt
et merci encore

Mammouth du PHP | 19672 Messages

08 mai 2005, 16:19

Effectivement, c'est une erreur toute bête sur laquelle on peut suer pendant pas mal de temps. C'est pour ça que je trouve phpMyAdmin pratique parceque si j'essaye la requête directe dedans, j'ai un retour relativement explicite et dans ce cas précis, la réponse aurait été que la table attenteValidation n'existait pas.

Bon code :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: