Probleme avec une requete mysql.
Fermé
beren57
Messages postés
7
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2009
-
9 janv. 2009 à 15:30
toto - 12 janv. 2009 à 15:42
toto - 12 janv. 2009 à 15:42
A voir également:
- Probleme avec une requete mysql.
- Mysql community server - Télécharger - Bases de données
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Virus
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2) ✓ - Forum Linux / Unix
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
10 réponses
pitxu
Messages postés
689
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
25 mars 2015
94
9 janv. 2009 à 17:06
9 janv. 2009 à 17:06
bonjour,
la commande SQL "INSERT TO" nécessite d'avoir autant de valeurs qu'il existe de champs dans la table, donc c'est impossible à moins de créer une nouvelle table en fonction du nombre de champs.
la commande SQL "INSERT TO" nécessite d'avoir autant de valeurs qu'il existe de champs dans la table, donc c'est impossible à moins de créer une nouvelle table en fonction du nombre de champs.
beren57
Messages postés
7
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2009
9 janv. 2009 à 17:36
9 janv. 2009 à 17:36
d'ou mes while qui devraient avoir pour effet de faire une boucle dans laquelle viennent s'insérer les différents noms de champ de ma table... Je pense que ça peut marcher j'ai juste comme souci que je ne sais pas comment faire un while en prenant comme base le nom des champs de la table plutôt que ce qu'elle contient...
Bonjour
Pour ce point là, il y a la fonction mysql_list_fields qui devrait t'aider
"SHOW COLUMNS FROM obj_joueur", il me donne tous mes titres de colonne dans une colonne appelée "field". Seulement, j'ai essayé $donnees['field']
Pour ce point là, il y a la fonction mysql_list_fields qui devrait t'aider
Deuxième souci : seul le premier while fonctionne. Les autres non, je ne sais pas du tout pourquoi...
Quand tu as fini ton premier while ($donnees = mysql_fetch_array($retour)) , tu as parcouru toute la ressource $retour. Les autres mysql_fetch_array($retour) te rendront toujours FALSE, donc tu n'entres dans aucun des autres while. Pour revenir au début de ta resource, il faut faire mysql_data_seek ( $retour,0 ); avant chaque nouveau while.
Quand tu as fini ton premier while ($donnees = mysql_fetch_array($retour)) , tu as parcouru toute la ressource $retour. Les autres mysql_fetch_array($retour) te rendront toujours FALSE, donc tu n'entres dans aucun des autres while. Pour revenir au début de ta resource, il faut faire mysql_data_seek ( $retour,0 ); avant chaque nouveau while.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
beren57
Messages postés
7
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2009
11 janv. 2009 à 00:44
11 janv. 2009 à 00:44
merci grandement pour ta réponse. Par contre j'ai tenté la chose et ça me met un tas d'erreurs, toutes liées au fait que désormais $retour n'est plus une requête mysql qui peut être traitée en array ou dont on peut compter le nombre d'entrées. Comment puis-je traiter le problème et faire en sorte que cette requête particulière soit traitée comme un array banal ?
ça me met un tas d'erreurs, . Quand on de mande de l'aide sur une erreur, il faut TOUJOURS mettre le message d'erreur. C'est l'information la plus utile.
désormais $retour n'est plus une requête mysql qui peut être traitée en array
Je crois que tu mélanges pas mal de choses. Ta variable $retour contient le résultat d'une requête, c'est une ressource. Or une ressource, une requête et un array sont trois choses différentes : ta variable $retour n'a jamais été ni une requête, ni un array.
Requête désigne la commande qui est passée au gestionnaire de base de données, sous forme de chaîne de caractères. "SELECT * FROM `matable`" est une requête. On appelle souvent aussi 'requête' l'appel à la fonction qui soumet la requête (la ligne mysql_query(..))
ressource est un type de données, disons un objet, assez général en PHP. Son contenu exact dépend de la fonction qui l'a créée. Mysql_query rend false s'il y a un problème et une ressource s'il n'y en a pas. Cette ressource N'EST PAS un array. On n'a pas directement accès au contenu de cette ressource, il faut en parcourir les lignes une par une grâce à la fonction mysql_fetch_array (dans un while bien souvent). mysql_fetch_array, elle, rend bien un array dont les indices sont les noms des champs (ou FALSE quand on est rendu à la fin de la ressource). mysql_data_seek te permet de revenir au début de la ressource si tu veux la parcourir une autre fois.
dont on peut compter le nombre d'entrées. Si. Il y a la fonction mysql_num_rows qui te donne le nombre de lignes de réponses à ta requête.
désormais $retour n'est plus une requête mysql qui peut être traitée en array
Je crois que tu mélanges pas mal de choses. Ta variable $retour contient le résultat d'une requête, c'est une ressource. Or une ressource, une requête et un array sont trois choses différentes : ta variable $retour n'a jamais été ni une requête, ni un array.
Requête désigne la commande qui est passée au gestionnaire de base de données, sous forme de chaîne de caractères. "SELECT * FROM `matable`" est une requête. On appelle souvent aussi 'requête' l'appel à la fonction qui soumet la requête (la ligne mysql_query(..))
ressource est un type de données, disons un objet, assez général en PHP. Son contenu exact dépend de la fonction qui l'a créée. Mysql_query rend false s'il y a un problème et une ressource s'il n'y en a pas. Cette ressource N'EST PAS un array. On n'a pas directement accès au contenu de cette ressource, il faut en parcourir les lignes une par une grâce à la fonction mysql_fetch_array (dans un while bien souvent). mysql_fetch_array, elle, rend bien un array dont les indices sont les noms des champs (ou FALSE quand on est rendu à la fin de la ressource). mysql_data_seek te permet de revenir au début de la ressource si tu veux la parcourir une autre fois.
dont on peut compter le nombre d'entrées. Si. Il y a la fonction mysql_num_rows qui te donne le nombre de lignes de réponses à ta requête.
beren57
Messages postés
7
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2009
11 janv. 2009 à 13:29
11 janv. 2009 à 13:29
bon pour être plus clair : si j'ajoute simplement les mysql_data_seek qui manquaient, j'obtiens tout ce que je voulais, sauf que ce qui dans mon code est indiqué par $donnees[''], a savoir ce qui devrait contenir les noms de champ de mon tableau, est toujours aussi vide.
Au niveau des while, le problème est donc résolu. Je passe a la requête mysql qui foirait, je la change donc en mysql_list_fields. J'ai donc comme code :
_________________________________________
$liste = mysql_query('SELECT * FROM obj_joueur');
$retour = mysql_list_fields($liste);
_________________________________________
a la place de :
_________________________________________
$retour = mysql_query('SHOW COLUMNS FROM obj_joueur');
_________________________________________
et voila ce que j'obtiens :
Warning: Wrong parameter count for mysql_list_fields() in C:\wamp\www\650km\objectifs.php on line 48
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 49
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 55
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 69
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 70
if ($joueur == 0){$queryinsert="INSERT INTO obj_joueur VALUES(
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 78
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 79
)";mysql_query($queryinsert);}else if ($joueur == 1){mysql_query("UPDATE obj_joueur SET
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 90
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 91
WHERE idprofil='" . $_POST['idprofil'] . "'");}}else{if ($joueur == 1){$details = mysql_fetch_array($checkid);
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 107
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 108
}else if ($joueur == 0){
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 116
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 117
}}?>
La ligne 48, dans mon code, correspond a mon $retour. Et toutes les autres lignes ou il est indiqué qu'il y a une erreur sont celles qui se rapportent a la fonction $retour. Je me suis dit que j'avais du faire une erreur dans la syntaxe de ma requête. J'ai donc cherché sur internet ce que je pouvais trouver sur cette requête et la facon de l'utiliser. J'ai trouvé ça :
http://www.manuelphp.com/php/function.mysql-list-fields.php
on y indique que la fonction list_fields est obsolète et qu'on lui préfère SHOW COLUMNS FROM table [LIKE 'name']
j'ai essayé de revenir a ma première version et de mettre
________________________________________________
$retour = mysql_query('SHOW COLUMNS FROM obj_joueur LIKE $donnees');
________________________________________________
même résultat... J'ai les mêmes erreurs, aux mêmes endroits. A l'exception d'une : la toute première, wrong parameter... Elle n'apparait plus. En dehors de celle-ci, tout le reste est identique. Et l'erreur est toujours la même : je ne peux pas faire de mysql_num_rows a partir de $retour, et je ne peux pas faire non plus de mysql_fetch_array, ni de mysql_data_seek. Ce que me renvoie la fonction $retour ne peut pas être utilisé de cette manière.
Au niveau des while, le problème est donc résolu. Je passe a la requête mysql qui foirait, je la change donc en mysql_list_fields. J'ai donc comme code :
_________________________________________
$liste = mysql_query('SELECT * FROM obj_joueur');
$retour = mysql_list_fields($liste);
_________________________________________
a la place de :
_________________________________________
$retour = mysql_query('SHOW COLUMNS FROM obj_joueur');
_________________________________________
et voila ce que j'obtiens :
Warning: Wrong parameter count for mysql_list_fields() in C:\wamp\www\650km\objectifs.php on line 48
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 49
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 55
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 69
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 70
if ($joueur == 0){$queryinsert="INSERT INTO obj_joueur VALUES(
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 78
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 79
)";mysql_query($queryinsert);}else if ($joueur == 1){mysql_query("UPDATE obj_joueur SET
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 90
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 91
WHERE idprofil='" . $_POST['idprofil'] . "'");}}else{if ($joueur == 1){$details = mysql_fetch_array($checkid);
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 107
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 108
}else if ($joueur == 0){
Warning: mysql_data_seek(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 116
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\650km\objectifs.php on line 117
}}?>
La ligne 48, dans mon code, correspond a mon $retour. Et toutes les autres lignes ou il est indiqué qu'il y a une erreur sont celles qui se rapportent a la fonction $retour. Je me suis dit que j'avais du faire une erreur dans la syntaxe de ma requête. J'ai donc cherché sur internet ce que je pouvais trouver sur cette requête et la facon de l'utiliser. J'ai trouvé ça :
http://www.manuelphp.com/php/function.mysql-list-fields.php
on y indique que la fonction list_fields est obsolète et qu'on lui préfère SHOW COLUMNS FROM table [LIKE 'name']
j'ai essayé de revenir a ma première version et de mettre
________________________________________________
$retour = mysql_query('SHOW COLUMNS FROM obj_joueur LIKE $donnees');
________________________________________________
même résultat... J'ai les mêmes erreurs, aux mêmes endroits. A l'exception d'une : la toute première, wrong parameter... Elle n'apparait plus. En dehors de celle-ci, tout le reste est identique. Et l'erreur est toujours la même : je ne peux pas faire de mysql_num_rows a partir de $retour, et je ne peux pas faire non plus de mysql_fetch_array, ni de mysql_data_seek. Ce que me renvoie la fonction $retour ne peut pas être utilisé de cette manière.
La fonction mysql_field_list a besoin de plusieurs arguments, il faut lire le mode d'emploi avant de l'utiliser. Mais tu as raison, elle est obsolète alors autant l'oublier. Il vaut effectivement mieux utiliser mysql_query ('SHOW COLUMS FROM `unetable`')
Ça ne change rien au reste du problème. Le mysql_query te rend une ressource et une ressource n'est pas un tableau. C'est la base même de l'utilisation de mysql (et d'autres bases de données, d'ailleurs) en PHP.
Si tu veux obtenir un tableau qui contient le nom des champs, il suffit de balayer une fois le résultat $retour de ta requête SHOW COLUMNS FROM :
Ça ne change rien au reste du problème. Le mysql_query te rend une ressource et une ressource n'est pas un tableau. C'est la base même de l'utilisation de mysql (et d'autres bases de données, d'ailleurs) en PHP.
Si tu veux obtenir un tableau qui contient le nom des champs, il suffit de balayer une fois le résultat $retour de ta requête SHOW COLUMNS FROM :
$champs=array(); while ($unchamp=mysql_fetch_array($retour)) $champs[]=$unchamp['Field'];Et voilà ! tes noms de champs sont dans le tableau $champs
beren57
Messages postés
7
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
9 décembre 2009
12 janv. 2009 à 15:37
12 janv. 2009 à 15:37
merci a toi pour ton aide et ta patience. Ca marche maintenant.