Get and echo inputs from textarea repeatedly [clos

2020-02-16 02:36发布

问题:

Closed. This question needs to be more focused. It is not currently accepting answers.

Want to improve this question? Update the question so it focuses on one problem only by editing this post.

Closed 4 years ago.

I have a simple HTML form like this:

    <form action="index.php" method="post">
    <textarea id="question" name="question"></textarea>
    <input type="submit"/>
    </form>

And the procedure that I'd like it to be is something like described here:

  • Type something in the text area and click submit, result displayed:

    [... the only text area got blank and be ready for new input ...]
    
    Question 1: Something typed firstly
    
  • Type some other thing in the above text area and submit, result displayed:

    [... the only text area got blank and be ready for new input ...]
    
    Question 1: Something typed firstly
    Question 2: Something typed secondly
    
  • And so on...

    [... the only text area got blank and be ready for new input ...]
    
    Question 1: Something typed firstly
    Question 2: Something typed secondly
    ...
    Question n: Something typed at the n time
    

Does anyone have an idea or can give me a hint how to do this using only HTML and PHP?

Thank you very much!

回答1:

If you don't want to put the values in a database you could use a session

session_start();

at the very top of your page and

 <?php 
     if( $_SESSION['counter'] > 0 ) $_SESSION['texts'] = $_SESSION['texts'] . "<br />Question " . $_SESSION['counter'] . ": Something " . $_POST['question'];   

     $_SESSION['counter']++; 
 ?>

     <?php   echo $_SESSION['texts'];  // put this in a div where you want to see them ?>

This will only clear when the browser is shut.

This is a very crude outline but you could look at tutorials on sessions and how to use them.

You would also need a counter at the bottom of your script to add in the number.

 $_SESSION['counter']++;

Using hidden inputs to replace sessions without array or for loop.

         <?php
          $counter = $counter + (int) $_POST['counter']; // (int) helps sanitise this by forcing type change to integer - any text would be converted to 0
          //echo $counter; // for trackng
          $texts = $_POST['texts']; // MUST be sanitized and escaped for mysqli

          if($counter > 0) $texts = $texts . "<br />Question " . $counter . ": Something " . $_POST['question'];
          $counter++; 
    ?>

           <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
             <textarea id="question" name="question"></textarea>
             <input type="hidden" name="texts" id="texts" value="<?php echo $texts;?>" />
             <input type="hidden" name="counter" id="counter" value="<?php echo $counter; ?>" /> 
             <input type="submit"/>
           </form>


         <?php echo $texts; // put this in a div where you want to see them ?>

Do not use this code without cleaning up the post variables or you will get hacked to bits by hackers. See other posts on preg_replace() and on php.net



回答2:

You can use hidden inputs if you keep echoing out the id values and the just submitted value. (Also, note how I added a name to the submit)

<form action="index.php" method="post">
<?php
if(isset ($_POST['submit']) {
  $oldAnswers = array ();
  if(isset($_POST['oldAnswers']) && is_array ( $_POST['oldAnswers'])) {
    $oldAnswers = $_POST ['oldAnswers'];
  }

  if (isset ($_POST ['question']))
    $oldAnswers[] = $_POST ['question'];

  for($i = 0, $j = 1; $i < count (oldAnswers); $i++, $j++) {
    $answer = $oldAnswers [$i];
    // display your "previously written" message
    echo 'Question ' . $j . ': ' . $answer . "<br>\n";

    // echo out hidden inputs
    echo '<input name="oldAnswers[]" type="hidden" value="' . $answer . '">';
  }
}
?>
  <textarea id="question" name="question">< /textarea>
  <input name="submit" type="submit">
</form>

See how oldAnswers has [] after it in the name? That'll tell php that it's an array and make it easy to deal with.