将动态文本输入传递给 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 & 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.
正在构建我的第一个网站,但无法弄清楚最后一点。我的 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 & 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.