Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2495 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1278596
Malta
Posté le 07-01-2006 à 11:21:53  profilanswer
 

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
mood
Publicité
Posté le 07-01-2006 à 11:21:53  profilanswer
 

n°1278615
sielfried
Posté le 07-01-2006 à 12:05:08  profilanswer
 

Fait voir le code d'insertion complet.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1278622
Malta
Posté le 07-01-2006 à 12:16:50  profilanswer
 

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
n°1278642
sielfried
Posté le 07-01-2006 à 12:39:46  profilanswer
 

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
n°1278648
Malta
Posté le 07-01-2006 à 12:45:25  profilanswer
 

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
n°1278654
sielfried
Posté le 07-01-2006 à 12:51:33  profilanswer
 

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


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1278660
Malta
Posté le 07-01-2006 à 13:03:04  profilanswer
 

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

n°1278689
sielfried
Posté le 07-01-2006 à 13:49:07  profilanswer
 

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
n°1278693
smaragdus
whores, drugs & J.S. Bach
Posté le 07-01-2006 à 14:03:19  profilanswer
 

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
n°1278702
sielfried
Posté le 07-01-2006 à 14:18:12  profilanswer
 

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
mood
Publicité
Posté le 07-01-2006 à 14:18:12  profilanswer
 

n°1278876
Malta
Posté le 07-01-2006 à 22:25:58  profilanswer
 

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.

n°1278888
Malta
Posté le 07-01-2006 à 23:07:23  profilanswer
 

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... :-)

n°1278900
sielfried
Posté le 07-01-2006 à 23:38:45  profilanswer
 

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
n°1279146
Malta
Posté le 08-01-2006 à 16:02:43  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
modification de valeur binaire en mysql ?? [resolu]Probleme en C#: Ouvrir une Form a partir d'un bouton d'une autre Form
Gros et bizzare problemeProbleme avec Dreamweaver 8 (Includes php)
4 Listes déroulantes liées avec accès MySQL[MySQL] Optimisation d'un "not in"
[JAVA] probleme d'affichage caracteres spéciaux[Eclipse] Probleme de VerifyError
probleme avec dev cppprobleme variables avec gmdate
Plus de sujets relatifs à : [REGLE] Problème d'insertion dans une base MySql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR