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

  FORUM HardWare.fr
  Programmation
  PHP

  JavaScript et PHP : probléme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JavaScript et PHP : probléme

n°1662608
Adrienm
Posté le 23-12-2007 à 16:29:03  profilanswer
 

Bonjour à tous,
 
Je suis en train de réaliser mon portfolio en utilisant le php/mysql.
 
Dans la partie d'administration lorsque l'on valide les formulaires, on apporte les modifications à la base après vérification des données et je redirige l'utilisateur avec du javascript.
 
C'est là que ça bloque : une fois que toutes les vérifications sont faites et que les données ont été modifié dans la base, toute ma page est disparue et il ne reste que les éléments qui sont en dessous de l'instruction JavaScript ci-dessous!
 
Voici mon bout de code pour cette fonction :

Code :
  1. //Redirection
  2. $time = 2;
  3. echo "<script language='Javascript'>setTimeout('redirect(\'\')', $time*1000);</script>";
  4. //Fonction redirect() :
  5. function redirect(page) {
  6. document.location.href=page;
  7. }


 
Si je met ces quelques lignes en commentaires, tout marche correctement.
 
Merci à tous!


Message édité par Adrienm le 23-12-2007 à 16:31:28

---------------
Adrien
mood
Publicité
Posté le 23-12-2007 à 16:29:03  profilanswer
 

n°1662624
FlorentG
Unité de Masse
Posté le 23-12-2007 à 17:04:17  profilanswer
 

Les redirections en javascript, c'est très pas bien. Il faut le faire côté serveur en PHP justement, style :

Code :
  1. header('Location: http://tonsite.cm/page.html', true, 303);

n°1662625
FlorentG
Unité de Masse
Posté le 23-12-2007 à 17:04:38  profilanswer
 

Et je vois déjà venir un post avec "ça marche pas, j'ai une erreur "headers already sent"" :D

n°1662630
Adrienm
Posté le 23-12-2007 à 17:14:59  profilanswer
 

Oui, je sais mais le probléme c'est que lorsque l'on utilise "hearder('Location ..." il faut pas qu'il y a d'autres instructions auparavant...


---------------
Adrien
n°1662632
FlorentG
Unité de Masse
Posté le 23-12-2007 à 17:21:26  profilanswer
 

Adrienm a écrit :

Oui, je sais mais le probléme c'est que lorsque l'on utilise "hearder('Location ..." il faut pas qu'il y a d'autres instructions auparavant...


Il ne faut pas qu'il y ait d'envoi au navigateur, ce qui est logique... Ca ne devrait pas poser de problèmes, ou alors il y a un problème de conception ;)

n°1662669
Adrienm
Posté le 23-12-2007 à 20:21:44  profilanswer
 

Oui tout à fait d'accord avec la logique de la fonction "header".
Ce que je souhaiterai, c'est que lorsque le formulaire est soumis et validé (vérifications faites, et modifications de la BDD faites) un message du genre "Mise à jours réalisé avec succès, vous allez être redirigé, veuillez patienter" et ensuite du coup on redirige au bout de quelques secondes (d'où l'existance de la variable $time).


Message édité par Adrienm le 23-12-2007 à 20:22:20

---------------
Adrien
n°1662670
FlorentG
Unité de Masse
Posté le 23-12-2007 à 20:23:42  profilanswer
 

Nan c'est pas super. Mieux vaut une page fixe, avec le message, et des liens vers ce que veux faire l'utilisateur :)

n°1662672
Adrienm
Posté le 23-12-2007 à 20:30:06  profilanswer
 

Ah oui, c'est pas bête, tu viens de me donner une idée!
Merci je vais tester à quoi je pense et je vous tiens au courant...


---------------
Adrien
n°1662790
Adrienm
Posté le 24-12-2007 à 12:41:09  profilanswer
 

Je viens de tester pour faire une page de validation où l'utilisateur a le choix de faire ce qu'il veut... mais cela ne marche pas! En effet, je ne peux pas mettre le header car j'aurai forcement des instructions de test avant pour savoir si le formulaire a bien été rempli.
A ce compte là, moi tout ce que je veux faire, c'est quand le formulaire est soumis et valide, que la page actuelle se re-actualise (un F5 automatique).

 

Ce qui m'inquietète le plus, c'est qu'en JavaScript ça marchais très bien avant et je ne sais pas ce que j'ai fais et hop....  :??:

Message cité 1 fois
Message édité par Adrienm le 24-12-2007 à 12:43:05

---------------
Adrien
n°1663100
FlorentG
Unité de Masse
Posté le 26-12-2007 à 16:52:30  profilanswer
 

Adrienm a écrit :

En effet, je ne peux pas mettre le header car j'aurai forcement des instructions de test avant pour savoir si le formulaire a bien été rempli.


Non, les instructions ne devraient pas générer de sorties. D'après-toi, comment font les autres ? ;) Essaye sinon d'activer l'output buffering en début de script.

mood
Publicité
Posté le 26-12-2007 à 16:52:30  profilanswer
 

n°1663123
Johan
Posté le 26-12-2007 à 18:51:01  profilanswer
 

Une fois le formulaire soumis:
 

Code :
  1. // INSTRUCTION SQL
  2. mysql_query("INSERT INTO, UPDATE..... blablabla" );
  3. echo "mise à jour ok, redirection dans 5 secondes";
  4. echo "<meta http-equiv='refresh' content='5;url=tapage.php'>";


 
A+ ;)

Message cité 2 fois
Message édité par Johan le 26-12-2007 à 18:51:35
n°1663127
FlorentG
Unité de Masse
Posté le 26-12-2007 à 19:01:12  profilanswer
 

Johan a écrit :

Une fois le formulaire soumis:
 

Code :
  1. // INSTRUCTION SQL
  2. mysql_query("INSERT INTO, UPDATE..... blablabla" );
  3. echo "mise à jour ok, redirection dans 5 secondes";
  4. echo "<meta http-equiv='refresh' content='5;url=tapage.php'>";


 
A+ ;)


C'est exactement ce qu'il ne faut pas faire, du début à la fin :(

n°1663171
Adrienm
Posté le 26-12-2007 à 21:18:25  profilanswer
 

De toute façon mon code n'est pas composé ainsi... Voici un lien pour voir mon code.

 

Dans mon cas, j'ai quand même des instructions qui génére des sorties car mon en-tête est commune à toutes mes pages, je fais donc un include avant!

 

Voici mon code. Attention en le transformant en php, il y réside plusieurs erreurs car il manque le fichier de "lang" (mon application est multi-langues) et les différents fichiers appelés en en-tête de la page originale.


Message édité par Adrienm le 26-12-2007 à 21:18:48

---------------
Adrien
n°1663172
FlorentG
Unité de Masse
Posté le 26-12-2007 à 21:19:58  profilanswer
 

Y'a de l'idée dans ton truc, tu peux facilement faire en sorte de n'avoir pas de sortie si pas d'erreurs. Met un coup d'output buffering par exemple, et problème résolu :)

n°1663181
Johan
Posté le 26-12-2007 à 21:47:06  profilanswer
 

Developpe un peu, ta réponse n'est pas recevable pour moi :)

n°1663309
FlorentG
Unité de Masse
Posté le 27-12-2007 à 12:04:01  profilanswer
 

Oui milles excuses, j'étais un peu pressé :jap:

 
Johan a écrit :

Code :
  1. // INSTRUCTION SQL
  2. mysql_query("INSERT INTO, UPDATE..... blablabla" );
  3. echo "mise à jour ok, redirection dans 5 secondes";
  4. echo "<meta http-equiv='refresh' content='5;url=tapage.php'>";


 

Alors y'a déjà un problème, au niveau de l'ordre d'affichage : les meta ne peuvent qu'apparaître dans le <head>, le texte dans le <body>. Là t'as du mélange (même si les navigateurs sont gentils et vont corriger d'eux-même l'erreur).

 

Aussi, la redirection par meta refresh est fortement déconseillée, cf. Use standard redirects: don't break the back button! (anglais)

 


Le mieux pour traiter les formulaires, c'est découper en plusieurs fichiers. T'aura un fichier principal qui se charge de vérifier/afficher le formulaire, un fichier avec le formulaire en lui-même. On peut alors facilement rediriger vers une autre url en cas de succès, avec le bon code HTTP. Genre t'as un fichier pouet.php :

Code :
  1. <?php
  2.  
  3.  $errors = array();
  4.  $nom = '';
  5.  
  6.  if($_SERVER['REQUEST_METHOD'] === 'POST') {
  7.  
  8.      $nom = isset($_POST['nom']) ? $_POST['nom'] : '';
  9.  
  10.      if(strlen($nom) === 0) {
  11.        $errors[] = 'Vous devez entrer un nom';
  12.      }    
  13.  
  14.      if(count($errors) > 0) {
  15.          
  16.         require 'formulaire.php';
  17.  
  18.      } else {
  19.  
  20.          header('Location: http://tonsite.com/succes.php', true, 303);
  21.          exit;
  22.      }
  23.  
  24.  } else {
  25.  
  26.         require 'formulaire.php';
  27.  }


A toi de structurer comme tu veux, de rajouter quelques automatisations, notemment pour ce qui est de la validation des données.

 

Et après t'as ton formulaire.php :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.         <title>Pouet</title>
  6.     </head>
  7.     <body>
  8.         <form action="pouet.php" method="post">
  9.             <div>
  10.                 <label for="name">Votre nom</label><br />
  11.                 <input type="text" name="nom" id="name" value="<?php echo htmlspecialchars($nom, ENT_QUOTES, 'utf-8') ?>" />
  12.             </div>
  13.             <div class="actions">
  14.                 <input type="submit" value="Envoyer" />
  15.             </div>
  16.         </form>    
  17.     </body>
  18. </html>


Message édité par FlorentG le 27-12-2007 à 12:04:47
n°1663411
Johan
Posté le 27-12-2007 à 15:41:58  profilanswer
 

Merci j'en prends bonne note :)


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

  JavaScript et PHP : probléme

 

Sujets relatifs
Probleme urgent iframesProblème de requête d'insertion IIS/Access/ASP
[resolu][PHP/JS] Afficher div via selection dans une liste/radioProbleme JavaScript + Php + Mysql
Problème PHP/Javascript[php/javascript]petit probleme de chargement.
Problème liaison Javascript/PHP [Résolu]Php/javascript : problème de passage de paramètre par URL
[PHP / Javascript] Problème pour passer des paramètres!Probleme de menu déroulant (JavaScript ou PHP)
Plus de sujets relatifs à : JavaScript et PHP : probléme


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