Mysql_num_rows()

Résolu
cs_christian33 Messages postés 40 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 7 avril 2008 - 6 avril 2008 à 23:05
cs_christian33 Messages postés 40 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 7 avril 2008 - 7 avril 2008 à 19:57
Bonjour

Mon site existe depuis 2ans et a toujours fonctioné sur les divers hebregement que j'ai eu
cette semaine je suis passés chez OVH et certaines parties du site BUG maintenant
Mon script est sensé verifié q'une requete n'existe pas deja dans la base sinon elle passe autre chose

$q2 = "SELECT * FROM gtest WHERE fid='$id' AND fdate=now()";
 $e2 = mysql_query($q2);
 if (mysql_num_rows($e2)= =0) {
$q = "INSERT INTO ...}
else {...}

Malheuresement A chaque fois que j'appelle la page, il fait un INSERT, pourtant
mysql_num_rows($e2) n'est pas egal a zero dans la BDD
avez vous une idée de ce probleme?
 a savoir que ce script fonctionné parfaitement  avec PHP4.3.9 et mysql 4.1.22
je suis maintenant passés avec OVH a mysql 5

Merci de votre aide

Christian

11 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 avril 2008 à 19:21
utilise DATE(fdate) = CURDATE()
3
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
6 avril 2008 à 23:26
Bonsoir,

d'ou vient la valeur de $id ? Si elle vient d'un formulaire ou de l'url alors peut être que tu ne la récupère pas de la bonne façon , a savoir via les super globales _GET et _POST.

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0
cs_christian33 Messages postés 40 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 7 avril 2008
6 avril 2008 à 23:39
Bonsoir,

lors de mon INSERT a la base de donnée ma valeur $ID est bien recupéré par MYSQL qui affiche la bonne valeur de $ID

j'utilise la fonction suivante pour recupéré la valuer $id

$id =$_POST['id'];

la date enregistré via  fdate=now() est la bonne aussi.

Merci de votre aide
0
yoman64 Messages postés 962 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 2 août 2010 2
6 avril 2008 à 23:59
Salut,

Au fait, je dis peut être des conneries (j'en doute) mais dans == les deux signes égaux  doivent être collés.

Mis à part ça, et si ta requête mysql s'execute comme il le faut, alors désolé mais je ne vois pas le problème .

-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_christian33 Messages postés 40 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 7 avril 2008
7 avril 2008 à 00:14
oui effectivement, les deux = = doivent etre collé mais j'ai mis un espace juste sur le forum pour que l'on voyent bien qu'il y'en a bien 2 .
la requete insert s'execute parfaitement dans la BDD

mais lorsque je refait la meme requete en rapellant la page, j'ai de nouveau un insert identique au premier qui s'enregistre dans la base alors que la requetes mysql_num_rows n'est plus  egal a zero .

 
fnum    |, , , , , , , , fip |   
fid
|  
fdate
|ftime |, |, , , , , , , , , , , , , , ----
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ----
, , , , , , , , , , , 1,   88.121.117.43, ,    4, , , , 2008-04-06, , , , 23:51:10, , , , , , , ----
, , , , , , , , , , , 2,   88.121.117.43, ,    4, , , , 2008-04-06, , , , 23:51:06, , , , , , , ----
, , , , , , , , ,
,
, 3,   88.121.117.43, , 4, , , , 2008-04-06, , , , 23:51:04

Voici un extrait de ma base
 fnum etant auto_increment
fip l'adresse IP
fid = $id soit 4
fdate= la date
ftime= l'heure
Comme vous pouvez le voir
j'ai a trois reprise dans cette extrait de ma base
WHERE fid='$id' AND fdate=now()
pourtant la fonction mysql_num_rows ne fonctionne pas
Merci de votre aide
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 avril 2008 à 01:10
Salut,

Si fid est un champ numérique, il ne faut pas l'entourer de guillemets.
Dans ton script, tu ne vérifies pas si ta requêtes est correctement exécutée. Tu te contentes de supposer que oui, et de compter le nombre de résultats.
Or, si ta requête ne passe pas, le nombre de résultats vaudra zéro.

if ($e2=mysql_query($q2)) {
if (mysql_num_rows($e2)= =0) {
$q = "INSERT INTO ...
}
else {
// Patati
}
}
else {
// Pour debug uniquement, c'est moche de laisser ça en production...
die('Erreur n°' . mysql_errno() . ' : ' . mysql_error());
}

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 avril 2008 à 01:12
J'ai pas corrigé le == , j'ai oublié...
M'enfin on voit bien, même sur le forum, quand y'a deux = côte à côte...

Neige

N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 avril 2008 à 02:54
Hello,

WHERE fid=$id AND fdate=now()
A moins que tu ne lances ce script plusieurs fois très très très vite...ça me parait normal que tu ne récupères jamais aucun enregistrement. Une date a cette propriété de changer tout le temps ;-)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 avril 2008 à 07:54
Et comme j'ai pas précisé cette nuit : SELECT NOW() renvoie la date courante jusqu'aux secondes.
0
cs_christian33 Messages postés 40 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 7 avril 2008
7 avril 2008 à 18:52
bonjour

merci pour votre aide, j'ai modifié quelque peu mon code afin de suivre vos conseils et j'ai fait cela

$ma = date("Y-m-d");
$q2 = "SELECT * FROM gtest WHERE fid=$id AND fdate=$ma" or die(mysql_error());
 $e2 = mysql_query($q2);
 if (mysql_num_rows($e2)==0) {
  $q = "INSERT INTO gtest ....

Bon ca ne fonctionne malheuresement pas
l'enregistrement dans ma base pour $ma= 0000-00-00

J'ai fait l'essai avec ton morceau de script [auteur/NEIGEDHIVER/924195.aspx neigedhiver]
mais cela ne me retourne aucune erreur

Afin de levé un doute et confirmé l'idée de  [auteur/MALALAM/58031.aspx malalam]
j'ai supprimé  AND fdate =now() de ma requete et desormais le script refonctionne parfaitement

Ce qui me chagrine aussi c'est pourquoi ma fonction
$ma = date("Y-m-d");
ne me retourne pas la date  ?
et me donne 0000-00-00

Comment faire pour remplacer => now()
qui pourtant fonctionner parfaitement sur mon ancien hébergement

Merci
0
cs_christian33 Messages postés 40 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 7 avril 2008
7 avril 2008 à 19:57
Merci .

ca fonctionne de nouveau parfaitement
0
Rejoignez-nous