submit fonctionne sous Chrome mais pas sous FF et IE

submit fonctionne sous Chrome mais pas sous FF et IE - PHP - Programmation

Marsh Posté le 08-09-2012 à 18:44:13    

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
 

Reply

Marsh Posté le 08-09-2012 à 18:44:13   

Reply

Marsh Posté le 08-09-2012 à 23:32:46    

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. ?>

Reply

Marsh Posté le 09-09-2012 à 00:53:43    

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
Reply

Marsh Posté le 09-09-2012 à 01:48:29    

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
Reply

Marsh Posté le 09-09-2012 à 12:50:27    

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  
 
 :??:

Reply

Marsh Posté le 09-09-2012 à 12:54:07    

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  
 
 :??:

Reply

Marsh Posté le 09-09-2012 à 13:08:07    

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
Reply

Marsh Posté le 09-09-2012 à 13:11:10    

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

Reply

Marsh Posté le 09-09-2012 à 13:13:02    

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
Reply

Marsh Posté le 09-09-2012 à 14:52:30    

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>

Reply

Marsh Posté le 09-09-2012 à 14:52:30   

Reply

Marsh Posté le 10-09-2012 à 11:01:30    

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
Reply

Marsh Posté le 10-09-2012 à 17:33:57    

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

Reply

Marsh Posté le 11-09-2012 à 10:16:52    

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
Reply

Sujets relatifs:

Leave a Replay

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