Utilisateurs connectés : mysql_num_rows(): supplied argument...
Résolu/Fermé
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
-
Modifié par nik029 le 11/06/2013 à 12:54
Utilisateur anonyme - 12 juin 2013 à 21:01
Utilisateur anonyme - 12 juin 2013 à 21:01
A voir également:
- Utilisateurs connectés : mysql_num_rows(): supplied argument...
- Voir les appareils connectés facebook - Guide
- Liste des appareils connectés - Guide
- Gestion des utilisateurs windows 10 - Guide
- Spotify appareils connectés - Guide
- Si plusieurs ordinateurs sont connectés à un réseau local via des prises murales, ils peuvent se connecter à une imprimante si elle est raccordée au réseau à l’aide d’un câble - Forum Matériel & Système
18 réponses
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
11 juin 2013 à 12:57
11 juin 2013 à 12:57
Salut,
tu dois avoir un problème avec cette requête :
$result = mysql_query('SELECT COUNT (*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' ', $link);
tu peux rajouter : OR die(mysql_error()); pour avoir l'éventuelle erreur mysql, mais je pense que tu devrais construire ta requête avant de l'exécuter, tu pourrais l'afficher, et comprendre rapidement d'où peut venir l'erreur.
tu dois avoir un problème avec cette requête :
$result = mysql_query('SELECT COUNT (*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' ', $link);
tu peux rajouter : OR die(mysql_error()); pour avoir l'éventuelle erreur mysql, mais je pense que tu devrais construire ta requête avant de l'exécuter, tu pourrais l'afficher, et comprendre rapidement d'où peut venir l'erreur.
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
11 juin 2013 à 17:20
11 juin 2013 à 17:20
Oui, cela vient du
AS nbre_entrees
j'ai l'impression.
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
12 juin 2013 à 08:25
12 juin 2013 à 08:25
le mieux c'est d'en être sûr.
fais ça :
tu peux même mettre un die(); après ton echo pour éviter de subir une redirection ou autre.
Ta requête va être affichée, peut être que l'erreur va te sauter aux yeux à ce moment là.
Sinon, exécute cette requette dans phpmyadmin, ou regarde ce qu'il te dit dans le die(mysql_error())
fais ça :
echo $req = 'SELECT COUNT (*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' '; $result = mysql_query($req, $link);
tu peux même mettre un die(); après ton echo pour éviter de subir une redirection ou autre.
Ta requête va être affichée, peut être que l'erreur va te sauter aux yeux à ce moment là.
Sinon, exécute cette requette dans phpmyadmin, ou regarde ce qu'il te dit dans le die(mysql_error())
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
Modifié par baladur13 le 12/06/2013 à 16:20
Modifié par baladur13 le 12/06/2013 à 16:20
Voilà ce qui s'affiche :
Sachant que la ligne 51 est :
Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
SELECT COUNT (*) AS nbre_entrees FROM connectes WHERE ip='IP EST ICI' PHP Error Message Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a3506773/public_html/m/accueil.php on line 51
Sachant que la ligne 51 est :
$link = mysql_connect('xxxxxxxxxxxx'); mysql_select_db("a3506773_bdd", $link); echo $req = 'SELECT COUNT (*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' '; $result = mysql_query($req, $link); $donnees = mysql_num_rows($result);
Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
12 juin 2013 à 13:52
12 juin 2013 à 13:52
et tu as exécuté ta requête dans phpmyadmin ou fait ça :
$result = mysql_query($req, $link) or die(mysql_error());
pour avoir une idée de l'erreur ?
D'autre part, faire un mysql_num_rows sur un count(*) n'a pas de sens, le résultat d'un num_rows là dessus sera toujours 1 étant donné que le but du count(*) est de donner le nombre de ligne.
$result = mysql_query($req, $link) or die(mysql_error());
pour avoir une idée de l'erreur ?
D'autre part, faire un mysql_num_rows sur un count(*) n'a pas de sens, le résultat d'un num_rows là dessus sera toujours 1 étant donné que le but du count(*) est de donner le nombre de ligne.
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 14:02
12 juin 2013 à 14:02
Donc je fais seulement SELECT * ?
Et où et comment je dois exécuter ma requête dans Phpmyadmin ?
Et où et comment je dois exécuter ma requête dans Phpmyadmin ?
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
12 juin 2013 à 14:21
12 juin 2013 à 14:21
dans phpmyadmin, une fois rentré dans n'importe quelle table, tu as un onblet SQL, tu mets ta requête là et tu observes le résultat.
tu peux garder ton count, mais après il faut faire un mysql_result($result, 0);
tu peux garder ton count, mais après il faut faire un mysql_result($result, 0);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
12 juin 2013 à 15:48
12 juin 2013 à 15:48
Bonjour
Es-tu sûr que ta base de données a été créée ? Arrives-tu à te connecter avec phpmyadmin ?
Es-tu sûr que ta base de données a été créée ? Arrives-tu à te connecter avec phpmyadmin ?
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 16:10
12 juin 2013 à 16:10
Oui, ma base de donnée a bien été crée et j'arrive à me connecter à phpmyadmin.
Voici le résultat de ma requête :
Donc normalement, dans mon code, si la ligne n'existe pas, alors une ligne avec toutes les informations doit être créer.
Voici le résultat de ma requête :
MySQL said: Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) AS nbre_entrees FROM connectes WHERE ip='ADRESSE IP ICI' LIMIT 0, 30' at line 1
Donc normalement, dans mon code, si la ligne n'existe pas, alors une ligne avec toutes les informations doit être créer.
if ($donnees['nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter. { mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')'); } else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp. { mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); }
Utilisateur anonyme
12 juin 2013 à 16:18
12 juin 2013 à 16:18
Tu as une espace en trop entre COUNT et (*)
Les fonction mysql NE DOIVENT PAS être séparées da la parenthèse ouvrante par une espace.
Les fonction mysql NE DOIVENT PAS être séparées da la parenthèse ouvrante par une espace.
Remarque : je t'avais demandé si ta base avait été créée parce que je m'étais connecté à ton compte avec les identifiants que tu avais eu l'imprudence de mettre en clair. Je m'étais bien connecté, mais ça m'avait affiché qu'il n'y avait aucune base de données. Il faut croire qu'il y avait autre chose.
J'ai demandé à la modération de masquer tes identifiants, mais fais attention une autre fois.
J'ai demandé à la modération de masquer tes identifiants, mais fais attention une autre fois.
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
Modifié par nik029 le 12/06/2013 à 16:36
Modifié par nik029 le 12/06/2013 à 16:36
Ah oui, effectivement j'ai oublié de les enlever. D'habitude je fais gaffe ;) Merci :)
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 16:37
12 juin 2013 à 16:37
Effectivement, le message d'erreur disparait. Problème, vu que l'IP ne se trouve pas dans la table, une entrée devrait ce créer pour que mon IP s'y trouve.
Or, l'insertion ne s'effectue pas. Quelqu'un sait pourquoi ?
Or, l'insertion ne s'effectue pas. Quelqu'un sait pourquoi ?
if ($donnees['nbre_entrees'] == 0) // Ce qui est le cas { mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')'); } else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp. { mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); }
Utilisateur anonyme
Modifié par le père. le 12/06/2013 à 16:45
Modifié par le père. le 12/06/2013 à 16:45
Ta requête est SELECT COUNT(*)
Cette requête a toujours UNE ligne de réponse. La réponse est peut-être 0,1, 10 ou 10000 mais il y a une ligne et une seule
Ce qu'il faut tester, ce n'est pas le nombre de lignes de la réponse (qui sera toujours 1) mais le contenu de cette réponse.
Cette requête a toujours UNE ligne de réponse. La réponse est peut-être 0,1, 10 ou 10000 mais il y a une ligne et une seule
Ce qu'il faut tester, ce n'est pas le nombre de lignes de la réponse (qui sera toujours 1) mais le contenu de cette réponse.
$donnees=mysql_fetch_array($result); if ($donnees['nbre_entrees'] == 0)...
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 17:03
12 juin 2013 à 17:03
J'ai modifié deux/trois trucs, mon code est donc celui-ci :
Le echo $donnnees donne 0, or l'insertion ne se fait pas...
echo $req = 'SELECT * FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' '; $result = mysql_query($req, $link); $donnees=mysql_num_rows($result); echo $donnees; if ($donnees == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter. { mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')'); } else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp. { mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); }
Le echo $donnnees donne 0, or l'insertion ne se fait pas...
Utilisateur anonyme
Modifié par le père. le 12/06/2013 à 17:18
Modifié par le père. le 12/06/2013 à 17:18
Ce n'est pas une bonne idée d'avoir remplacé le SELECT COUNT(*) par SELECT * et le mysql_fetch_array par un mysql_num_rows.
En effet, tu obliges mysql à aller chercher toutes les données de ta table, ce qui est laborieux, alors que tu as juste besoin du nombre de lignes, ce qui est instantané.
Mais, bon, ça marche quand même.
Par contre, ton insert ne marche pas. Ta table a 6 champs, mais tu ne donnes que 2 valeurs dans ton INSERT. Comment il fait pour deviner quelle valeur va dans quel champ ?
Il faudrait d'ailleurs compléter les autres champs, surtout que tu leur a donné des attributs NOT NULL
En effet, tu obliges mysql à aller chercher toutes les données de ta table, ce qui est laborieux, alors que tu as juste besoin du nombre de lignes, ce qui est instantané.
Mais, bon, ça marche quand même.
Par contre, ton insert ne marche pas. Ta table a 6 champs, mais tu ne donnes que 2 valeurs dans ton INSERT. Comment il fait pour deviner quelle valeur va dans quel champ ?
'INSERT INTO connectes (id_user,timestamp) VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')'
Il faudrait d'ailleurs compléter les autres champs, surtout que tu leur a donné des attributs NOT NULL
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
Modifié par nik029 le 12/06/2013 à 17:27
Modifié par nik029 le 12/06/2013 à 17:27
Alors j'ai modifié comme cela :
problème, mon $donnees affiché 1 hors ma table connectes est vide...
De plus, j'ai modifié et remis comme avant (avec un SELECT COUNT(*) et un mysql_fetch_array hors l'erreur réapparait : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource)
Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
if ($donnees == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter. { echo " il faut creer !"; mysql_query('INSERT INTO connectes (id_user, username_user, nbre_entrees, ip, timestamp) VALUES("'.$_SESSION['id'].'", "'.$_SESSION['username'].'", "1", "\'' . $_SERVER['REMOTE_ADDR'] . '\'", "' . time() . '")'); } else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp. { echo " existe deja"; mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); }
problème, mon $donnees affiché 1 hors ma table connectes est vide...
De plus, j'ai modifié et remis comme avant (avec un SELECT COUNT(*) et un mysql_fetch_array hors l'erreur réapparait : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource)
Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
Utilisateur anonyme
Modifié par le père. le 12/06/2013 à 17:26
Modifié par le père. le 12/06/2013 à 17:26
Ton $donnees affiche 1 alors qu'il affichait 0 avant ? C'est que tu as 'bricolé' le code qui précède. Car avec le code que tu montres, on ne peut rien dire, $donnees est déjà déterminé.
Tu as sans doute mis SELECT COUNT(*) puis compté les lignes avec mysql_num_rows
Tu as sans doute mis SELECT COUNT(*) puis compté les lignes avec mysql_num_rows
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 17:28
12 juin 2013 à 17:28
Voici mon code a l'état actuel :
Et voici ce qu'affiche ma page :
$link = mysql_connect('xxxxxxxxxxxxxxxxxxxxxx'); mysql_select_db("xxxxxxxxxxxx", $link); echo $req = 'SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE username='.$_SESSION['username'].' AND ip=\'' . $_SERVER['REMOTE_ADDR'] . '\' '; $result = mysql_query($req, $link); $donnees=mysql_fetch_array($result); echo $donnees; if ($donnees == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter. { echo " il faut creer !"; mysql_query('INSERT INTO connectes (id_user, username_user, nbre_entrees, ip, timestamp) VALUES("'.$_SESSION['id'].'", "'.$_SESSION['username'].'", "1", "\'' . $_SERVER['REMOTE_ADDR'] . '\'", "' . time() . '")'); } else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp. { echo " existe deja"; mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\''); }
Et voici ce qu'affiche ma page :
SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE username=admin AND ip='AFFICHE ICI IP' PHP Error Message Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/a3506773/public_html/m/accueil.php on line 53 Free Web Hosting il faut creer ! Il y a actuellement 0 visiteur connecté sur le site !
Utilisateur anonyme
12 juin 2013 à 17:41
12 juin 2013 à 17:41
$donnees=mysql_fetch_array($result);
echo $donnees;
if ($donnees == 0)
Le nombre d'entrées est dans $donnees['nbre_entrees'], pas simplement dans $donnees ! Il faudrait vraiment que tu revoies le B A BA de mysql !
Quant à ton message d'erreur, on ne sait pas à quelle ligne il se rapporte (53, ça ne me dit rien) et, au risque de me répéter, tu n'as pas besoin qu'on te redise à chaque fois d'ajouter or die (mysql_error()) à l'exécution de chaque requête pour avoir un message d'erreur parlant.
echo $donnees;
if ($donnees == 0)
Le nombre d'entrées est dans $donnees['nbre_entrees'], pas simplement dans $donnees ! Il faudrait vraiment que tu revoies le B A BA de mysql !
Quant à ton message d'erreur, on ne sait pas à quelle ligne il se rapporte (53, ça ne me dit rien) et, au risque de me répéter, tu n'as pas besoin qu'on te redise à chaque fois d'ajouter or die (mysql_error()) à l'exécution de chaque requête pour avoir un message d'erreur parlant.
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 17:43
12 juin 2013 à 17:43
Je ne suis pas vraiment très bon en PHP.
La ligne 53 correspond à
La ligne 53 correspond à
$donnees=mysql_fetch_array($result);
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 17:54
12 juin 2013 à 17:54
Maintenant, j'ai modifié le code. Le message d'erreur a disparu. problème, l'insertion ne fonctionne pas..
Voici mon code :
Et voici ce qui s'affiche sur ma page : 0 il faut creer ! / c'est creer
Voici mon code :
echo $donnees['nbre_entrees']; if ($donnees['nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter. { echo " il faut creer !"; mysql_query('INSERT INTO connectes (id_user, username, nbre_entrees, ip, timestamp) VALUES("'.$_SESSION['id'].'", "'.$_SESSION['username'].'", "1", "\'' . $_SERVER['REMOTE_ADDR'] . '\'", "' . time() . '")') or die (mysql_error()); echo " / c'est creer"; }
Et voici ce qui s'affiche sur ma page : 0 il faut creer ! / c'est creer
nar6du14
Messages postés
459
Date d'inscription
dimanche 27 décembre 2009
Statut
Membre
Dernière intervention
7 décembre 2013
64
12 juin 2013 à 18:07
12 juin 2013 à 18:07
il n' y a pas un mysql_init() dans les parages?? histoire d'initialiser correctement mysql
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 19:13
12 juin 2013 à 19:13
Non...
nik029
Messages postés
281
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
13 avril 2022
44
12 juin 2013 à 20:17
12 juin 2013 à 20:17
Finalement, après avoir bidouillé le code plusieurs fois, j'ai réussi à avoir ce que je voulais. Je le met donc en ligne pour en faire profiter tout le monde :
<?php $link = mysql_connect('SERVEUR', 'NOM', 'MOT DE PASSE'); mysql_select_db("BASE DE DONNEE", $link); $req = 'SELECT * FROM connectes WHERE username="'.$_SESSION['username'].'" ' or die (mysql_error()); $result = mysql_query($req, $link) or die (mysql_error()); $donnees = mysql_num_rows($result); echo $donnees; echo " // "; if ($donnees == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter. { echo "il faut creer !"; $sql = 'INSERT INTO connectes VALUES ("", "'.$_SESSION['id'].'", "'.$_SESSION['username'].'", "1", "'. $_SERVER['REMOTE_ADDR'] . '", "' . time() . '")'; $requete = mysql_query($sql) or die(mysql_error()); } if ($donnees == 1) // L'IP ne se trouve pas dans la table, on va l'ajouter. { echo "existe deja"; $sql = "UPDATE connectes SET timestamp='".time()."' WHERE username='".$_SESSION['username']."' "; $requete = mysql_query($sql) or die(mysql_error()); } // ------- // ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes. // On stocke dans une variable le timestamp qu'il était il y a 5 minutes : $timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min); $sql = "DELETE FROM connectes WHERE timestamp<".$timestamp_5min." "; $select = "SELECT * FROM connectes WHERE timestamp<".$timestamp_5min." "; $query = mysql_query($select) or die(mysql_error()); // ------- // ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés. $retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes'); $donnees = mysql_fetch_array($retour); // Ouf ! On n'a plus qu'à afficher le nombre de connectés ! if($donnees['nbre_entrees'] > 1 ) { echo '<p>' . $donnees['nbre_entrees'] . ' utilisateurs connectés</p>'; } else { echo '<p>' . $donnees['nbre_entrees'] . ' utilisateurs connectés</p>'; } ?>