Erreur SQL (Count)

Eléphant du PHP | 86 Messages

02 janv. 2006, 14:34

Bonjour, bonjour,
Tout d'abord bonne année à tous (ceux qui liront ce post et le reste du monde) et souhaitons plein de bonheur à ceux qui s'occupent gentiement de ce forums et de nos (gros??) problèmes :D

Bon ceci dit, moi j'ai un soucis :(

je voudrais que mes membres s'inscrivent à un rassemblement, je leur donne donc un formulaire et tout le tralala...
Ensuite, une fois le formulaire et le tralala effectué, il s'agit de vérifier s'il n'est pa déja inscrit, pour cela je lui affiche ou non le bouton "Valider".
Voici mon code :
	<?
$sql2 = "SELECT COUNT(id_joueur) AS nb_joueur FROM lao_lan_participe WHERE id_joueur = $_SESSION[id]";
$req2 = mysql_query($sql2) or die ("Erreur Selection".mysql_error());
while ($compte = mysql_fetch_array($req2)) {

	if(empty($_SESSION['pseudo'])){
	echo "Vous devez être connecté à un profil pour accéder à cette page";}
	elseif($compte[nb_joueur] > 0){
		echo "Vous êtes déja inscrit à ce rassemblement";}
	  	else {
		echo "<input type='submit' name='Submit' value='Valider' />";}
		
		?>
Donc théoriquement si mon id n'est pas déja dans la BDD il doit m'afficher mon bouton, or non il ne l'affiche pour personne :(

J'ai affiiché ma requête générée qui dans phpmyadmin me donne 0 donc je ne comprend pas d'ou cela vient ; de plus $compte[nb_joueur] me donne 1 :?

Quelqu'un comprend pourquoi (je suppose que c'est ca) mon while me transfome 0 en 1???

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 janv. 2006, 14:44

Simple précision:
l'id d'une session n'est pas le même pour un même visiteur dans le temps.
le serveur web attribut un id de session au hasard à un visiteur tant que son navigateur n'est pas initialisé et tant que la session n'a pas expiré.

Si tu enregistre les id de session pour identifier tes membres, ils risquent de ce voir attribuer d'autres id session différents dans le temps et par conséquant la requête d'identification ne marche pas car le nouveau id est inconnu dans la base de données.

Le mieu est se reposer sur un pseudo ou un critère unique personnel au membre.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 19672 Messages

02 janv. 2006, 14:46

Proposition de correction (à tester)
<?
if(empty($_SESSION['pseudo']))
{
    echo "Vous devez être connecté à un profil pour accéder à cette page";
}
else
{
    $sql2 = "SELECT COUNT(id_joueur) AS nb_joueur FROM lao_lan_participe WHERE id_joueur = ". $_SESSION['id'];
    $req2 = mysql_query($sql2) or die ("Erreur Selection".mysql_error());
    $compte = mysql_result($req2, 0);
    if($compte > 0)
    {
        echo "Vous êtes déja inscrit à ce rassemblement";
    }
    else
    {
        echo "<input type='submit' name='Submit' value='Valider' />";
    }
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 86 Messages

02 janv. 2006, 14:52

Simple précision:
l'id d'une session n'est pas le même pour un même visiteur dans le temps.
le serveur web attribut un id de session au hasard à un visiteur tant que son navigateur n'est pas initialisé et tant que la session n'a pas expiré.

Si tu enregistre les id de session pour identifier tes membres, ils risquent de ce voir attribuer d'autres id session différents dans le temps et par conséquant la requête d'identification ne marche pas car le nouveau id est inconnu dans la base de données.

Le mieu est se reposer sur un pseudo ou un critère unique personnel au membre.
Non c'est bon car dans ma page d'authtentification je met en $_SESSION l'id de l'utilisateur (id de la table membre) et non pas l'id de la session (aléatoire) :D

Eléphant du PHP | 86 Messages

02 janv. 2006, 14:56

Okay cela fonctionne, merci CYrano

Cependant j'aurais quelques questions d'ordre pratique pour comprendre ce que tu m'a proposé :D
$compte = mysql_result($req2, 0); 
Bon okay c'est joli ( :wink: ) mais je ne comprend pas le ", 0" ca signifie quoi??
Et sinon est ce que cela ne fonctionne qu'avec un seul champ projetté?? si par exemple je fait une projection de 3 champs : id_joueur, nom_joueur, age_joueur => Puis je faire $compte[id_joueur] ? Est ce donc un while différent??
MErci

Mammouth du PHP | 19672 Messages

02 janv. 2006, 15:02

le 0 correspond au premier résultat. Un petit tour dans la doc t'en apprendra largement plus que moi
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

02 janv. 2006, 15:16

Oui, tu peux utiliser mysql_fetch_assoc pour créer un tableau associatif qui contient les noms des champs comme indexes (ça marche aussi avec mysql_fetch_array)
if(empty($_SESSION['pseudo'])){ 
    echo "Vous devez être connecté à un profil pour accéder à cette page";
} 
else {
$sql2 = "SELECT COUNT(id_joueur) AS nb_joueur, id_joueur, nom_joueur, age_joueur  FROM lao_lan_participe WHERE id_joueur = $_SESSION[id]"; 
$req2 = mysql_query($sql2) or die ("Erreur Selection".mysql_error()); 
while ($compte = mysql_fetch_assoc($req2)) { 
    if($compte[nb_joueur] > 0){ 
        echo "$compte[nom_joueur], Vous êtes déja inscrit à ce rassemblement";
    } 
    else { 
        echo "<input type='submit' name='Submit' value='Valider' />";
    } 
  }
}      
 ?>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 86 Messages

02 janv. 2006, 19:18

okay merci beaucoup pour les précisions :D