Enregistrement incompréhensible MySQL
Résolu
heliconius
Messages postés
539
Date d'inscription
Statut
Membre
Dernière intervention
-
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde,
Qui pourrait m'aider dans un problème MySQL qui me laisse perplexe ?
Je bâtis une application de gestion.
L'analyse de la gestion à effectuer a été faite à l'aide de Merise.
Parmi les tables, une table gia_Clients ainsi structurée :
# NB:
# idcom = identifiant de la commune (choisi dans une liste)
# idmed = identifiant du médecin traitant (choisi dans une liste)
Un script client.php a été écrit pour saisir et enregistrer un client.
D'ordinaire un tel script ne pose pas de problème. Son pseudo code :
Le dernier ID client est 48 et la valeur de l'auto_increment est à 49.
Une saisie a été effectuée avec les valeurs suivantes:
après validation, la consultation de la table gia_Clients donne l'enregistrement suivant :
Plusieurs essais donnent des résultats identiques. (...°£!!?$*§!!*...)
Il y a au début du fichier client.php :
Pour traquer le problème, j'ai inséré dans ce fichier init.php une fonction d'envoi par mail de ce qui est fait :
A partir de là, le script client.php construit la requete correctement et l'exécute mais l'exécution produit l'enregistrement erroné cité plus haut. La partie de code du script client.php est la suivante:
client.php :
Mail envoyé AVANT exécution de la requête (est correcte) :
Mail envoyé APRES exécution de la requête (toujours correcte) :
Problème:
La requête est bonne (bien construite) AVANT et (toujours bonne) APRES exécution.
Une insertion se fait mais pas avec les valeurs précisées. Et à première vue, les textes ont été remplacés par des nombres. En revanche, dans un autre script, la lecture d'un catalogue de prestations dans une autre table de la même base de données s'effectue correctement.
Je n'arrive pas à cerner le problème. MySQL ? PHP ? Je ne penche pas pour un problème PHP, puisque PHP envoie par mail les données correctes. Problème de droits d'écriture dans la base ? J'ai ré-attribué tous les droits à l'utilisateur :
Quelqu'un a-t-il une solution ou une piste de recherche ?
Merci beaucoup pour votre aide.
PS: J'ai accès à la machine en tant que root (et admin MySQL) par SSH.
Qui pourrait m'aider dans un problème MySQL qui me laisse perplexe ?
Je bâtis une application de gestion.
L'analyse de la gestion à effectuer a été faite à l'aide de Merise.
Parmi les tables, une table gia_Clients ainsi structurée :
mysql> desc gia_Clients; +------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+----------------+ | idcli | int(11) | NO | PRI | NULL | auto_increment | | nom | varchar(30) | NO | | | | | prenom | varchar(30) | NO | | | | | sexe | enum('F','M') | YES | | F | | | adresse | varchar(50) | NO | | | | | idcom | int(11) | NO | | 0 | | | tel | varchar(15) | NO | | | | | mob | varchar(15) | NO | | | | | mail | varchar(50) | NO | | | | | jnais | int(11) | NO | | 0 | | | mnais | int(11) | NO | | 0 | | | anais | int(11) | NO | | 0 | | | sfam | varchar(5) | NO | | | | | prof | varchar(50) | NO | | | | | sante | text | NO | | | | | traitement | text | NO | | | | | obscli | varchar(128) | NO | | | | | idmed | int(11) | NO | | 0 | | +------------+---------------+------+-----+---------+----------------+ 18 rows in set (0.00 sec)
# NB:
# idcom = identifiant de la commune (choisi dans une liste)
# idmed = identifiant du médecin traitant (choisi dans une liste)
Un script client.php a été écrit pour saisir et enregistrer un client.
D'ordinaire un tel script ne pose pas de problème. Son pseudo code :
initialisations si rappel du script après validation enregistrer client dans la base fin si afficher formulaire de saisie (la validation rappelle le script avec PHP_SELF)
Le dernier ID client est 48 et la valeur de l'auto_increment est à 49.
Une saisie a été effectuée avec les valeurs suivantes:
idcli : (auto_increment) nom : MARTIN prenom : Henri sexe : M adresse : 10 rue de la gare idcom : 217 tel : 01 02 03 04 05 mob : 06 07 08 09 10 mail : henri.martin@monfai.fr jnais : mnais : 10 anais : 1990 sfam : C prof : Représentant idmed : 15 sante : Bon état général traitement : obscli : Très souvent en déplacement.
après validation, la consultation de la table gia_Clients donne l'enregistrement suivant :
idcli = 49 nom = 0 prenom = 0 sexe = adresse = 0 idcom = 0 tel = 0 mob = 0 mail = 0 jnais = 1 mnais = 0 anais = 0 sfam = 0 prof = 0 sante = 0 traitement = 1 obscli = 0
Plusieurs essais donnent des résultats identiques. (...°£!!?$*§!!*...)
Il y a au début du fichier client.php :
require("init.php");Dans ce fichier init.php se trouve la fonction de connexion à la base de données ainsi qu'une fonction ExecRequete() à qui l'on passe comme argument la requête à exécuter et l'identifiant de connexion à la base de données. Cette fonction renvoie le résultat de la commande exécutée ou un message d'erreur :
function ExecRequete($requete,$connexion) { $resultat = mysql_query($requete,$connexion); if($resultat) { return $resultat; } else { showError(3,$requete); } }
Pour traquer le problème, j'ai inséré dans ce fichier init.php une fonction d'envoi par mail de ce qui est fait :
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Envoi de messages pour debuggage (en l'occurence les requêtes MySQL) // $_debug = 0 ou 1 (être ou ne pas être en mode debug) // $_dmail = adresse mail à qui envoyer le debuggage function sendRequests($message,$compsujet="") { global $_debug, $_dmail, $connexion, $REMOTE_ADDR; if($_debug) { if($connexion) { $cnx = "\nConnexion MySQL: $connexion"; } else { $cnx = "\nConnexion MySQL: non constatée"; } $to = $_dmail; $subject = "Debuggage. ".$compsujet; $headers = "From: debug@mondomaine.com"; $foot = "\r\n---\r\nExp: $REMOTE_ADDR, le ".date("d/m/Y H:i:s").$cnx; mail($to,$subject,$message.$foot,$headers); } }
A partir de là, le script client.php construit la requete correctement et l'exécute mais l'exécution produit l'enregistrement erroné cité plus haut. La partie de code du script client.php est la suivante:
client.php :
... construction requete... sendRequests($requete."\n\$resultat: ".$resultat, "avt ExecRequete"); $resultat = ExecRequete($requete, $connexion); sendRequests($requete."\n\$resultat: ".$resultat, "apr ExecRequete"); ...suite du script...
Mail envoyé AVANT exécution de la requête (est correcte) :
Subject: Debuggage: avt ExecRequete From: debug@mondomaine.com Date: 3 Apr 2013 11:27:22 +0000 To: xxxx@yyyyyyyy insert into gia_Clients (nom,prenom,sexe,adresse,idcom,tel,mob,mail,jnais,mnais,anais,sfam,prof,sante,traitement,obscli,idmed) values (nom='MARTIN', prenom='Henri', sexe='M', adresse='10 rue de la gare', idcom='217', tel='01 02 03 04 05', mob='06 07 08 09 10', mail='henri.martin@monfai.fr', jnais='', mnais='10', anais='1990', sfam='C', prof='Représentant', sante='Bon état général', traitement='', obscli='Très souvent endéplacement', idmed='15'); $resultat: --- Exp: 92.123.52.13, le 03/04/2013 11:27:22 Connexion MySQL: Resource id #3
Mail envoyé APRES exécution de la requête (toujours correcte) :
Subject: Debuggage: apr ExecRequete From: debug@mondomaine.com Date: 3 Apr 2013 11:27:22 +0000 To: xxxx@yyyyyyyy insert into gia_Clients (nom,prenom,sexe,adresse,idcom,tel,mob,mail,jnais,mnais,anais,sfam,prof,sante,traitement,obscli,idmed) values (nom='MARTIN', prenom='Henri', sexe='M', adresse='10 rue de la gare', idcom='217', tel='01 02 03 04 05', mob='06 07 08 09 10', mail='henri.martin@monfai.fr', jnais='', mnais='10', anais='1990', sfam='C', prof='Représentant', sante='Bon état général', traitement='', obscli='Très souvent endéplacement', idmed='15'); $resultat: 1 --- Exp: 92.123.59.13, le 03/04/2013 11:27:22 Connexion MySQL: Resource id #3
Problème:
La requête est bonne (bien construite) AVANT et (toujours bonne) APRES exécution.
Une insertion se fait mais pas avec les valeurs précisées. Et à première vue, les textes ont été remplacés par des nombres. En revanche, dans un autre script, la lecture d'un catalogue de prestations dans une autre table de la même base de données s'effectue correctement.
Je n'arrive pas à cerner le problème. MySQL ? PHP ? Je ne penche pas pour un problème PHP, puisque PHP envoie par mail les données correctes. Problème de droits d'écriture dans la base ? J'ai ré-attribué tous les droits à l'utilisateur :
GRANT ALL PRIVILEGES on LABASE.* to 'xxxxx'@'%' IDENTIFIED BY 'yyyyyyy';C'est toujours pareil.
Quelqu'un a-t-il une solution ou une piste de recherche ?
Merci beaucoup pour votre aide.
PS: J'ai accès à la machine en tant que root (et admin MySQL) par SSH.
A voir également:
- Enregistrement incompréhensible MySQL
- Enregistrement mp3 gratuit - Télécharger - Streaming audio
- Mysql community server - Télécharger - Bases de données
- Telecharger studio d'enregistrement rap - Télécharger - Édition & Montage
- Enregistrement - Guide
- Comment couper un enregistrement audio - Guide
1 réponse
Bonjour,
Juste une observation, si je dis une bêtise je supprimerai mon message ;-)
Ça existe comme syntaxe values (nom='MARTIN', prenom='Henri', ... c'est à dire donner le nom de la colonne alors quelle est déjà dans la liste avant values ??
Généralement on met values ('MARTIN', 'Henri',
Cdlt
Un étranger, c'est un ami qu'on n'a pas encore rencontré.
Juste une observation, si je dis une bêtise je supprimerai mon message ;-)
Ça existe comme syntaxe values (nom='MARTIN', prenom='Henri', ... c'est à dire donner le nom de la colonne alors quelle est déjà dans la liste avant values ??
Généralement on met values ('MARTIN', 'Henri',
Cdlt
Un étranger, c'est un ami qu'on n'a pas encore rencontré.
En fait, le même script fait aussi les modifications où la requête est :
C'est probablement à cause de ça que j'ai été aveugle :o) En tout cas, 1000 merci à toi de l'avoir vu de suite... ça fait 2 jours que je suis dessus, mdrrrr
Merci.