2010-08-03 10 views
0

Je ne sais pas si mon anglais suffit pour expliquer ce droit: J'ai fait un formulaire qui a besoin de 4 ou 5 pages jusqu'à la soumission finale. À chaque modification, le message est ajouté à la nouvelle page en tant que champ masqué et un nouveau script est appelé.Formulaire sur plusieurs pages - L'URL doit rester

<form method="post" action="form4.php"> 

Mon problème est que je ne veux pas le navigateur pour afficher l'URL pour le nouveau script et de garder, idéalement, il à l'adresse d'origine. Je ne connais pas les bons termes pour rechercher sur google ou ici pour une solution. Peut-être que vous pouvez me donner un indice sur la façon d'accomplir cela?

Répondre

0

pense que je trouve une autre solution et que vous souhaitez partager:

la solution avec l'interrupteur et la solution ajax me fait penser à la façon de résoudre ce plus facile. pourquoi ne pas faire le formulaire sur une page et cacher les différentes parties. ce qui était avant un bouton pour soumettre la pièce est maintenant un bouton pour cacher la partie précédente et montrer ensuite.

 <script type="text/javascript"> 
     window.addEvent('domready', function() 
      { 
      $$('.blau').set('text', 'Erkennen Sie die Heilpflanze?'); 
      $('page_2').slide('hide'); 
      $('page_3').slide('hide'); 
      $('page_4').slide('hide'); 
      $('page_5').slide('hide'); 
      var togglePrefix = 'toggle_', boxPrefix = 'page_', emptyPrefix = ''; 
      $$('.submit_box a').addEvent('click', function(e) 
       { 
       e.stop(); 
       var id = $(this.get('id').replace(togglePrefix,emptyPrefix)); 
       var id_new = parseInt($(this).get('id').replace(togglePrefix, emptyPrefix)) + 1; 
       var next = ('page_'+id_new); 
       var id_old = $(this.get('id').replace(togglePrefix,boxPrefix)); 
       $(id_old).set('slide', {duration: 'long', transition: 'linear'}); 
       $(id_old).slide('out'); 
       $(next).slide('in'); 

       if (next == 'page_1') 
        { 

        } 
       if (next == 'page_2') 
        { 

        } 
       if (next == 'page_3') 
        { 

        } 
       if (next == 'page_4') 
        { 
        $$('.blau').set('text', '....und die letzte ist?'); 
        } 
       if (next == 'page_5') 
        { 
        $$('.blau').set('text', 'Nur noch ein paar Daten:'); 
        } 
       }); 
      }); 
     </script> 

le code html:

<form id="gewinnspiel" name="gewinnspiel" method="post" action="<?=$_SERVER[PHP_SELF]; ?>"> 
<div id="page_1"> 
    <div class="inhalt-gewinn"> 
     <div class="gewinn_bild"></div> 
     <div class="gewinn_form"> 
       <div class="input_box"> 
        <div><input type="radio" name="frage1" value="Kamille" /><span>Kamille</span></div> 
        <div><input type="radio" name="frage1" value="Kaktus" /><span>Kaktus</span></div> 
        <div><input type="radio" name="frage1" value="Krokus" /><span>Krokus</span></div> 
       </div> 
       <div class="submit_box"><a id="toggle_1" class="frage">nächste Frage...</a></div> 
     </div> 
     <div class="gewinn_werbung"></div> 
    </div> 
</div> 

<div id="page_2"> 
    <div class="inhalt-gewinn"> 
     <div class="gewinn_bild"></div> 
     <div class="gewinn_form"> 
      <div class="input_box"> 
       <div><input type="radio" name="frage2" value="Ringelblume" /><span>Ringelblume</span></div> 
       <div><input type="radio" name="frage2" value="Rotklee" /><span>Rotklee</span></div> 
       <div><input type="radio" name="frage2" value="Ringelkraut" /><span>Ringelkraut</span></div> 
       </div> 
       <div class="submit_box"><a id="toggle_2" class="frage">nächste Frage...</a></div> 
     </div> 
     <div class="gewinn_werbung"></div> 
    </div> 
</div> 

<div id="page_3"> 
    <div class="inhalt-gewinn"> 
     <div class="gewinn_bild"></div> 
     <div class="gewinn_form"> 
      <div class="input_box"> 
       <div><input type="radio" name="frage3" value="Enzian" /><span>Enzian</span></div> 
       <div><input type="radio" name="frage3" value="Eisenkraut" /><span>Eisenkraut</span></div> 
       <div><input type="radio" name="frage3" value="Eiche" /><span>Eiche</span></div> 
       </div> 
       <div class="submit_box"><a id="toggle_3" class="frage">nächste Frage...</a></div> 
     </div> 
     <div class="gewinn_werbung"></div> 
    </div> 
</div> 

<div id="page_4"> 
    <div class="inhalt-gewinn"> 
     <div class="gewinn_bild"></div> 
     <div class="gewinn_form"> 
      <div class="input_box"> 
        <div><input type="radio" name="frage4" value="Wollblume" /><span>Wollblume</span></div> 
        <div><input type="radio" name="frage4" value="Tulpe" /><span>Tulpe</span></div> 
        <div><input type="radio" name="frage4" value="Rose" /><span>Rose</span></div> 
       </div> 
       <div class="submit_box"><a id="toggle_4" class="frage">nächste Frage...</a></div> 
     </div> 
     <div class="gewinn_werbung"></div> 
    </div> 
</div> 

<div id="page_5"> 
    <div class="inhalt-gewinn"> 
     <div class="gewinn_bild"></div> 
     <div class="gewinn_form"> 
      <div class="input_box_ende">  
       <?php echo '<input name="date" type="hidden" value="', time(), '" />'; ?> 
       <div class="nosee">eMail:<input name="email" type="text" id="email" value="<?=$_POST['email']; ?>" size="30" /></div> 
       <div><span>Vorname:</span><input type="text" name="vorname" value="<?=$_POST['vorname']; ?>"/></div> 
       <div><span>Nachname:</span><input type="text" name="nachname" value="<?=$_POST['nachname']; ?>"/></div> 
       <div><span>Strasse:</span><input type="text" name="strasse" value="<?=$_POST['strasse']; ?>"/></div> 
       <div><span>Ort:</span><input type="text" name="ort" value="<?=$_POST['ort']; ?>"/></div> 
       <div><span>PLZ:</span><input type="text" name="plz" value="<?=$_POST['plz']; ?>"/></div> 
       <div><span>eMail:</span><input type="text" name="imehl" value="<?=$_POST['imehl']; ?>"/></div> 
      </div> 
      <div class="submit_box"><input id="submit" name="senden" type="submit" value="Senden" /></div> 
      </form> 
     </div> 
    </div> 
</div> 

travaillant tous! merci pour l'inspiration!

0

Si l'action du formulaire est form4.php, vous ne pouvez pas modifier l'URL du formulaire. Cependant, vous pouvez effectuer une redirection immédiatement après avoir traité les données de la publication vers l'URL à laquelle vous voulez que l'utilisateur se trouve.

Alternativement, vous pouvez modifier vos actions de formulaire afin qu'ils publient tous sur la même page et autorisent simplement plusieurs types de publication dans votre PHP.

+0

quand je vais au deuxième site de formulaire je stocke les résultats du premier site dans des champs cachés. si je fais une redirection je suppose que mes champs cachés sont perdus? – Arwed

0

Vous pouvez utiliser Ajax et transmettre des données de la forme au script PHP et charger un nouveau formulaire. Ou vous pouvez passer argument (caché ou non) dans le fichier:

<form action="form.php?p=1" method="post"> 
... 
</form> 

paramètres cachés:

<form action="form.php" method="post"> 
<input type="hidden" value="4" name="p"> 
... 
</form> 

En fonction de la valeur de p vous chargez la forme appropriée et faire des choses avec le reste des données.

+0

une solution très élégante, mais jusqu'à présent, j'ai utilisé ajax seulement pour afficher du contenu supplémentaire dans certains conteneurs div mais pas pour modifier un formulaire ...mais THX pour la suggestion – Arwed

0

Chargez votre site php à l'intérieur d'un iframe dans quelques page .. L'URL de cette page restera toujours.

+0

cela me semble la solution la plus pratique mais comme je n'ai jamais travaillé avec iframes j'ai un noeud gordian dans ma tête .... je suppose que la première page du formulaire doit être dans l'iframe et si je change à la page suivante, il charge à l'intérieur sans changer l'URL? – Arwed

2

Une autre option consiste à gérer le formulaire par le même script par étapes.

<form action="formhandler.php" method="post"> 
<input type="hidden" name="form_stage" value="1" /> 
.... 
</form> 

et dans le formhandler.php:

switch($_POST['form_stage']) { 
    case 5: 
     // handle the stage 5 stuff here 
     break; 
    case 4: 
     // handle stage 4 stuff here, output form for stage 5 
     break; 
    case 3: 
     // handle stage 3 stuff here, output form for stage 4 
     break; 
    case 2: 
     // ditto 
     break; 
    case 1: 
    default: 
     // display initial form here 
} 

Bien sûr, vous ne devez pas utiliser un interrupteur pour cela. Une longue séquence de if/else fonctionne aussi bien, elle se résume à la préférence personnelle/à la complexité du code. Mais ce workflow de base vous permet de garder la même URL et d'afficher plusieurs formes différentes sans devoir recourir à AJAX/javascript.

+0

2 questions à cette suggestion: 1er: je suppose que je dois écrire la nouvelle valeur de form_stage sur soumettre au champ caché ?? 2ème: jusqu'à présent, j'ai stocké les résultats des pages précédentes dans des champs cachés. cette méthode je ne sais pas comment je peux accomplir ici ... je ne veux pas aller le chemin avec des sessions. – Arwed

+0

@Arweb Il est préférable de stocker les données dans une session. Pour permettre à l'utilisateur d'avoir plusieurs formulaires ouverts en même temps, vous pouvez transmettre un identifiant de conversation, tout comme vous passez la page. – Artefacto

+0

Le stockage des données intermédiaires dans la session est une option, mais vous devez veiller à ce que si un utilisateur commence à remplir deux copies du formulaire, que les deux copies différentes ne se piétinent pas les unes les autres. Si vous avez besoin de vous prémunir contre cela, vous devrez prendre des mesures spéciales dans la session ET le formulaire pour identifier la copie des données où aller, ou tout stocker dans des champs cachés au fur et à mesure que l'utilisateur progresse. –

Questions connexes