Requete sql fonctionne sous safari mais pas sous firefox

Résolu
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011 - 3 sept. 2009 à 18:37
zpef Messages postés 30 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 janvier 2011 - 4 sept. 2009 à 20:28
Bonjour a tous,

Voici la partie du code qui ne fonctionne bizarement pas sous FF :

$command = "UPDATE `bms_db`.`quotation` SET ";
$command .= "`customer`='".$company->name."', ";
$command .= "`estim`='".mysql_real_escape_string($_POST['estim'])."' ";
$command .= "WHERE `quotation`.`id`='".$id."' ";
$sqlQuery = mysql_query($command) or die(mysql_error());

C est une requete toute simple qui fonctionne parfaitement sous safari. Je n ai pas teste sous IE etant sur mac.

J ai aussi fait un test sous FF en ajoutant un echo $command; juste avant l execution de la requete, puis j ai copie/colle le resultat dans phpMyAdmin, et ca a bien fonctionne.
Quelqu un aurait une idee car j avoue que depuis plusieurs heures de recherche et de modif je n ai rien trouve jusque la.

Merci.

17 réponses

cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
4 sept. 2009 à 09:34
Ok j ai trouve :)
J ai ajoute une ligne juste apres l execution de la requete qui enregistre la valeur de la variable $command dans un fichier texte.
J ai pu constate que lorsque je valide mon formulaire sur safari, mon log contient
$command = "UPDATE `bms_db`.`quotation` SET " `customer`='toto', `estim`='bidule' WHERE `quotation`.`id`=1";
alors que dans FF j ai :
$command = "UPDATE `bms_db`.`quotation` SET " `customer`='toto', `estim`='bidule' WHERE `quotation`.`id`=1";
$command = "UPDATE `bms_db`.`quotation` SET " `customer`='', `estim`='' WHERE `quotation`.`id`=";

=> il envoie 2 fois la requete avec des varibles vides la seconde fois.
J ai donc mis une condition if (!empty($customer)) et la tout fonctionne.

Je confirme aussi ce que tu disais precedement, que ca ne pouvait pas venir du navigateur en lui meme, car meme sur safari, j ai eu la meme erreur en testant sur un autre pc du boulot.
Ca depend peut etre donc de la config du pc, ou des preferences du navigateur, ...
Bref, tout fonctionne parfaitement maintenant, merci encore pour tes reponses.

Mimim
3
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
3 sept. 2009 à 20:53
Bonsoir,

Une reque SQL dans un sctipt PHP ne connait même pas le navigateur en face. Donc le problème ne peut absolument pas provenir du navigateur.
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
3 sept. 2009 à 21:38
Je suis d accord mais alors d ou vient le probleme???

Si ca ne vient pas du navigateur, alors pourquoi ca fonctionne sur Safari et pas sur FF?? (j ai essaye sur plusieurs configs/pc/mac differents et c pareil)
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
3 sept. 2009 à 21:44
ça ne provient surement pas d el arequête elle-même, puisque SQL se fout carrément d eton navigateur, mais quelque part dans ton interface, quelque chose de pas standard ou pas portable entre navigateurs, c'est plus fréquent qu'on le pense.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
3 sept. 2009 à 21:46
Je viens de tester une autre chose, toujours en faisant l' echo $command; avant la requette, j ai copie le resultat, puis j ai modifie le code en collant celui ci dans la variable $command, et la ca fonctionne.

En gros, quand je mets ds mon code :
$command = "UPDATE `bms_db`.`quotation` SET ";
$command .= "`customer`='".$company->name."', ";
$command .= ... etc...
$sqlQuery = mysql_query($command) or die(mysql_error());
-> ca ne marche pas sous FF
mais si je mets :
$command = "UPDATE `bms_db`.`quotation` SET " `customer`='toto', `estim`='bidule' WHERE `quotation`.`id`=1";
$sqlQuery = mysql_query($command) or die(mysql_error());
-> la ca fonctionne ;(
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
3 sept. 2009 à 21:49
Je sais bien que ca ne vient pas de la requete puisque quand je copie le resultat de celle ci dans phpMyAdmin, ca marche.
Et d apres mon dernier test du message precedent, le navigateur n a rien de particulier qui pourrait empecher la requete de fonctionner puisque ca marche quand la variable $command ne contient aucune autre variable
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
3 sept. 2009 à 21:52
Il faut tracer dès l'entrée du script, tes $_GET, $_POST, etc...
la requête en elle même et cette partie là ne peuvent être en cause.

C'et sdonc dans l'interface de ton script ou dans celle d el'appelant qu ele problème croos-navigateur existe.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 sept. 2009 à 14:22
Salut,

J'ai comme l'impression qu'en faisant ça (ajout de if (!empty...) tu masques un problème plutôt que de le résoudre.
Il n'y a vraisemblablement pas de raison valable pour que la requête soit appelée 2 fois, alors autant la traquer et la corriger sous peine de rencontrer d'autres bugs un jour ou l'autre.

Cordialement,


Kohntark -
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
4 sept. 2009 à 15:35
Bonjour,

Exactement, le problème se situe en amont, le masquer via un if() ne fait que déplacer le bug ailleurs. Il y a vraisemeblablement une anomalie soit dans le spremières lignes du script soit dans l'interface de l'appelant.

Mais là, une bonne séance de debugger (XDebug) est nécessaire :)
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
4 sept. 2009 à 18:23
Je suis bien d accord avec vous, mais si je dois decortiquer le pc sur lequel j ai cette erreur j ai pas fini...
Quand je code chez moi sur mac, je n ai aucune erreur, la requete ne s execute pas deux fois, et sur mon pc du boulot non plus (sur safari). Mais l erreur apparait sur un pc en particulier vieux de 5 ans avec une pauvre config et un basique ie6...

C est peut etre windows lui meme, ou les IE/Safari pour windows qu il faudrait debuguer!

D ailleurs IE devrait etre banni quand je vois les codes supplementaire a mettre pour les stylesheets css qui ne sont pas supportes, ca me prend bien la tete de faire une version expres pour ce navigateur de .....
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 sept. 2009 à 20:05
Je comprends bien que tu n'ai pas envie de passer plus de temps là dessus, mais je reste persuadé que le jeu en vaut la chandelle. Il est presque certain que ce bug remontra un jour ou l'autre, et il sera surement plus complexe à trouver (ajout de code, etc ...)
Ce n'est pas windows qu'il faut debbuger, ni même les browsers, mais ton code.

Cordialement,


Kohntark -
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
4 sept. 2009 à 20:21
Ok, alors voici la partie exacte du code qui pose probleme, donc si tu trouve le bug, n hesite pas :
if((isset($_POST)) && !empty($_POST['projectid'])) {
$command = "UPDATE `bms_db`.`quotation` SET ";
$command .= "`projectid`='".mysql_real_escape_string($_POST['projectid'])."', ";
$command .= "`estim_date`='".mysql_real_escape_string($_POST['estim_date'])."', ";
$command .= "`subject`='".mysql_real_escape_string($_POST['subject'])."', ";
$command .= "`duration`='".mysql_real_escape_string($_POST['duration'])."', ";
$command .= "`agency`='".mysql_real_escape_string($_POST['customer'])."', ";
$command .= "`note`='".mysql_real_escape_string($_POST['note'])."', ";
$command .= "`date_sign`='".mysql_real_escape_string($_POST['date_sign'])."', ";
$command .= "`extra`='".mysql_real_escape_string($_POST['extra'])."' ";
$command .= "WHERE `quotation`.`id`=".$_REQUEST['id'];
$sqlQuery = mysql_query($command) or die('SQL error
'.$command.'
'.mysql_error());
}


=> comme je l ai dit plus haut, c est une requete basique qui fonctionne tres bien sur certaines machine/navigateurs et pas sur d autre.

Pour info, toutes les variables des $_POST proviennent d une page php differente, c est un formulaire classique aussi, inutile de le coller ici, c est juste des inputs avec leur id et name...
Meme en excluant tout le reste de mon site en ne gardant que ces deux fichiers (form.php et result.php), ca bug sur ce fameux vieux pc avec safari, et sur mon pc de bureau avec FF.
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
4 sept. 2009 à 20:24
Comme dit précédemment, il y a plus de 99% de chances sur 100 pour que le vrai problème soit dans ton formulaire, en amont...

Que ce soit Firefox ou Safari, ces navigateurs sont très respectueux des standards et ils ne peuvent en aucun cas inférer avec le code PHP et encore moins SQL.

Si problèe il y a, c'est dans le formulaire probablement.
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
4 sept. 2009 à 20:25
oups, le code precedent est celui que j ai corrige pour ne plus avoir le bug...
il faut mettre if((isset($_POST))) { a la 1ere ligne (sans le && !empty pour que l erreur se produise.
0
cs_mimimou Messages postés 48 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 31 août 2011
4 sept. 2009 à 20:27
Ok, je ne te promet rien mais quoi qu il en soit, j ai peu de temps pour finir ce site, mais des que j aurais un peu plus de temps, j essayerais de me repencher sur le probleme et je posterais les infos si je trouve la source du probleme...
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
4 sept. 2009 à 20:27
Si le $_POST est en empty avec certaines configurations logicielles clientes, c'est que dans ton formulaire, il doit y avoir des choses pas vraiment portables (ou utilisées sans regarder d'abord si le navigateur en question les supporte dans telle ou telle version)...

un "bug" de ce type provient toujours d'un manque de contrôle quelque part dans le source, pas d'autre chose.
0
zpef Messages postés 30 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 26 janvier 2011
4 sept. 2009 à 20:28
Effectivement, je penche pour un pb js.... Quelles actions sont effectuées lorsque tu postes ton form ?
0
Rejoignez-nous