Probleme en php ! mysql_fetch_array

clam
Invité n'ayant pas de compte PHPfrance

29 avr. 2005, 09:19

Bonjour, j'ai un ptit souci et je ne sais pas d'ou ça vient. Je ne pense pas que ce soit la syntaxe mais bon. Voila mon code:
<?php

$bdd = mysql_connect("127.0.0.1","root","") or die ("Impossible de se connecter au serveur");
mysql_select_db("site",$bdd);


if(isset($_POST['pseudo']))
	$pseudo = $_POST['pseudo'];
else
{
	echo "Le champ pseudo n'a pas été saisi !";
	include('inscription.php');
	exit (1);
}

$sql = "SELECT * FROM membres WHERE pseudo = $pseudo";
$result = mysql_query($sql,$bdd);
$membre = mysql_fetch_array($result);
if(isset($membre['id']))
{
	echo "Ce pseudonyme est déjà utilisé ! Veuillez en choisir un autre...";
	include('inscription.php');
	exit(1);	
}

....
J'obtiens l'erreur suivante:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\site team\inscription.confirm.php on line 18

Si vous pouviez m'aider merci :)

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 avr. 2005, 09:31

Cette erreur veut dire que la requête n'est pas valide syntaxiquement parlant et que sql l'a refusée.
Ta raquête :
$sql = "SELECT * FROM membres WHERE pseudo = $pseudo";

Vérifie si le nom de la table membres est bien ortographié et que la tabla existe
Vérifie si le nom du champ pseudo est bien orthographié et qu'il existe dans la table membres
Vérifie le type du champ pseudo :
1. si le type est numérique le format existant est bon (pseudo = $pseudo)
2. si le type est varchar (chaine de caractères) tu doit écrire :
pseudo= '$pseudo' (remarque les quotes qui entourent la variable)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 139 Messages

29 avr. 2005, 09:32

tu as testé comme ça :
$sql = "SELECT * FROM membres WHERE pseudo = '$pseudo'";

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 avr. 2005, 09:35

Écritures recommandées :
$sql = "SELECT * FROM membres WHERE pseudo = '".$pseudo."'"; // si $pseudo est une chaine
$sql = "SELECT * FROM membres WHERE pseudo = ".$pseudo;      // si $pseudo est un numérique

BFH
Eléphant du PHP | 214 Messages

29 avr. 2005, 09:36

Perso moi je dirais :
$sql = "SELECT * FROM membres WHERE pseudo = \"$pseudo\" ";
Cherche un sujet nommé "debutant en peril" j'avais le même problème.
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Eléphant du PHP | 357 Messages

29 avr. 2005, 09:37

enfin il faut pas qu il le test le pb viens de la je pense :p

Mammouth du PHP | 19672 Messages

29 avr. 2005, 09:43

Perso moi je dirais :
$sql = "SELECT * FROM membres WHERE pseudo = "$pseudo" ";
Cherche un sujet nommé "debutant en peril" j'avais le même problème.
Tss tss , quel mélange des genres....
$sql = "SELECT * FROM membres WHERE pseudo = '". $pseudo ."'";
Voilà, on ne mélange pas n'importe comment des chaines de caractère, du SQL et du PHP : ici, $sql et $pseudo, c'est du PHP, ce qui est entre les " ", c'est du SQL. Les concaténation entre les deux peuvent avantageusement respecter une syntaxe qui est déjà définie
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 avr. 2005, 09:49

Merci de ton soutien, Cyrano !
Les variables PHP doivent être sorties du code SQL de la requête.
Ce n'est pas parce que certaines autres écritures peuvent fonctionner qu'elles sont à utiliser.
Prenez le réflexe de coder bien dès la première fois, ça vous économisera des heures de débuggage...

Hé les mômes, vous allez écouter de temps en temps ce que vous disent les anciens ? :evil:

clam
Invité n'ayant pas de compte PHPfrance

29 avr. 2005, 09:56

Merci de vos réponse.
En fait g résolu le bp juste après avoir poster, donc dsl pour le post qui sert a rien.
Perso g mi:

$sql = "SELECT * FROM `membres` WHERE `pseudo` = '$pseudo'";

et sa marche nikel :)

BFH
Eléphant du PHP | 214 Messages

29 avr. 2005, 09:59

albat prends exemple sur cyrano reste calme avec les nouveaux ! sinon =;
Perdu dans la matrice avec un guide michelin ](*,) #-o
Adorateur de Cyrano
Parti puis revenu...

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 avr. 2005, 10:21

Content que cela fonctionne, Clam.
Le problème venait donc de l'absence d'apostrophes qui doivent entourer
la valeur de $pseudo puisque ce champ est de type chaîne de caractères.

Ton écriture ci-dessous fonctionne bien, mais elle n'est pas académique.
$sql = "SELECT * FROM `membres` WHERE `pseudo` = '$pseudo'"; 
Je te redonne donc la bonne écriture à utiliser :
$sql = "SELECT * FROM membres WHERE pseudo = '".$pseudo."'";
Explications :
- sortir les variables PHP de la requête SQL
- les apostrophes autour des noms de tables et de champs sont ajoutés
automatiquement par MySQL dans un but de prévention.
Ils ne sont utiles qu'au cas où ces noms seraient des mots réservés ou contiendraient des espaces.
Mais personne ici ne fait d'erreur aussi grossière, donc pas besoin de ces apostrophes-là ! ;)

clam
Invité n'ayant pas de compte PHPfrance

29 avr. 2005, 10:23

Ok merci pour toutes ces infos

Bonne journée à tous