Formulaire/ affichage x fois une page

pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -  
pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis dans le cas d'un formulaire et j'aimerais afficher une même page x fois en fonction du nombre d'élement entré par l'utilisateur.
J'ai une page 1 dans laquelle l'utilisateur entre le nombre d'élement (par exemple 3)
En cliquant sur le bouton OK, il arrive sur une page 2 (pour chaque élement il doit remplir 2 champs, mais j'aimerais qu'il puisse le faire en cliquant sur un bouton next en ayant ainsi une page pour chaque élement)
pour l'élément 1, il doit remplir les 2 champs.
En cliquant sur next il remplit les 2 champs pour l'élément 2
En cliquant sur next il remplit les 2 champs pour l'élément 3
Pourriz vous m'indiquer comment faire cela?
Merci
Configuration: Linux
Firefox 2.0.0.6

9 réponses

  1. doudi
     
    Bonjour,

    Voila une petit approche :

    <?php
    // récupération en post du nombre d'élément 
    $nb = $_POST['nbElement']; // nbElment correspond au name du champe input 
    $page = empty($_GET['page']) ? 1 : $_GET['page'];
    ?>
    <form action="test.php?page=<?php echo ($page + 1)?>" method="post">
      <p>
        <label>Champ 1</label>
        <input type="text" name="champ1" />
      </p>
      <p>
        <label>Champ 2</label>
        <input type="text" name="champ2" />
      </p>
      <p><input type="submit" value="Valider" /><p>
    </form>


    Des que tu arrives $nb c'est a dire le nombre d'élément tu fais une redirection.
    0
    1. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
       
      Bonjour,

      Merci de ta réponse.
      Après avoir cliqué sur Valider, je tombe sur http://xxx/test.php?page=2 mais rien ne s'affiche or je voudrais voir s'afficher
      champ 1:
      Champ 2:
      0
      1. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2 > pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention  
         
        Je viens de comprendre...
        Le problème est que je vérifie que mon champ nbElement soit rempli; comment chunter cette vérification dans le cas de mon deuxième affichage pour mon second élement?

        <?php
        // récupération en post du nombre d'élément
        $nb = $_POST['nbElement']; // nbElment correspond au name du champe input
        $page = empty($_GET['page']) ? 1 : $_GET['page'];
        ?>


        <?php
        //faut que les variables existent
        if(isset($_POST['nbElement']))
        {
        $nbElement = $_POST['nbElement'];
        //faut que tous les champs soient remplis
        if(!empty ($nbElement))
        {

        ?>
        <form action="test.php?page=<?php echo ($page + 1)?>" method="post">
        <p>
        <label>Champ 1</label>
        <input type="text" name="champ1" />
        </p>
        <p>
        <label>Champ 2</label>
        <input type="text" name="champ2" />
        </p>
        <p><input type="submit" value="Valider" /><p>
        </form>
        <?php
        }
        }
        ?>
        0
  2. doudi
     
    Je pensais que tu voulais juste réafficher le même formualaire non?

    Pour afficher sur ta page :

    echo $_POST['champ1'];
    echo $_POST['champ2'];
    0
  3. TechAndCo Messages postés 254 Statut Membre 20
     
    Bonjour,

    Voici une autre solution, mais peut etre que j'ai mal compris:

    1. l'utilisateur entre le nombre d'enregistrements.
    2. génération du formulaire avec un champs caché contenant le nombre entré par le user: <input type="hidden" name="nbr" value="<?php echo $_GET['nbr'] ?>">
    3. Tu nommes chaques champs de la sorte: chp1_$i (avec i la valeur en cours de la boucle que tu fais aller jusqu'à $nbr).
    4. l'utilisateur obtiens un formulaire avec $nbr lignes à remplir. Il clic sur envoyer.
    4. Dans ta page de traitement, tu boucles jusqu'au nombre du champs hidden.

    Voili voilou. Pour le code à toi de trouver !

    N'hésites pas si tu as d'autres questions.

    0
  4. doudi
     
    As tu résolu ton problème?
    0
    1. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
       
      Pas encore je suis en train d'y remedier...

      Je me suis sans doute mal exprimé


      Je part d'un exemple ou nb_element=2


      Page 1
      print("Nombre d'element: ");
      print("<input type=text name='nb_element' size=1></text><br>");

      page2
      Je vérifie que la varaible nb_element existe
      je vérifie que ma variable nb_element n'est pas vide
      pour chaque élement de ma variable je dois remplir le champ 1 et champ 2 (mais je veux que pour chaque élement apparaisse une page et qu'en cliquant sur next cela m'affiche l'element suivant avec les champ 1 et 2 a remplir)

      Actuellemnt avec mon script je remplis le champ 1 et 2 de l'élement 1 puis je clique sur next et alors vue que je vérifie que ma variable nb_element existe et qu'elle est pas vide cela ne me permet pas d'afficher pour l'élement 2 le champ 1 et 2.


      <?php
      // récupération en post du nombre d'élément
      $nb = $_POST['nb_element']; // nbElment correspond au name du champe input
      $page = empty($_GET['page']) ? 1 : $_GET['page'];
      ?>


      <?php
      //faut que les variables existent
      if(isset($_POST['nb_element']))
      {
      $nb_element = $_POST['nb_element'];
      //faut que tous les champs soient remplis
      if(!empty ($nb_element))
      {

      ?>
      <form action="test.php?page=<?php echo ($page + 1)?>" method="post">
      <p>
      <label>Champ 1</label>
      <input type="text" name="champ1" />
      </p>
      <p>
      <label>Champ 2</label>
      <input type="text" name="champ2" />
      </p>
      <p><input type="submit" value="next" /><p>
      </form>
      <?php
      }
      }
      ?>
      0
      1. TechAndCo Messages postés 254 Statut Membre 20 > pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention  
         
        Alors:

        switch($_POST['pg']) {
        default:
        $code = '<form action="page.php" method="post">';
        $code .= '<input type=text name="nb_element" size=1></text>';
        $code .= '<input type="hidden" name="pg" value="fill">';
        $code .= '<input type="submit" value="next" /></form>';
        echo $code;

        break;

        case 'fill':
        if (isset($_POST['nb_element'])){
        $nb_element = $_POST['nb_element'];
        } else {
        $nb_element = '';
        }
        if (!empty ($nb_element))
        {

        $code = '<form action="page.php" method="post">';
        $compteur = 0;
        while ($compteur < $nb_element) {
        $code .= '<label>Champ 1</label>';
        $code .= '<input type="text" name="champ1_'.$compteur.'" /><br>';
        $code .= '<label>Champ 2</label> ';
        $code .= '<input type="text" name="champ2_'.$compteur.'" /><br><br>';
        $code .= '<input type="hidden" name="nb_element" value="'.$nb_element.'">';
        $code .= '<input type="hidden" name="pg" value="filled">';
        $compteur++;
        }
        $code .= '<input type="submit" value="next"></form>';
        echo $code;
        } else {
        echo 'Merci de remplir le champs';
        }
        break;
        case 'filled':
        $compteur = 0;
        $code = '';
        while ($compteur < $_POST['nb_element']){
        $code .= $compteur.' - Champs 1:'.$_POST['champ1_'.$compteur].' Champs 2: '.$_POST['champ2_'.$compteur].'<br>';
        $compteur++;
        }
        echo $code;
        break;
        }

        Je sais on aurait pu utiliser un for.. mais j'aime le while :p pas vous ?

        Whilesspresso... what else ?
        0
      2. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2 > TechAndCo Messages postés 254 Statut Membre
         
        Salut,

        Je crois que je m'exprime vraiment mal; (en fait je ne veux pas remplir sur une même page les champ 1 et 2 de chaque élement mais je veux que cela se fasse sur des pages différentes, autant de page que j'ai d'élement)

        page 1
        entrez le nombre d'élement: 2

        page 2

        ELEMENT A
        Champ 1:
        Champ 2:
        next

        //je remplis le champ 1 et 2 puis je clique sur next

        ELEMENT B
        Champ 1:
        Champ 2:
        OK
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. doudi
     
    la solution pour toi est de mettre en champs caché nbElement

    <input type =hidden value =<?php echo $_POST[(nb['element]?>
    0
  7. TechAndCo Messages postés 254 Statut Membre 20
     
    Voici donc ce que tu veux :) tu copies et colles et c'est fini:
    <?php
    session_start();
    if (isset($_POST['pg'])){
    $pg = $_POST['pg'];
    } else {
    $pg = 'init';
    }

    switch($pg) {
    case 'init':
    session_unregister('elements');
    $code = '<form action="page.php" method="post">';
    $code .= '<input type=text name="nb_element" size=1></text>';
    $code .= '<input type="hidden" name="pg" value="ask">';
    $code .= '<input type="submit" value="next" /></form>';
    echo $code;

    break;

    case 'ask':

    if (!isset($_POST['actu_element'])){
    $actu_element = 0;

    } else {
    $actu_element = $_POST['actu_element'];
    $_SESSION['elements'][$actu_element][1] = $_POST['champ1'];
    $_SESSION['elements'][$actu_element][2] = $_POST['champ2'];
    $actu_element++;
    }
    $nb_element = $_POST['nb_element'];

    if ($actu_element == $nb_element) {
    $value_pg = 'filled';
    } else {
    $value_pg = 'ask';
    }

    $code = 'Nombre: '.$actu_element.'<br>';
    $code .= '<form action="page.php" method="post">';
    $code .= '<label>Champ 1</label>';
    $code .= '<input type="text" name="champ1" /><br>';
    $code .= '<label>Champ 2</label> ';
    $code .= '<input type="text" name="champ2" /><br><br>';
    $code .= '<input type="hidden" name="actu_element" value="'.$actu_element.'">';
    $code .= '<input type="hidden" name="nb_element" value="'.$nb_element.'">';
    $code .= '<input type="hidden" name="pg" value="'.$value_pg.'">';
    $code .= '<input type="submit" value="next"></form>';
    echo $code;

    break;
    case 'filled':
    $compteur = 0;
    $code = '';
    $nbr = sizeof($_SESSION['elements']);
    while ($compteur < $nbr){
    $code .= $compteur.' - Champs 1:'.$_SESSION['elements'][$compteur][1].' Champs 2: '.$_SESSION['elements'][$compteur][2].'<br>';
    $compteur++;
    }
    echo $code;
    echo '<br> <a href="page.php">Retour</a>';

    break;
    }

    ?>

    Explication:
    Le tableau des réponses est stocké dans une variable de session 'elements'.

    0
  8. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    Bonjour,
    Merci beaucoup de ton aide.
    - j'ai du mal a comprendre cette annotation $_SESSION['elements'][$actu_element][1] ).
    - je ne comprend pas pourquoi utiliser session_unregister

    Mon souci actuel est que je n'arrive pas a visualiser le tableu de réponse qui est stocké dans ma variable de session; j'obtiens (par exemple pour nb_element=2; 0 - Champ1 ) ma variable '.$_SESSION['elements'][$compteur][1].' ne contient rien

    J'ai fais quelques modification sur le script et
    script.nombre_element.php
    <?php
    $code = '<form action="page.php" method="post">';
    $code .= '<label>nb_element</label>';
    $code .= '<input type=text name="nb_element" size=1></text>';
    $code .= '<input type="hidden" name="pg" value="ask">';
    $code .= '<input type="submit" value="next" /></form>';
    echo $code;
    ?>

    script.page.php
    <?php
    session_start();

    $nb_element = $_POST['nb_element'];
    ?>

    <?php
    if(!empty ($nb_element))
    {

    session_start();
    if (isset($_POST['pg']))
    {
    $pg = $_POST['pg'];
    }

    switch($pg)
    {
    case 'ask':

    if (!isset($_POST['actu_element']))
    {
    $actu_element = 1;
    }
    else
    {
    $actu_element = $_POST['actu_element'];
    $_SESSION['elements'][$actu_element][1] = $_POST['champ1'];
    $actu_element++;
    }

    $nb_element = $_POST['nb_element'];

    if ($actu_element == $nb_element)
    {
    $value_pg = 'filled';
    }
    else
    {
    $value_pg = 'ask';
    }

    $code = 'Nombre: '.$actu_element.'<br>';
    $code .= '<form action="page.php" method="post">';
    $code .= '<label>champ1</label>';
    $code .= '<textarea name="champ1" cols=15 rows=3></textarea><br>';
    $code .= '<input type="hidden" name="actu_element" value="'.$actu_element.'">';
    $code .= '<input type="hidden" name="nb_element" value="'.$nb_element.'">';
    $code .= '<input type="hidden" name="pg" value="'.$value_pg.'">';
    $code .= '<input type="submit" value="next"></form>';
    echo $code;

    break;
    case 'filled':
    $compteur = 0;
    $code = '';
    $nbr = sizeof($_SESSION['elements']);
    while ($compteur < $nbr)
    {
    $code .= $compteur.' - Champ1:'.$_SESSION['elements'][$compteur][1].'<br>';
    $compteur++;
    }
    echo $code;
    echo '<br><form action="suite.php" method="post">';
    echo'<input type="submit" value="end"></form>';
    break;
    }

    ?>
    0
  9. TechAndCo Messages postés 254 Statut Membre 20
     
    Salut,

    Alors:
    $_SESSION['elements'][$actu_element][1] -> C'est un tableau :) mais en variable de session $NOMTABLEAU[LIGNE][COLONNE]

    Pour le unregister, c'est simple, si tu ne détruis pas ta variable lorsque tu vas demander à l'utilisateur le nombre de champs qu'il veut, s'il l'a déjà fait une fois, alors l etableau affiché sera l'ancien, c'est à dire celui enregistré dans la session :)

    Est ce que la varible est bien enregitré dans la session ? est ce que les sessions marchent sur ton serveur ?

    (finalement tu n'as gardé qu'un champ :p)
    0
  10. pontarose Messages postés 150 Date d'inscription   Statut Membre Dernière intervention   2
     
    Merci j'ai compris pour le tableau de session
    pour unregister pas totalement (je ne l'utilise pas dans mon script); oui c'est mon ancien tableau qi s'affiche mais je ne veux pas écraser l'ancien je veux lui ajouter le nouveau (càd la valeur entré pour le Champ 1 de mon element B!non?).

    Element A
    Champ1: essai
    puis je clique sur next
    Alors en ayant fais un print_r($_SESSION['elements']); je retrouve ma variable de session (Array([1]=>Array([1]=>essai))
    Element B
    Champ2: test
    puis je clique sur next
    j'obtiens en ayant fais un print_r($_SESSION['elements']); (Array([1]=>Array([1]=>essai))
    0