[REGLE] Problème d'insertion dans une base MySql

Problème d'insertion dans une base MySql [REGLE] - PHP - Programmation

Marsh Posté le 07-01-2006 à 11:21:53    

Bonjour à tous,
 
Avant tout, j'aimerai dire que mon problème concerne une requête en PHP executée sur une base MySql, donc si jamais je me suis trompé de forum (plutôt SGBD), veuillez m'excusez et déplacer mon message comme vous le voudrez.
 
Bien, voici donc mon problème :
J'ai une chaine de caractère (qui représente un bilan) que je veux insérrer dans ma base, dans la table "bilan".
La chaine de caractère est déjà formatée en HTML, et contient des <TABLE>, <TD>, <br>, etc...
 
Ce qui donne quelque chose comme :

Code :
  1. INSERT INTO BILAN (user_id, bilan) VALUES ('1', '<TABLE><TR><TD>Test</TD></TR></TABLE>')


 
Et le problème est qu'après execution de la requête je vais vérifier dans la base et rien a été inséré.
C'est peut être un problème tout bête qui m'échappe, je suis souvent tête en l'air... :ange:
 
En tout cas, il n'y a pas d'erreur, aucun message, ect..., même avec mysql_error().
 
Si je replace la chaine pas 'AAAAAAAAAAA', il me l'inserre sans problème, j'en déduis donc que l'erreur provient de la syntaxe HTML.
 
Enfin bref, si quelqu'un peut m'aider, merci beaucoup.


Message édité par Malta le 08-01-2006 à 16:03:35
Reply

Marsh Posté le 07-01-2006 à 11:21:53   

Reply

Marsh Posté le 07-01-2006 à 12:05:08    

Fait voir le code d'insertion complet.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2006 à 12:16:50    

Code :
  1. // Formatage de la chaine
  2. $str .= "<TABLE class='demi_tab'>
  3.              <TR><TD>
  4. <TABLE class='menu_tab'>
  5. <TR><TD colspan=3 align='center'><b>Forces de ".$tabAtt["login"]."</b></TD></TR>
  6. <TR><TD align='center'><b>Unité</b></TD><TD align='center'><b>Qtt</b></TD><TD align='center'><b>Pertes</b></TD></TR>";
  7. for ($j=0; $j<count($tabUA["id"]); $j++) $str .= "<TR><TD align='center'>".$tabUA["name"][$j]."</TD><TD align='center'>".$tabUA["eff"][$j]."</TD><TD align='center'>".$pertesAtt["nb"][$j]."</TD></TR>";
  8. $str .= "</TABLE><br>";
  9. $str .= "<TABLE class='menu_tab'>
  10. <TR><TD colspan=3 align='center'><b>Forces de ".$tabDef["login"]."</b></TD></TR>
  11. <TR><TD align='center'>Unité</TD><TD align='center'>Qtt</TD><TD align='center'>Pertes</TD></TR>";
  12. for ($j=0; $j<count($tabUD["id"]); $j++) $str .= "<TR><TD align='center'>".$tabUD["name"][$j]."</TD><TD align='center'>".$tabUD["eff"][$j]."</TD><TD align='center'>".$pertesDef["nb"][$j]."</TD></TR>";
  13. $str .= "</TABLE>
  14. </TD></TR>
  15. <TR><TD align='center'><INPUT type='SUBMIT' name='deleteBilan' value='Supprimer le bilan'></TD></TR></TABLE><br>";
  16. // 3. Insertion du bilan
  17. fantasya_query("INSERT INTO bilan VALUES ('".$tabDef["id"]."', '".$str."')" );


 
Voilà. :)
 
Edit // Ha oui, fantasya est le nom du site, et c'est une fonction qui ouvre la connexion, passe la requête, puis ferme la connexion.


Message édité par Malta le 07-01-2006 à 12:19:18
Reply

Marsh Posté le 07-01-2006 à 12:39:46    

Code :
  1. $sql = "INSERT INTO bilan VALUES ('".$tabDef["id"]."', '".$str."')";
  2. echo $sql;


 
t'affiche ?
 
edit: soit dit en passant, le fait de se connecter/déconnecter à chaque requête est pas top. En général on connecte en début de script et on déco à la fin. [:figti]


Message édité par sielfried le 07-01-2006 à 12:40:29

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2006 à 12:45:25    

oui, mais ça m'affiche le tableau  :) :
 

Code :
  1. INSERT INTO bilan VALUES ('1', '
  2. __________________________________________
  3. |                                         |
  4. |________________________________________ |
  5. |                                         |
  6. |                                         |
  7. |                                         |
  8. |                                         |
  9. ------------------------------------------
  10. ')";

Message cité 1 fois
Message édité par Malta le 07-01-2006 à 13:03:18
Reply

Marsh Posté le 07-01-2006 à 12:51:33    

Ton echo t'affiche ('".$tabDef["id"]."' ."' ?? [:mlc]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2006 à 13:03:04    

erreur désolé... :-( (c'est corrigé)

Reply

Marsh Posté le 07-01-2006 à 13:49:07    

T'as phpMyAdmin ?
 
Si tu la rentres en dur par son intermédiaire, ça passe pas non plus ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2006 à 14:03:19    

Malta a écrit :


__________________________________________
|                                         |
|________________________________________ |
|                                         |
|                                         |
|                                         |
|                                         |
------------------------------------------
')";


 
Fais reellement le test et copie-colle le résultat (le source html) parce qu'il y a aucun raison qu'il affiche ')";


Message édité par smaragdus le 07-01-2006 à 14:03:56
Reply

Marsh Posté le 07-01-2006 à 14:18:12    

En effet.
 
Si tu fais pas ce qu'on te demande, ça va être dur de t'aider.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2006 à 14:18:12   

Reply

Marsh Posté le 07-01-2006 à 22:25:58    

Pourquoi il devrait pas afficher ')"; ???
 
C'est la fin de la requête !
 
Bon, voici le copier/coller du code source html :
 

Code :
  1. INSERT INTO bilan VALUES ('1', '
  2. <TABLE class='demi_tab'>
  3. <TR><TD>
  4. <TABLE class='menu_tab'>
  5. <TR><TD colspan=3 align='center'><b>Forces de Achyll</b></TD></TR>
  6. <TR><TD align='center'><b>Unité</b></TD><TD align='center'><b>Qtt</b></TD><TD align='center'><b>Pertes</b></TD></TR>
  7.              <TR><TD align='center'>Berserk</TD><TD align='center'>40</TD><TD align='center'>40</TD></TR>
  8.              <TR><TD align='center'>Traître</TD><TD align='center'>50</TD><TD align='center'>50</TD></TR>
  9.              </TABLE><br>
  10.               <TABLE class='menu_tab'>
  11. <TR><TD colspan=3 align='center'><b>Forces de Malta</b></TD></TR>
  12. <TR><TD align='center'>Unité</TD><TD align='center'>Qtt</TD><TD align='center'>Pertes</TD></TR>
  13.              <TR><TD align='center'>4</TD><TD align='center'>55</TD><TD align='center'>15</TD></TR>
  14.              <TR><TD align='center'>6</TD><TD align='center'>61</TD><TD align='center'>0</TD></TR>
  15.              <TR><TD align='center'>3</TD><TD align='center'>1</TD><TD align='center'>0</TD></TR>
  16.              <TR><TD align='center'>2</TD><TD align='center'>134</TD><TD align='center'>0</TD></TR>
  17.              <TR><TD align='center'>5</TD><TD align='center'>28</TD><TD align='center'>0</TD></TR>
  18.              <TR><TD align='center'>1</TD><TD align='center'>103</TD><TD align='center'>0</TD></TR></TABLE>
  19. </TD></TR>
  20. <TR><TD align='center'><INPUT type='SUBMIT' name='deleteBilan' value='Supprimer le bilan'></TD></TR></TABLE><br>')


 
OUps... je crois que j'ai compris ce qui cloche...
C'est les ' qui font confusion avec la fin de la chaîne et du coup une erreur est générée par ce qui suit...
 
hum... bon, je vais essayer de voir comment je peux éviter ça, sachant que je peux pas non plus mettre de " parce que c'est ce qui entoure l'ordre sql... Enfin bref, si vous avez une solution évidente et logique (qui m'échappe), je suis preneur...
Sinon, pour le fait d'ouvrir/fermer la connexion Mysql à chaque fois, je me suis toujours dit que c'était très long puisque en proportion du temps total lors d'une communication avec MySql, l'ouverture/fermeture de la connexion prend en moyenne 50% du temps total, ce qui est vraiment énorme, mais un prof de l'IUT nous avait dit que c'était mieux de faire comme ça ... :??: (va savoir...) Maintenant, si certains d'entre vous en savent plus long, je serais ravi d'étendre mes faibles connaissances. :)
 
Dernières choses, cette methode de connexion c'était pour du JAVA, peut être que c'est ça la différence... :heink:
 
Tant que j'y suis, j'en profite :
Si vraiment y'a des pros du php, j'ai mis un get_microtime au début et la fin de chaque page, et j'ai aussi une variable qui compte les requêtes effectués.
 
C'est bien beau de savoir qu'une page est générée en 0,009 secondes, mais comment je sais si mon code est efficace ou pas, puisque le temps de calcul est quand même proportionnel à la quantité de choses qu'on fait dans le code... En bref, comment savoir si mon code peut encore être amélioré ou pas.
 
Merci bien.

Reply

Marsh Posté le 07-01-2006 à 23:07:23    

Pour l'insertion c'est bon, j'ai trouvé.
 
Avant je faisais :
$sql = "INSERT INTO bilan VALUES ('".$tabDef["id"]."', '".$str."')";
 
Maintenant je fais :
$sql = 'INSERT INTO bilan VALUES ("'.$tabDef["id"].'", "'.$str.'" )';
 
(j'ai inversé les " et les ')
Mais pour le reste vous pouvez peut être toujours m'aider... :-)

Reply

Marsh Posté le 07-01-2006 à 23:38:45    

Utilise mysql_real_escape_string pour l'insertion. C'est fait pour ça, et en bonus ça te protège la requête (pour le cas où ce que tu insères puisse venir de l'utilisateur). Ce sera mieux qu'un tel bidouillage avec les ' et les ".
 
Pour la connexion/déconnexion MySQL, je suis pas un spécialiste du tout mais y'a strictement aucun intérêt à ouvrir/refermer à chaque fois (à part rallonger le temps du script et flooder le serveur MySQL), donc je pense qu'il serait sage d'éviter.
 
Quant au temps de script, je n'en ai aucune idée et ça doit de toute façon dépendre du serveur et de pas mal de paramètres. Poste plutôt du code, et on pourra peut-être te dire si c'est optimisable.


Message édité par sielfried le 07-01-2006 à 23:39:41

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-01-2006 à 16:02:43    

Merci beaucoup de ces conseils.
 
Quand mon site sera terminé, je vous posterai mon code (enfin y'a quand même une vingtaine de pages avec des centaines de lignes par page...), c'est pas énorme mais je pense que le code en lui même est déjà pas trop mal optimisé.
 
Le coup de la connexion, ben j'ai voulu essayer pour ce site de mettre en application ce qu'on m'avait appris, mais c'est vrai que "on line", le temps de chargement est quand même bien diminué. C'est cool.
 
Bon, je pense que je vais mettre [reglé] dans le titre et si je veux vous montrer mon code, je posterai un nouveau sujet, je pense que c'est mieux ainsi.
 
Merci encore.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed