J'ai installé EasyPHP sur mon PC et le script suivant fonctionne très
bien. Mais, sur le serveur Internet, il me donne un message d'erreur.
Ce que j'ai changé par rapport à mes essais précédents, quand
j'utilisais directement le serveur Internet, c'est l'énoncé IF avec
le $_GET. J'avais $cible = $_GET['vol']; alors que maintenant, je
vérifie si la variable existe, J'imprime la requête envoyée à la
base, donc en théorie, il n'y a pas d'erreur de syntaxe et l'argument
passe comme il faut.
Le message est: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line ***
Ce message indique une erreur au niveau de la requête SQL, la table est bien remplie? Il n'y a pas d'erreur dans la requête? Vérifiez bien cela! Le die(mysql_error()) devrait vous aider à comprendre l'erreur.
$nb_rep est vide.
Puisqu'il y a une erreur au niveau du $res ...
En local, j'ai EasyPHP 1.7, PHP 4.3.3 et mySQL 4.0.15. Sur Internet, j'ai PHP 4.2.2.
Et mysql?
Denis
HTH,
Amicalement, Sebastian
-- The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents. --Nathaniel Borenstein
Denis Beauregard wrote:
Bonjour,
Bonsoir,
include_once('connexion.php');
if (!array_key_exists('vol', $_GET))
Utilisez plutôt:
if (!isset ($_GET['vol']) )
{ $cible = 0; }
else
{ $cible = $_GET['vol']; };
$query = "select * from mvolume where vol ="".$cible.""";
echo "'".$query."'<P>";
$res = mysql_query($query) OR die(mysql_error());
$res = mysql_query($query) OR die ( mysql_error() );
Le message est:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in ***.php on line ***
Ce message indique une erreur au niveau de la requête SQL, la table est
bien remplie? Il n'y a pas d'erreur dans la requête? Vérifiez bien cela!
Le die(mysql_error()) devrait vous aider à comprendre l'erreur.
$nb_rep est vide.
Puisqu'il y a une erreur au niveau du $res ...
En local, j'ai EasyPHP 1.7, PHP 4.3.3 et mySQL 4.0.15.
Sur Internet, j'ai PHP 4.2.2.
Et mysql?
Denis
HTH,
Amicalement,
Sebastian
--
The most likely way for the world to be destroyed,
most experts agree, is by accident.
That's where we come in; we're computer professionals.
We cause accidents.
--Nathaniel Borenstein
Le message est: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line ***
Ce message indique une erreur au niveau de la requête SQL, la table est bien remplie? Il n'y a pas d'erreur dans la requête? Vérifiez bien cela! Le die(mysql_error()) devrait vous aider à comprendre l'erreur.
$nb_rep est vide.
Puisqu'il y a une erreur au niveau du $res ...
En local, j'ai EasyPHP 1.7, PHP 4.3.3 et mySQL 4.0.15. Sur Internet, j'ai PHP 4.2.2.
Et mysql?
Denis
HTH,
Amicalement, Sebastian
-- The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents. --Nathaniel Borenstein
Frederic BISSON
$query = "select * from mvolume where vol ="".$cible."""; Ta requête n'est pas bonne.
Si $cible=='abcd', ta ligne donne select * from mvolume where vol="abcd"
Or, ce ne sont pas des doubles quotes mais des simples quotes en SQL. Si une version fonctionne avec des double quotes, c'est qu'elle est un peu trop permissive par rapport au standard (ou qu'une couche logicielle retouche ta requête au passage).
La ligne suivante devrait mieux fonctionner : $query = "select * from mvolume where vol ='".$cible."'";
De plus, sauf si tu es en mesure de garantir que $cible ne contiendra jamais d'apostrophe, quel que soit l'appel, il vaut mieux écrire : $query = "select * from mvolume where vol='".str_replace("'","''",$cible)."'";
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line *** Le message t'indique que tu as voulu appeler mysql_num_rows avec un
résultat de requête incorrect. Cela arrive la plupart du temps quand ta requête n'est pas bonne. Dans ce cas mysql_query retourne FALSE et mysql_num_rows(FALSE) produit ce message.
$res = mysql_query($query); Tu as oublié les quelques lignes suivantes :
if(!$res) { echo 'Erreur de requête'; exit(0); }
@+
Frédéric
$query = "select * from mvolume where vol ="".$cible.""";
Ta requête n'est pas bonne.
Si $cible=='abcd', ta ligne donne
select * from mvolume where vol="abcd"
Or, ce ne sont pas des doubles quotes mais des simples quotes en SQL. Si
une version fonctionne avec des double quotes, c'est qu'elle est un peu
trop permissive par rapport au standard (ou qu'une couche logicielle
retouche ta requête au passage).
La ligne suivante devrait mieux fonctionner :
$query = "select * from mvolume where vol ='".$cible."'";
De plus, sauf si tu es en mesure de garantir que $cible ne contiendra
jamais d'apostrophe, quel que soit l'appel, il vaut mieux écrire :
$query = "select * from mvolume where vol='".str_replace("'","''",$cible)."'";
Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in ***.php on line ***
Le message t'indique que tu as voulu appeler mysql_num_rows avec un
résultat de requête incorrect. Cela arrive la plupart du temps quand ta
requête n'est pas bonne. Dans ce cas mysql_query retourne FALSE et
mysql_num_rows(FALSE) produit ce message.
$res = mysql_query($query);
Tu as oublié les quelques lignes suivantes :
$query = "select * from mvolume where vol ="".$cible."""; Ta requête n'est pas bonne.
Si $cible=='abcd', ta ligne donne select * from mvolume where vol="abcd"
Or, ce ne sont pas des doubles quotes mais des simples quotes en SQL. Si une version fonctionne avec des double quotes, c'est qu'elle est un peu trop permissive par rapport au standard (ou qu'une couche logicielle retouche ta requête au passage).
La ligne suivante devrait mieux fonctionner : $query = "select * from mvolume where vol ='".$cible."'";
De plus, sauf si tu es en mesure de garantir que $cible ne contiendra jamais d'apostrophe, quel que soit l'appel, il vaut mieux écrire : $query = "select * from mvolume where vol='".str_replace("'","''",$cible)."'";
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line *** Le message t'indique que tu as voulu appeler mysql_num_rows avec un
résultat de requête incorrect. Cela arrive la plupart du temps quand ta requête n'est pas bonne. Dans ce cas mysql_query retourne FALSE et mysql_num_rows(FALSE) produit ce message.
$res = mysql_query($query); Tu as oublié les quelques lignes suivantes :
if(!$res) { echo 'Erreur de requête'; exit(0); }
@+
Frédéric
Denis Beauregard
Le 16 Jul 2004 22:33:14 GMT, Sebastian Lauwers écrivait dans fr.comp.lang.php:
Denis Beauregard wrote:
Bonjour,
Bonsoir,
include_once('connexion.php');
if (!array_key_exists('vol', $_GET))
Utilisez plutôt:
if (!isset ($_GET['vol']) )
Merci pour ces trucs.
{ $cible = 0; } else { $cible = $_GET['vol']; };
$query = "select * from mvolume where vol ="".$cible.""";
echo "'".$query."'<P>"; $res = mysql_query($query) OR die(mysql_error());
$res = mysql_query($query) OR die ( mysql_error() );
Le message est: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line ***
Ce message indique une erreur au niveau de la requête SQL, la table est bien remplie? Il n'y a pas d'erreur dans la requête? Vérifiez bien cela! Le die(mysql_error()) devrait vous aider à comprendre l'erreur.
J'obtiens quelque chose de tout à fait étrange.
J'ai ajouté le message d'erreur et cela dit que ma table n'existe pas. J'avais déjà essayé SHOW TABLES qui me dit que j'ai 15 tables alors qu'en réalité, c'est 16. J'ai demandé à mon hébergeur et il n'y a pas de limite.
Table 'sgcf.mvolume' doesn't exist
Mais alors, comment est-ce que phpadmin fait pour la voir cette table si elle n'existe pas ?
$nb_rep est vide.
Puisqu'il y a une erreur au niveau du $res ...
En local, j'ai EasyPHP 1.7, PHP 4.3.3 et mySQL 4.0.15. Sur Internet, j'ai PHP 4.2.2.
Et mysql?
3.23.58 (j'ai fouillé un peu, je m'attendais à voir un 4.x.y).
Denis
Le 16 Jul 2004 22:33:14 GMT, Sebastian Lauwers
<dacrashanddie@9online.fr> écrivait dans fr.comp.lang.php:
Denis Beauregard wrote:
Bonjour,
Bonsoir,
include_once('connexion.php');
if (!array_key_exists('vol', $_GET))
Utilisez plutôt:
if (!isset ($_GET['vol']) )
Merci pour ces trucs.
{ $cible = 0; }
else
{ $cible = $_GET['vol']; };
$query = "select * from mvolume where vol ="".$cible.""";
echo "'".$query."'<P>";
$res = mysql_query($query) OR die(mysql_error());
$res = mysql_query($query) OR die ( mysql_error() );
Le message est:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in ***.php on line ***
Ce message indique une erreur au niveau de la requête SQL, la table est
bien remplie? Il n'y a pas d'erreur dans la requête? Vérifiez bien cela!
Le die(mysql_error()) devrait vous aider à comprendre l'erreur.
J'obtiens quelque chose de tout à fait étrange.
J'ai ajouté le message d'erreur et cela dit que ma table n'existe
pas. J'avais déjà essayé SHOW TABLES qui me dit que j'ai 15
tables alors qu'en réalité, c'est 16. J'ai demandé à mon hébergeur
et il n'y a pas de limite.
Table 'sgcf.mvolume' doesn't exist
Mais alors, comment est-ce que phpadmin fait pour la voir cette table
si elle n'existe pas ?
$nb_rep est vide.
Puisqu'il y a une erreur au niveau du $res ...
En local, j'ai EasyPHP 1.7, PHP 4.3.3 et mySQL 4.0.15.
Sur Internet, j'ai PHP 4.2.2.
Et mysql?
3.23.58 (j'ai fouillé un peu, je m'attendais à voir un 4.x.y).
Le message est: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line ***
Ce message indique une erreur au niveau de la requête SQL, la table est bien remplie? Il n'y a pas d'erreur dans la requête? Vérifiez bien cela! Le die(mysql_error()) devrait vous aider à comprendre l'erreur.
J'obtiens quelque chose de tout à fait étrange.
J'ai ajouté le message d'erreur et cela dit que ma table n'existe pas. J'avais déjà essayé SHOW TABLES qui me dit que j'ai 15 tables alors qu'en réalité, c'est 16. J'ai demandé à mon hébergeur et il n'y a pas de limite.
Table 'sgcf.mvolume' doesn't exist
Mais alors, comment est-ce que phpadmin fait pour la voir cette table si elle n'existe pas ?
$nb_rep est vide.
Puisqu'il y a une erreur au niveau du $res ...
En local, j'ai EasyPHP 1.7, PHP 4.3.3 et mySQL 4.0.15. Sur Internet, j'ai PHP 4.2.2.
Et mysql?
3.23.58 (j'ai fouillé un peu, je m'attendais à voir un 4.x.y).
Denis
Denis Beauregard
Le 16 Jul 2004 22:33:15 GMT, Frederic BISSON écrivait dans fr.comp.lang.php:
$query = "select * from mvolume where vol ="".$cible."""; Ta requête n'est pas bonne.
Si $cible=='abcd', ta ligne donne select * from mvolume where vol="abcd"
Or, ce ne sont pas des doubles quotes mais des simples quotes en SQL. Si une version fonctionne avec des double quotes, c'est qu'elle est un peu trop permissive par rapport au standard (ou qu'une couche logicielle retouche ta requête au passage).
La ligne suivante devrait mieux fonctionner : $query = "select * from mvolume where vol ='".$cible."'";
De plus, sauf si tu es en mesure de garantir que $cible ne contiendra jamais d'apostrophe, quel que soit l'appel, il vaut mieux écrire : $query = "select * from mvolume where vol='".str_replace("'","''",$cible)."'";
C'est noté. En fait, pour les tests, je passe des arguments bien précis, mais il est vrai que quelqu'un peut s'amuser à envoyer des chaînes spéciales pour faire planter le système. Je pense que je vais revoir de plus près le paramètre reçu. Est-ce que quelqu'un pourrait passer ceci par exemple ?
14; commande pour effacer la table
alors que je m'attends à lire un nombre et rien d'autres ?
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line *** Le message t'indique que tu as voulu appeler mysql_num_rows avec un
résultat de requête incorrect. Cela arrive la plupart du temps quand ta requête n'est pas bonne. Dans ce cas mysql_query retourne FALSE et mysql_num_rows(FALSE) produit ce message.
$res = mysql_query($query); Tu as oublié les quelques lignes suivantes :
if(!$res) { echo 'Erreur de requête'; exit(0); }
En fait, si l'argument est bon, j'affiche les détails d'un volume et sinon, c'est la liste des volumes et il faudra choisir un volume parmi la liste.
Denis
Le 16 Jul 2004 22:33:15 GMT, Frederic BISSON <zigazou@free.fr>
écrivait dans fr.comp.lang.php:
$query = "select * from mvolume where vol ="".$cible.""";
Ta requête n'est pas bonne.
Si $cible=='abcd', ta ligne donne
select * from mvolume where vol="abcd"
Or, ce ne sont pas des doubles quotes mais des simples quotes en SQL. Si
une version fonctionne avec des double quotes, c'est qu'elle est un peu
trop permissive par rapport au standard (ou qu'une couche logicielle
retouche ta requête au passage).
La ligne suivante devrait mieux fonctionner :
$query = "select * from mvolume where vol ='".$cible."'";
De plus, sauf si tu es en mesure de garantir que $cible ne contiendra
jamais d'apostrophe, quel que soit l'appel, il vaut mieux écrire :
$query = "select * from mvolume where vol='".str_replace("'","''",$cible)."'";
C'est noté. En fait, pour les tests, je passe des arguments bien
précis, mais il est vrai que quelqu'un peut s'amuser à envoyer des
chaînes spéciales pour faire planter le système. Je pense que je
vais revoir de plus près le paramètre reçu. Est-ce que quelqu'un
pourrait passer ceci par exemple ?
14; commande pour effacer la table
alors que je m'attends à lire un nombre et rien d'autres ?
Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in ***.php on line ***
Le message t'indique que tu as voulu appeler mysql_num_rows avec un
résultat de requête incorrect. Cela arrive la plupart du temps quand ta
requête n'est pas bonne. Dans ce cas mysql_query retourne FALSE et
mysql_num_rows(FALSE) produit ce message.
$res = mysql_query($query);
Tu as oublié les quelques lignes suivantes :
if(!$res) {
echo 'Erreur de requête';
exit(0);
}
En fait, si l'argument est bon, j'affiche les détails d'un volume
et sinon, c'est la liste des volumes et il faudra choisir un volume
parmi la liste.
Le 16 Jul 2004 22:33:15 GMT, Frederic BISSON écrivait dans fr.comp.lang.php:
$query = "select * from mvolume where vol ="".$cible."""; Ta requête n'est pas bonne.
Si $cible=='abcd', ta ligne donne select * from mvolume where vol="abcd"
Or, ce ne sont pas des doubles quotes mais des simples quotes en SQL. Si une version fonctionne avec des double quotes, c'est qu'elle est un peu trop permissive par rapport au standard (ou qu'une couche logicielle retouche ta requête au passage).
La ligne suivante devrait mieux fonctionner : $query = "select * from mvolume where vol ='".$cible."'";
De plus, sauf si tu es en mesure de garantir que $cible ne contiendra jamais d'apostrophe, quel que soit l'appel, il vaut mieux écrire : $query = "select * from mvolume where vol='".str_replace("'","''",$cible)."'";
C'est noté. En fait, pour les tests, je passe des arguments bien précis, mais il est vrai que quelqu'un peut s'amuser à envoyer des chaînes spéciales pour faire planter le système. Je pense que je vais revoir de plus près le paramètre reçu. Est-ce que quelqu'un pourrait passer ceci par exemple ?
14; commande pour effacer la table
alors que je m'attends à lire un nombre et rien d'autres ?
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ***.php on line *** Le message t'indique que tu as voulu appeler mysql_num_rows avec un
résultat de requête incorrect. Cela arrive la plupart du temps quand ta requête n'est pas bonne. Dans ce cas mysql_query retourne FALSE et mysql_num_rows(FALSE) produit ce message.
$res = mysql_query($query); Tu as oublié les quelques lignes suivantes :
if(!$res) { echo 'Erreur de requête'; exit(0); }
En fait, si l'argument est bon, j'affiche les détails d'un volume et sinon, c'est la liste des volumes et il faudra choisir un volume parmi la liste.
Denis
Denis Beauregard
Bonjour,
Mon cas se complique !
Dans phpmyadmin, je vois un certain nombre de tables mais si je fais un script pour afficher les tables, j'obtiens des résultats différents.
La plupart des tables que j'ai créées il y a longtemps sont là (interface et sortie du script).
Certaines tables que j'ai créées avec phpmyadmin et que j'ai effacées avec cette interface (donc, avec l'interface, je ne les vois pas), sont encore là avec le script !
Et les tables que je viens de créer avec phpmyadmin ne sont visibles qu'avec l'interface mais pas avec un script.
Mon script est:
$query = "SHOW TABLES "; $res_a = mysql_query($query, $dbLink) or die (mysql_error()); $nb_rep_a = mysql_num_rows($res_a);
while ($line = mysql_fetch_assoc($res_a)) { foreach ($line as $col_value) { echo "$col_value<br>n"; } }
C'est comme si phpmyadmin avait créé une version fantôme de ma base de données...
Denis
Bonjour,
Mon cas se complique !
Dans phpmyadmin, je vois un certain nombre de tables mais si je fais
un script pour afficher les tables, j'obtiens des résultats
différents.
La plupart des tables que j'ai créées il y a longtemps sont là
(interface et sortie du script).
Certaines tables que j'ai créées avec phpmyadmin et que j'ai
effacées avec cette interface (donc, avec l'interface, je ne les
vois pas), sont encore là avec le script !
Et les tables que je viens de créer avec phpmyadmin ne sont visibles
qu'avec l'interface mais pas avec un script.
Mon script est:
$query = "SHOW TABLES ";
$res_a = mysql_query($query, $dbLink) or die (mysql_error());
$nb_rep_a = mysql_num_rows($res_a);
while ($line = mysql_fetch_assoc($res_a)) {
foreach ($line as $col_value) {
echo "$col_value<br>n";
}
}
C'est comme si phpmyadmin avait créé une version fantôme de ma
base de données...
Dans phpmyadmin, je vois un certain nombre de tables mais si je fais un script pour afficher les tables, j'obtiens des résultats différents.
La plupart des tables que j'ai créées il y a longtemps sont là (interface et sortie du script).
Certaines tables que j'ai créées avec phpmyadmin et que j'ai effacées avec cette interface (donc, avec l'interface, je ne les vois pas), sont encore là avec le script !
Et les tables que je viens de créer avec phpmyadmin ne sont visibles qu'avec l'interface mais pas avec un script.
Mon script est:
$query = "SHOW TABLES "; $res_a = mysql_query($query, $dbLink) or die (mysql_error()); $nb_rep_a = mysql_num_rows($res_a);
while ($line = mysql_fetch_assoc($res_a)) { foreach ($line as $col_value) { echo "$col_value<br>n"; } }
C'est comme si phpmyadmin avait créé une version fantôme de ma base de données...
Denis
Frederic BISSON
Est-ce que quelqu'un pourrait passer ceci par exemple ? 14; commande pour effacer la table alors que je m'attends à lire un nombre et rien d'autres ? En HTML, tu n'as pas possibilité de préciser qu'un champ d'un formulaire
est numérique. Il ne contient que du texte (avec JavaScript, c'est une autre histoire). Mais en dehors d'HTML, rien n'empêche quelqu'un de générer une requête HTTP parfaitement standard et te fournir n'importe quelle valeur.
En fait, si l'argument est bon, j'affiche les détails d'un volume et sinon, c'est la liste des volumes et il faudra choisir un volume parmi la liste. Selon php.net :
mysql_query() retourne une ressource de résultat MySQL, ou bien FALSE si la requête n'a pu être exécuté correctement
Si aucune valeur n'a été trouvée, mysql_query() retourne une ressource de résultat parfaitement valide mais vide. Tu ne peux pas te baser sur $res pour déterminer que mysql_query() a trouvé des enregistrements ou non.
@+
Frédéric
Est-ce que quelqu'un pourrait passer ceci par exemple ?
14; commande pour effacer la table
alors que je m'attends à lire un nombre et rien d'autres ?
En HTML, tu n'as pas possibilité de préciser qu'un champ d'un formulaire
est numérique. Il ne contient que du texte (avec JavaScript, c'est une
autre histoire). Mais en dehors d'HTML, rien n'empêche quelqu'un de
générer une requête HTTP parfaitement standard et te fournir n'importe
quelle valeur.
En fait, si l'argument est bon, j'affiche les détails d'un volume
et sinon, c'est la liste des volumes et il faudra choisir un volume
parmi la liste.
Selon php.net :
mysql_query() retourne une ressource de résultat MySQL, ou bien FALSE si
la requête n'a pu être exécuté correctement
Si aucune valeur n'a été trouvée, mysql_query() retourne une ressource
de résultat parfaitement valide mais vide. Tu ne peux pas te baser sur
$res pour déterminer que mysql_query() a trouvé des enregistrements ou
non.
Est-ce que quelqu'un pourrait passer ceci par exemple ? 14; commande pour effacer la table alors que je m'attends à lire un nombre et rien d'autres ? En HTML, tu n'as pas possibilité de préciser qu'un champ d'un formulaire
est numérique. Il ne contient que du texte (avec JavaScript, c'est une autre histoire). Mais en dehors d'HTML, rien n'empêche quelqu'un de générer une requête HTTP parfaitement standard et te fournir n'importe quelle valeur.
En fait, si l'argument est bon, j'affiche les détails d'un volume et sinon, c'est la liste des volumes et il faudra choisir un volume parmi la liste. Selon php.net :
mysql_query() retourne une ressource de résultat MySQL, ou bien FALSE si la requête n'a pu être exécuté correctement
Si aucune valeur n'a été trouvée, mysql_query() retourne une ressource de résultat parfaitement valide mais vide. Tu ne peux pas te baser sur $res pour déterminer que mysql_query() a trouvé des enregistrements ou non.
@+
Frédéric
Denis Beauregard
Le 17 Jul 2004 09:21:54 GMT, Denis Beauregard écrivait dans fr.comp.lang.php:
Bonjour,
Mon cas se complique !
C'est comme si phpmyadmin avait créé une version fantôme de ma base de données...
Cas résolu !!! La base a été transférée vers un autre serveur et j'éditais l'ancienne base mais lançais les scripts sur la nouvelle.
Merci tout de même pour les conseils pour une meilleure programmation.
Denis
Le 17 Jul 2004 09:21:54 GMT, Denis Beauregard <no@nospam.com.invalid>
écrivait dans fr.comp.lang.php:
Bonjour,
Mon cas se complique !
C'est comme si phpmyadmin avait créé une version fantôme de ma
base de données...
Cas résolu !!! La base a été transférée vers un autre serveur
et j'éditais l'ancienne base mais lançais les scripts sur la nouvelle.
Merci tout de même pour les conseils pour une meilleure programmation.