如何在php中使用无限字段?这是场景:
首先,只有2个字段,名为:first name1,last name1
我想要做的是,当我点击“添加”按钮时,它会在新行中添加另外两个字段,字段标签/名称应该是名字2,姓氏2。当我再次点击时,它将具有名字3,姓氏3,依此类推......
有人能在PHP中给我一些示例脚本吗?我是PHP的新手。
表单应该是HTML格式。如果有人可以提供Ajax示例代码,那将是一个很大的优势。
答案 0 :(得分:10)
这取决于你所说的“场”。听起来好像你在谈论的是一个不是PHP的表单,而是HTML。您可以将一个按钮[添加]发回服务器,然后使用另一组表单输入刷新页面。您也可以通过javascript完成此操作,而无需刷新页面。
$(document).ready(function(){
$("input[value='Add']").click(function(event){
event.preventDefault();
$("p.field:last").clone().insertAfter("p.field:last");
});
});
<form method="post">
<p class="field">
<input type="text" name="firstname[]" value="" />
<input type="text" name="lastname[]" value="" />
</p>
<p>
<input type="submit" name="submit" value="Add" />
<input type="submit" name="submit" value="Done" />
</p>
</form>
我不鼓励你按原样使用
<?php
$count = 1;
if ($_POST["submit"] == "Add") {
$count = ($_POST["firstname"]) ? (count($_POST["firstname"]) + 1) : 1;
} else
if ($_POST["submit"] == "Done") {
print "<pre>";
print_r($_POST["firstname"]);
print_r($_POST["lastname"]);
print "</pre>";
}
?>
<form method="post">
<?php for($i = 0; $i < $count; $i++) { ?>
<p class="field">
<input type="text" name="firstname[]" value="<?php print $_POST["firstname"][$i]; ?>" />
<input type="text" name="lastname[]" value="<?php print $_POST["lastname"][$i]; ?>" />
</p>
<?php } ?>
<p>
<input type="submit" name="submit" value="Add" />
<input type="submit" name="submit" value="Done" />
</p>
</form>
答案 1 :(得分:2)
有两种方法可以做到这一点,要么只使用PHP,要么使用一些奇特的JavaScript。我将解决仅限PHP的解决方案。 JavaScript解决方案将更加灵敏,因为不会重复往返服务器,但它也只适用于启用了JavaScript的用户,而PHP解决方案适用于所有人。
解决方案的概要是:
$count
为1,并生成一行。count
变量的同一PHP文件中。该脚本从头开始重新开始,递增$count
,并显示比上一次更多的行。这是一些示例代码。我很抱歉我没有在机器上安装PHP我正在写这个,所以这完全没有经过测试。希望没有太多可怕的语法错误!
<?php
$count = isset($_POST['count']) ? $_POST['count'] : 1;
if (isset($_POST['add']))
++$count;
else if (isset($_POST['submit']))
{
header('Content-Type: text/plain');
print_r($_POST);
exit;
}
?>
<html>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']) ?>" method="post">
<input type="hidden" name="count" value="<?php echo $count ?>" />
<?php for ($i = 1; $i <= $count; ++$i) { ?>
[<?php echo $i ?>]
First: <input type="text" name="firstName<?php echo $i ?>"
value="<?php echo htmlspecialchars($_POST["firstName$i"]) ?>" />
Last: <input type="text" name="lastName<?php echo $i ?>"
value="<?php echo htmlspecialchars($_POST["lastName$i"]) ?>" />
<br />
<?php } ?>
<input type="submit" name="add" value="Add" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
哦,你想要一个JavaScript解决方案,嗯?那么你已经有了非常好的jQuery答案。那么一个荒谬的长朴素JavaScript解决方案呢?
<html>
<head>
<script type="text/javascript">
// <![CDATA[
var count = 0;
function addRow() {
var table = document.getElementById("table");
var row = document.createElement("tr");
var countCell = document.createElement("td");
var countText = document.createTextNode(++count);
var firstCell = document.createElement("td");
var firstInput = document.createElement("input");
var lastCell = document.createElement("td");
var lastInput = document.createElement("input");
firstInput.type = "text";
firstInput.name = "firstName" + count;
lastInput.type = "text";
lastInput.name = "lastName" + count;
table .appendChild(row);
row .appendChild(countCell);
countCell.appendChild(countText);
row .appendChild(firstCell);
firstCell.appendChild(firstInput);
row .appendChild(lastCell);
lastCell .appendChild(lastInput);
}
// ]]>
</script>
</head>
<body>
<form action="somewhere.php" method="post">
<table id="table">
<tr>
<th>Row</th>
<th>First</th>
<th>Last</th>
</tr>
</table>
<script type="text/javascript">
addRow();
</script>
<input type="button" value="Add" onclick="addRow()" />
<input type="submit" value="Submit" />
</form>
</body>
</html>