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

  FORUM HardWare.fr
  Programmation
  PHP

  submit fonctionne sous Chrome mais pas sous FF et IE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

submit fonctionne sous Chrome mais pas sous FF et IE

n°2156045
nana92
Posté le 08-09-2012 à 18:44:13  profilanswer
 

Salut à tous,
 
Je suis nouvelle sur le forum et je suis débutante en PHP.
J'ai un petit soucis. C'est pourquoi je me tourne vers vous, en espérant trouver la solution.
J'ai cherché sur le forum si un problème similaire au mien existait déjà, mais je n'ai pas trouvé. Veuillez donc m'excuser si je répète le même topic ...
 
J'ai écrit un petit script PHP et le problème est que mon formulaire fonctionne sous Chrome mais pas sur IE et FF.
 
Voici le code HTML:
/*************************************************/
<form action='../auberge/etatCommandeTermine.php' method='GET'>  
  <p>
  <input type='hidden' name='id' id='id' value='".$b_id."' />
  </p>
  <p>
  <input type='submit' name='action' value='Termine' id='send'/>
  </p>  
</form>

/*************************************************/
 
Et voici la requete:
/*************************************************/
<?php
 mysql_connect("localhost", "root", "" );
 mysql_select_db("vanadium" );mysql_query("SET NAMES 'UTF8'" );
 
 if (isset($_GET['action']))
 {  
  $b_id=$_GET['id'];
  $etat=mysql_query('UPDATE historique SET etat=\'termine\' WHERE id=\''.$b_id.'\'');
 }
 
 /*redirection du visiteur vers la page Historique*/
 header('Location:historique.php');
?>

/******************************************************************/
 
 
Quand je clique sur le bouton SUBMIT sous FF ou IE, il ne se passe rien !
Quand je suis sous Chrome, la base de donnée est bien modifiée et la page est rafraîchie.
 
Quelqu'un peut-il m'aider ?
 
Il faut que je fasse marcher mon programme sous FF ...
 
Merci d'avance
 
Nana92
 

mood
Publicité
Posté le 08-09-2012 à 18:44:13  profilanswer
 

n°2156063
xaeon
Profil: TT
Posté le 08-09-2012 à 23:32:46  profilanswer
 

Hello,
 
Si ca fonctionne sous Chrome c'est que le sain esprit est avec toi, ou bien que tu ne donnes pas toutes les clés pour résoudre le problème.
 
Ainsi la partie PHP semble fonctionner, sous IE8 et superieur de mon coté, mais ton formulaire me semble des plus étranges. Est il le résultat d'un echo? Dans le cas contraire, je vois mal comment le champ input#id pourrait avoir une valeur.
 
De mon coté, voici ce qui fonctionne sous IE8:

Code :
  1. <?php
  2. $b_id = 1;
  3. ?>
  4. <form action='./test.php' method='GET'>
  5.         <p>
  6.                 <input type='hidden' name='id' id='id' value='<?php echo $b_id; ?>' />
  7.         </p>
  8.         <p>
  9.                 <input type='submit' name='action' value='Termine' id='send'/>
  10.         </p>
  11. </form>


 
Et là quelque soit mon navigateur, aucun souci de mise à jour en BDD.
 
Pour info, ça fonctionne aussi si je fais

Code :
  1. <?php
  2. $b_id = 1;
  3. echo "<form action='./test.php' method='GET'>
  4.         <p>
  5.                 <input type='hidden' name='id' id='id' value='".$b_id."' />
  6.         </p>
  7.         <p>
  8.                 <input type='submit' name='action' value='Termine' id='send'/>
  9.         </p>
  10. </form>";
  11. ?>

n°2156067
nana92
Posté le 09-09-2012 à 00:53:43  profilanswer
 

Bonsoir Xaeon,
 
Merci beacoup pour ta réponse.  
 
En fait, je dois afficher des lignes de la BDD. Puis j'aimerai pouvoir effectuer la mise à jour de chaque ligne, ligne par ligne.
 
Voilà le script complet de la partie HTML:

Code :
  1. <?php
  2. //Lecture de l'historique  
  3. $retour_historique = mysql_query("SELECT * FROM historique WHERE impulseur = '$impulseur' $periode_temps ORDER BY date DESC $limite" ) or die(mysql_error());
  4. //Fermeture de la connexion
  5. mysql_close();
  6. //On teste si le retour n'est pas nul
  7. if (mysql_num_rows($retour_historique) > 0)
  8. {
  9. while ($donnees = mysql_fetch_array($retour_historique) )
  10. {
  11.  $b_id=$donnees['id'];
  12.  if ($donnees['etat']!='termine'){
  13.  echo "
  14.  <form action='../auberge/etatCommandeTermine.php' method='GET'>
  15.  <td>
  16.  <p>
  17.  <input type='hidden' name='id' id='id' value='".$b_id."' />
  18.  </p>
  19.  </td>
  20.  <td>
  21.  <p>
  22.  <input type='submit' name='action' value='Termine' id='send'/>
  23.  </p>
  24.  </form>
  25.  ";
  26.  } //fin du 'if'    
  27. }
  28. }
  29. else
  30. {
  31. echo "Il n'y a pas de consommation vérifiant tes parametres de filtres ";
  32. }
  33. ?>


 
Et voici le script complet de la partie PHP
 

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" );
  3. mysql_select_db("vanadium" );mysql_query("SET NAMES 'UTF8'" );
  4. if (isset($_GET['action']))
  5. {
  6.  $b_id=$_GET['id'];
  7.  $etat=mysql_query('UPDATE historique SET etat=\'termine\' WHERE id=\''.$b_id.'\'');
  8. }
  9. /*redirection du visiteur vers la page Historique*/
  10. header('Location:historique.php');
  11. ?>


 
Mais le problème persiste: ca marche sous Chrome, mais pas sur Firefox et IE ...
Peut-être que la boucle While est à l'origine du problème ?
Meme quand je donne une valeur constante à '$b_id', ca ne marche pas ...
 
Je suis perdue ...


Message édité par nana92 le 09-09-2012 à 01:00:04
n°2156070
xaeon
Profil: TT
Posté le 09-09-2012 à 01:48:29  profilanswer
 

Donc, on va tenter de voir que qui ne va pas, et également voir ce qu'on peut faire pour améliorer la lisibilité, je pars du principe que tu as un PHP5 installé avec ses extensions standard

Code :
  1. <?php
  2. // Création d'une instance PDO (elle gère la connexion en BDD)
  3. $db = new PDO('mysql:dbname=vanadium;host=localhost', 'root', '', array(
  4.     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')
  5. );
  6. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
  7. // On récupère l'historique
  8. // un doute ici sachant qu'à aucun moment on a déclaré/valorisé $impulseur, $periode_temps ou encore $limite mais on va dire que la requète passe
  9. $sql = "
  10.     SELECT
  11.         *
  12.     FROM
  13.         historique
  14.     WHERE
  15.         impulseur = '$impulseur' $periode_temps
  16.     ORDER BY
  17.         date DESC $limite
  18. ";
  19. $statement = $db->query($sql);
  20. ?>
  21. <html>
  22. <head></head>
  23. <body>
  24. <div>
  25. <?php
  26. // On parcours le résultat, à la facon d'un while/fetch_array mais en bien plus intuitif à mon avis, en plus si la requête ne renvoi aucune ligne, on a plus besoin du test mysql_num_rows
  27.     foreach($statement as $row){
  28.         if($row->etat != 'termine'){
  29. ?>
  30.     <p>
  31.          Pour passer l'état à "TERMINER" de je sais pas quoi mais dont l'id est <?php echo $row->id; ?>, cliquez sur le bouton suivant
  32.         <button><a href="./scriptPourUpdater.php&id=<?php echo $row->id; ?>">Terminer</a></button>
  33.     </p>
  34. <?php
  35.         }
  36.     }
  37. ?>
  38. </div>
  39. </body>
  40. </html>
 

De l'autre coté, ton script qui doit faire le traitement (que j'ai appelé ici scriptPourUpdater.php et que j'ai placé dans le même dossier)

Code :
  1. // Même principe pour PDO
  2. $db = new PDO('mysql:dbname=vanadium;host=localhost', 'root', '', array(
  3.     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')
  4. );
  5. $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
  6. // On prépare le traitement
  7. if(isset($_GET['id']){
  8.     // On est jamais trop prudent, un id étant le plus souvent un entier, un petit coup de intval() ne lui fera pas de mal
  9.     $id = intval($_GET['id']);
  10.     // De même un id est toujours superieur à 0 (si c'est un entier et que le système est bien foutu...)
  11.     if($id > 0){
  12.         // On prépare notre requète
  13.         $sql = "
  14.             UPDATE
  15.                 historique
  16.             SET
  17.                 etat = 'termine'
  18.             WHERE
  19.                 id = ".$id;
  20.         $statement = $db->exec($sql);
  21.     }
  22. }
  23. // On redirige vers je suppose la page où on a la liste
  24. header('Location:historique.php');


Avec ça normalement, on passe sous n'importe quel navigateur. Pense à bien vérifier si les requêtes qui sont générés et/ou jouées sont bien celles que tu souhaites, vérifie aussi l'état de test variables (echo, print_r(), var_dump()) de temps en temps pour connaitre leur valeur à un instant t pour comprendre ce qui se passe dans ta boucle.

 

De même, ne te complique pas la vie avec des forms html lorsqu'un simple lien permet de faire l'action demandée, réserve ça à la saisie d'information.


Message édité par xaeon le 09-09-2012 à 01:53:00
n°2156093
nana92
Posté le 09-09-2012 à 12:50:27  profilanswer
 

Merci pour ta réponse Xaeon.
 
J'ai essayé ce que tu m'as dit mais ca ne fonctionne otujours pas:
-SOUS FIREFOX:
Le lien "Terminer"  n'est pas cliquable. Et quand je colle l'adresse suivante dans la barre d'adresse:

Code :
  1. http://localhost/Vanadium_Test_Cob [...] &id=299794


J'obtien le message d'erreur suivante:  

Code :
  1. Not Found
  2. The requested URL /Vanadium_Test_Cobaye/auberge/etatCommandeTermine.php&id=299794 was not found on this server.


 
-Sous Chrome:
J'obtiens le même message d'erreur, sauf que le lien est cliquable.
 
NB: l'id 299794 existe pourtant bien dans la base de données  
 
 :??:

n°2156094
nana92
Posté le 09-09-2012 à 12:54:07  profilanswer
 

J'ai anvancé un ptit peu.
 
En fait, dans cette adresse:

Code :
  1. Not Found
  2. The requested URL /Vanadium_Test_Cobaye/auberge/etatCommandeTermine.php&id=299794 was not found on this server.


 
Il faut remplacer le '&' par '?'.
 
Le problème est que:
-Sous FIREFOX: le bouton "Terminer" n'est pas cliquable ....
 
Pourtant sous Chrome, le bouton est bel et bien cliquable et la mise à jour s'effectue correctement
 
Help please  
 
 :??:

n°2156097
gatsu35
Blablaté par Harko
Posté le 09-09-2012 à 13:08:07  profilanswer
 

j'aurais dit que le input submit qui se nomme action ça peut poser un peu problème en JS

Message cité 1 fois
Message édité par gatsu35 le 09-09-2012 à 13:08:14

---------------
Blablaté par Harko
n°2156098
nana92
Posté le 09-09-2012 à 13:11:10  profilanswer
 

J'ai remplacé le Bouton par du texte et là je peux cliquer sur le lien sous Firefox.
 
Merci beaucoup pour ton aide Xaeon.
 
C'est bizarre quand même le fait de ne pas pouvoir cliquer sur un Bouton ...
 
Si tu as des idées, je suis preneur :D
 
Encore merci

n°2156099
nana92
Posté le 09-09-2012 à 13:13:02  profilanswer
 

gatsu35 a écrit :

j'aurais dit que le input submit qui se nomme action ça peut poser un peu problème en JS


Merci pour ta réponse ...
Personnellement, je trouve ça très bizarre ...  
Avec un lien Text ca marche
Avec un <button> ca ne marche pas ...


Message édité par nana92 le 09-09-2012 à 13:17:58
n°2156111
xaeon
Profil: TT
Posté le 09-09-2012 à 14:52:30  profilanswer
 

Ah oui il était tard désolé, effectivement le 1er argument passé après un script php est bien précédé du symbole ? T_T  
 
Pour le <button> également, il n'est pas prévu pour accepter de lien, mais rien ne t'empeche de styliser ton lien pour qu'il ait l'apparence d'un bouton, et si le CSS n'est pas ton ami, un

Code :
  1. <a href="toto.php"><img src="button.png" alt="Terminer" /></a>

mood
Publicité
Posté le 09-09-2012 à 14:52:30  profilanswer
 

n°2156179
rufo
Pas me confondre avec Lycos!
Posté le 10-09-2012 à 11:01:30  profilanswer
 

foreach($statement as $row){
         if($row->etat != 'termine'){
 
Question bête : pourquoi ne pas rechercher directement dans la BD que les enregistrements ayant pour état "terminé" :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2156264
xaeon
Profil: TT
Posté le 10-09-2012 à 17:33:57  profilanswer
 

Ouai pas faux mais plutôt inversement rechercher les enregistrements ayant un status différent de 'terminé' :D
 
Après je dois dire que je n'ai pas pensé à regarder la cohérence des requêtes mais ton point est très juste :)

n°2156328
rufo
Pas me confondre avec Lycos!
Posté le 11-09-2012 à 10:16:52  profilanswer
 

Effectivement, j'avais pas fait gaffe au !=


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

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

  submit fonctionne sous Chrome mais pas sous FF et IE

 

Sujets relatifs
[Résolu]Table centré à tort dans IE@font-face qui ne fonctionne pas sur IE8
probléme page html qui fonctionne sur pc mais pas sur siteaffichage irrégulier sous chrome
pleasa aide :IE ne reconnait pas la css positionProblème de mise en place d'image en bouton submit
[PHP]$_SESSION qui disparaissent sous IECSS pas toujours prise en compte par IE ?
fonction mail() ne fonctionne pasScript Détection Windows ne fonctionne pas sous Seven
Plus de sujets relatifs à : submit fonctionne sous Chrome mais pas sous FF et IE


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