INSERT INTO ne marche pas

Gégé
Invité n'ayant pas de compte PHPfrance

04 nov. 2005, 11:57

Bonjour !

J'utilise une base sur online.net sur laquelle j'ai plusieurs tables où j'effectue plusieurs requêtes avec des scripts PHP et que j'administre avec phpMyAdmin.

Je suis coincé avec un INSERT qui ne fait rien (pas de message d'erreur), alors que le SELECT fonctionne.

La table

id int(11) Non auto_increment
maison varchar(10) Oui MMG14
medecin varchar(20) Oui NULL
date date Oui 0000-00-00
heure time Oui 00:00:00
patient varchar(40) Non
adresse varchar(80) Non
origine varchar(50) Oui NULL
diagnostic varchar(200) Non
destination varchar(50) Oui NULL

Le code fautif :
$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
echo "<BR>sql=".$sql1;

$sql2="SELECT * FROM MMG ORDER BY date;";

La requête sql1 n'a aucun effet, alors que echo $sql1 affiche bien la requête voulue, et que sql2 affiche bien les enregistrements déjà présents dans la base.

Cette requête provient de phpMyAdmin, où elle fonctionne (à part le champ date, et pour cause !).
J'ai essayé un tas de combinaisons de guillemets différents, sans effet. Notez que le champ date a été remplacé par une chaîne de caractères sans provoquer de message d'erreur. En revanche, si j'ajoute d'autres erreurs grossières (erreur de guillemets), j'ai un message d'erreur.

C'est sûrement une bêtise, mais je suis je ne trouve pas la sortie.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

04 nov. 2005, 12:09

Code : Tout sélectionner

$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) VALUES ( NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";

Code : Tout sélectionner

date date Oui 0000-00-00
Tu intègres "azerty" dans un champs date (0000-00-00) ?
Null pour un champs auto-incrémenté ?
--> Il va y avoir comme un souci je pense.

:!: Evites de mettre un nom "date" à un champs date, ça pourrait prêter à confusion plus tard.

:arrow:

Code : Tout sélectionner

$sql1="INSERT INTO MMG ( id , maison , medecin , date , heure , patient , adresse , origine , diagnostic , destination ) VALUES ( '', 'MMG14', 'lui', '2005-11-04', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";
Modifié en dernier par charabia le 04 nov. 2005, 12:15, modifié 3 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 nov. 2005, 12:13

De plus, tu mets NULL dans le champ 'id' qui n'a pas l'air d'accepter les NULL (tu as coché NOT NULL ?) et de plus ce n'est pas conseillé :).
Et à quoi correspondent les Oui/Non dans la table (j'ai pas PHPMyAdmin sur moi )
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

04 nov. 2005, 16:09

Code : Tout sélectionner

$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) VALUES ( NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";

Code : Tout sélectionner

date date Oui 0000-00-00
Tu intègres "azerty" dans un champs date (0000-00-00) ?
Je précise bien que c'était pour test?. Normalement, ça devrait générer une erreur, et ça ne fait rien.
Quand je mets une date normale, ça ne marche pas mieux.
Null pour un champs auto-incrémenté ?
--> Il va y avoir comme un souci je pense.
Quand je mets '', ça ne fait pas mieux.
:!: Evites de mettre un nom "date" à un champs date, ça pourrait prêter à confusion plus tard.
Bonne idée.
:arrow:

Code : Tout sélectionner

$sql1="INSERT INTO MMG ( id , maison , medecin , date , heure , patient , adresse , origine , diagnostic , destination ) VALUES ( '', 'MMG14', 'lui', '2005-11-04', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 nov. 2005, 16:25

$sql1="INSERT INTO MMG ( id , maison , medecin , date_consultation , heure , patient , adresse , origine , diagnostic , destination ) VALUES (35, 'MMG14', 'lui', '2005-11-04', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' );";
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

05 nov. 2005, 01:52

De plus, tu mets NULL dans le champ 'id' qui n'a pas l'air d'accepter les NULL (tu as coché NOT NULL ?) et de plus ce n'est pas conseillé :).
Et à quoi correspondent les Oui/Non dans la table (j'ai pas PHPMyAdmin sur moi )
Ça coince aussi avec ''.
Mais des requêtes similaires marchent avec NULL.

Oui Non correspond aux champs nuls.

Gédé
Invité n'ayant pas de compte PHPfrance

05 nov. 2005, 02:08

Des nouvelles du front :
Bonjour !

J'utilise une base sur online.net sur laquelle j'ai plusieurs tables où j'effectue plusieurs requêtes avec des scripts PHP et que j'administre avec phpMyAdmin.

Je suis coincé avec un INSERT qui ne fait rien (pas de message d'erreur), alors que le SELECT fonctionne.

La table

id int(11) Non auto_increment
maison varchar(10) Oui MMG14
medecin varchar(20) Oui NULL
date date Oui 0000-00-00
heure time Oui 00:00:00
patient varchar(40) Non
adresse varchar(80) Non
origine varchar(50) Oui NULL
diagnostic varchar(200) Non
destination varchar(50) Oui NULL

J'ai supprimé toutes les valeurs non nulles. Tous les champs peuvent maintenant être nuls, sauf la clé principale id.


Le code fautif :
$sql1="INSERT INTO `MMG` ( `id` , `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` )
VALUES (
NULL, 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé'
);";
J'ai simplifié comme ça :

Code : Tout sélectionner

$sql="INSERT INTO MMG VALUES ('')";
Pas mieux.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

05 nov. 2005, 11:37

Pour qu'on puisse t'aider, peux-tu sortir le SQL qui permet de créer tes tables (on pourra créer les mêmes sur nos serveurs locaux) et ainsi tester ta requête.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 nov. 2005, 11:41

En ce qui concerne ton id, si tu veux que MySQL le gère tout seul, il te suffit de ne pas le placer dans la liste de champs à remplir
$sql1="INSERT INTO `MMG` (`maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) 
VALUES ('MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' 
);"; 
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

05 nov. 2005, 12:26

Je signale au passage qu'en SQL, "date" est un mot réservé. Pour éviter ce genre de problème, il est bon de préfixer le nom des champs. Par exemple, dans une table "MMG", on mettra les champs mmg_id, mmg_date, etc.... et là on ne risque aucun conflit.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

05 nov. 2005, 17:39

En ce qui concerne ton id, si tu veux que MySQL le gère tout seul, il te suffit de ne pas le placer dans la liste de champs à remplir
$sql1="INSERT INTO `MMG` (`maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) 
VALUES ('MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' 
);"; 
Merci du tuyau, mais ce n'est pas mieux.

Invité
Invité n'ayant pas de compte PHPfrance

05 nov. 2005, 17:40

Pour qu'on puisse t'aider, peux-tu sortir le SQL qui permet de créer tes tables (on pourra créer les mêmes sur nos serveurs locaux) et ainsi tester ta requête.

Code : Tout sélectionner

CREATE TABLE MMG ( id int(11) NOT NULL auto_increment, maison varchar(10) default 'MMG14', medecin varchar(20) default NULL, jour date default '0000-00-00', heure time default '00:00:00', patient varchar(40) default NULL, adresse varchar(80) default NULL, origine varchar(50) default NULL, diagnostic varchar(200) default NULL, destination varchar(50) default NULL, PRIMARY KEY (id) ) TYPE=MyISAM;

Mammouth du PHP | 19672 Messages

05 nov. 2005, 18:01

Ça m'a pris trente seconde et phpMyAdmin pour trouver l'erreur :

Code : Tout sélectionner

INSERT INTO `MMG` ( `maison` , `medecin` , `jour` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) VALUES ( 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' )
Et non

Code : Tout sélectionner

INSERT INTO `MMG` ( `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) VALUES ( 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' )
Je te laisse le soin de trouver la différence, elle est flagrante, d'autant plus que j'avais déjà soulevé le problème.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

05 nov. 2005, 22:37

Ça m'a pris trente seconde et phpMyAdmin pour trouver l'erreur :

Code : Tout sélectionner

INSERT INTO `MMG` ( `maison` , `medecin` , `jour` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) VALUES ( 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' )
Et non

Code : Tout sélectionner

INSERT INTO `MMG` ( `maison` , `medecin` , `date` , `heure` , `patient` , `adresse` , `origine` , `diagnostic` , `destination` ) VALUES ( 'MMG14', 'lui', 'azerty', '11:00:00', 'Bellepaire', 'Loches', 'RTL', 'Grosse tête', 'Hospitalisé' )
Je te laisse le soin de trouver la différence, elle est flagrante, d'autant plus que j'avais déjà soulevé le problème.
Si tu fais allusion à jour/date, j'aurais pu faire l'erreur (personne n'est parfait !), mais non.

J'ai synchronisé les modifications de la table et de la requête.

Merci quand même.

J'ai vraiment l'impression que le problème vient plus d'un problème dans la page php que dans la requête elle-même(si elle marche dans phpmyadmin, elle devrait marcher ailleurs, et si les requêtes d'interrogation fonctionnent, les requêtes d'insertion devraient fonctionner aussi ?).

Il me semble avoir eu une histoire avec une page qui commençait comme il ne fallait pas, ou un truc comme ça.

Mammouth du PHP | 19672 Messages

05 nov. 2005, 22:44

On peut voir le code php utilisé pour l'insertion au juste ? Si on sait que le problème ne vient pas de la requête, alors le problème est ailleurs.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: