Help Pb Mysql PHP

Marcos
Invité n'ayant pas de compte PHPfrance

11 mai 2005, 23:15

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

11 mai 2005, 23:52

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

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 03:48

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...!

Mammouth du PHP | 983 Messages

12 mai 2005, 11:33

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++ ) {} 

Mammouth du PHP | 983 Messages

12 mai 2005, 11:48

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?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 mai 2005, 12:39

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

ViPHP
pjl
ViPHP | 2119 Messages

12 mai 2005, 13:02

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 mai 2005, 13:08

c'est vrai ça, on avait pas percuté sur ta requête mais il a raison... :oops:

Invité
Invité n'ayant pas de compte PHPfrance

12 mai 2005, 19:44

oki c'est bien cool messieurs c'est exactement ce que je voulais merci de votre rapidité

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

12 mai 2005, 20:16

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

Invité
Invité n'ayant pas de compte PHPfrance

13 mai 2005, 19:52

C'est pas bête du tout ca je n'avais vu la chose de cette maniere là...!

Merci encore pour tout