将动态文本输入传递给 PHP 以写入文本文件

Pass dynamic text input to PHP in order to write to text file

正在构建我的第一个网站,但无法弄清楚最后一点。我的 RSVP 表单有以下用户输入:1) 下拉 select 菜单中的来宾人数 2) 来宾姓名 3) 文本区域。用户select输入号码后,动态出现来宾姓名文本框供姓名输入。完成所有操作后,用户单击 RSVP,PHP 代码将其写入文本文件。

问题:来宾号码和文本区域写入正常,但动态来宾姓名框未传递给 PHP。

我该如何解决?一直在尝试一切。非常感谢任何帮助。

<script> //--add numbers to the dropdown select menu and append the options to select--//
$(function() {
  var $select = $("#selectguest");
  for (i=1;i<=10;i++) {
    $select.append($('<option></option>').val(i).html(i))
  }
});
</script>

    <script type='text/javascript'> //--makes Next button responsive to number of guest input--//
        function addFields(){
            // Number of inputs to create
            var number = document.getElementById("selectguest").value;
            // Container <div> where dynamic content will be placed
            var container = document.getElementById("guest_names");
            // Clear previous contents of the container
            while (container.hasChildNodes()) {
                container.removeChild(container.lastChild);
            }
            for (i=0;i<number;i++){
                // Append a node with a random text
                container.appendChild(document.createTextNode("Guest" + (i+1)));
                // Create an <input> element, set its type and name attributes
                var input = document.createElement("input");
                input.type = "text";
                input.name = "guestnames_' + i +'";
                container.appendChild(input);
                // Append a line break 
                container.appendChild(document.createElement("br"));
            }
        }
    </script>
<?php
date_default_timezone_set("America/Vancouver");
//Make sure the file exists.
touch('rsvp.txt');
//Check the length of the comments file.
if ( filesize('rsvp.txt') < 50000 ) {
  //Get the user's message.
  $date = date('l, F jS Y, h:i:s A');
  $guests = substr($_POST['guest_number'], 0, 2);
  $guests = htmlentities($guests);
  $guestnames = substr($_POST['guestnames'], 0, 20);
  $guestnames = htmlentities($guestnames);
  //  Limit it to 2,000 characters.
  $message = substr($_POST['message'], 0, 2000);
  //Convert special characters to HTML entities.
  $message = htmlentities($message);
  //Append message to the RSVP file.
  $f = fopen('rsvp.txt', 'a');
  fwrite($f, "\r\n$date\r\n$guests\r\n$guestnames\r\n$message\r\n");
  fclose($f);
}
//Jump back to whichever page.
header("refresh:3; index.html");
?>
<form class="RSVPform" action="rsvp.php" method="post">
  <div>
    <p>Please select the number of guests and enter their names. Once you're ready, click RSVP and you're all set!</p><br>
    <center>Number of Guests: <select id="selectguest" name="guest_number" onChange="addFields()"></select><br><div id="guest_names" name="guest_names"/></div><br><hr><p align="left"><font size=2>Have dietary preferences? Tell us in the message box below.</font></p><textarea id="text" placeholder="Leave a message for the bride &amp groom!" name="message" id="guest_message" rows="5" cols="48"></textarea><button type="submit" id="RSVP">RSVP</button></center>
  </div>
  </form>

您不是在发帖 $_POST['guestnames'],而是发了很多 $_POST['guestnames_#']

在您的 HTML 页面上,将 guestnames 输入的名称更改为:

input.name = "guestnames[]";

在您的 PHP 脚本中,您现在可以访问 $_POST['guestnames']

这将是一个数组,因此您必须执行类似

的操作
$guestnames = "";
foreach ($_POST['guestnames'] as $guest)
{
    $guestnames .= ", ".trim($guest); //trim whitespaces from beginning and end of string.
}

$guestnames = htmlentities(substr($guestnames, 2)); //strip the first comma and space and run through htmlentities.