Page 1 sur 1

Help Pb Mysql PHP

Posté : 11 mai 2005, 23:15
par Marcos
Bonjour à tous,

Voici mon problème : j'ai une base de données formulaire qui est remplie de deux utilisateurs
et quand j'essaye via une requete sous PHP d'aquerir le nombre d'utilisateur j'ai un mauvais
résultat (voici ce que php me retourne : Resource id #3) alors que cette requete sous Mysql
fonctionne et me retourne la bonne valeur (c'est 2 la bonne valeur correspondant aux nombres
d'utilisateurs enregistrés).

Je suis completement perdu et de ce fait ma boucle for ne fonctionne pas comme voulu...

Voici mon code

<?
$serveur='localhost';//nom du serveur
$user='root';//votre nom utilisateur
$password='';//votre mot de passe
$base='formulaire';//nom de la base de donnée

$connexion = mysql_connect($serveur,$user,$password);
if (!$connexion) {
die('Non connecté : ' . mysql_error());
}
$db_selected = mysql_select_db($base,$connexion);
if (!$db_selected) {
die ('Impossible d\'utiliser la base : ' . mysql_error());
}

$Rowid = mysql_query("SELECT MAX(`ROWID`) FROM `inscription` ");
if(!$Rowid) die ('problem : ' . mysql_error());


$Date = date("d-m-Y");

//$Rowid=(int)$Rowid;
echo $Rowid;
?>

Merci d'avance

Posté : 11 mai 2005, 23:52
par ouckileou
parceque il faut que tu traites ta requête avec mysql_fetch_row() ou mysql_fetch_array() par exemple
 $resultat = mysql_query("SELECT MAX(`ROWID`) AS rowid FROM `inscription` ");
if(!$resultat) die ('problem : ' . mysql_error());

$tabResultat = mysq_fetch_arrayy($resultat );
echo $tabResultat['rowid']; 
quelquechose comme ça

le fait que tu ai :" Resource ID3" c'est normal, cette fonction renvoie ça
ensuite il faut que tu utilises une des fonctions que je t'ai donné (il y en a d'autres) pour traiter cette ressource

Posté : 12 mai 2005, 03:48
par Invité
ok je suis d'accord ta requete me renvoie le bon résultat mais alors quel est le problème lorsque j'utilise une boucle for implémentée de cette facon :

$resultat = mysql_query("SELECT MAX(`ROWID`) AS rowid FROM `inscription` ");
if(!$resultat) die ('problem : ' . mysql_error());

$tabResultat = mysql_fetch_array($resultat );
echo $tabResultat['rowid'];

for ($i=0 ; $i<=$tabResultat ;$i++ ) {}

la réponse est : 2
Fatal error: Maximum execution time of 30 seconds exceeded

Je pige pas pourquoi il n'arrive pas à l'executer...!

Posté : 12 mai 2005, 11:33
par rami
La condition de ton for est fausse. Tu vas de i=0 jusqu'a i< à ton tableau...

A ta place, je ferai:
for ($i=0 ; $i<=$tabResultat['rowid'] ;$i++ ) {} 

Posté : 12 mai 2005, 11:48
par rami
Il fait un Max(rowid) dans sa requete, donc il n'obtien qu'une seule ligne de résultat. PAs besoin de faire une boucle, nan?

Posté : 12 mai 2005, 12:39
par ouckileou
oui, si tu es sûr de n'avoir qu'un seul résultat (ce peut-être le cas avec un MAX(), un COUNT() par exemple) pas besoin de boucle

Posté : 12 mai 2005, 13:02
par pjl
Une question comme ca, quand tu veux connaître le nombre de membres d'une famille, tu prends leur numéro INSEE, tu gardes le plus grand et ca te donne le nombre de personnes composant cette famille ?

Posté : 12 mai 2005, 13:08
par ouckileou
c'est vrai ça, on avait pas percuté sur ta requête mais il a raison... :oops:

Posté : 12 mai 2005, 19:44
par Invité
oki c'est bien cool messieurs c'est exactement ce que je voulais merci de votre rapidité

Posté : 12 mai 2005, 20:16
par ouckileou
juste pour préciser ce que pjl voulait dire c'est que la requête SQL que tu utilises n'est pas judicieuse pour connaitre le nombre d'inscrits

tu fais un MAX(), tu récupères donc l'identifiant le plus élevé

cela marchera donc si tu as 5 utilisateurs, avec id = 1, 2, 3, 4 et 5
mais si tu supprimes les utilisateurs 1 et 2, ta requête te renverra toujours 5, pourtant tu n'auras plus que 3 utilisateurs dans ta table...

il te faut remplacer

Code : Tout sélectionner

SELECT MAX(`ROWID`) FROM `inscription`
par

Code : Tout sélectionner

SELECT COUNT(*) FROM `inscription`
COUNT() est fait comme son nom l'indique pour compter, ce que tu veux faire

Posté : 13 mai 2005, 19:52
par Invité
C'est pas bête du tout ca je n'avais vu la chose de cette maniere là...!

Merci encore pour tout