0

我如何在php中做无限字段?这是场景:

起初,只有 2 个字段,我们称之为:名字 1,姓氏 1

我想要做的是,当我单击“添加”按钮时,它将在新行中添加另外 2 个字段,字段标签/名称应该是名字 2,姓氏 2。当我再次单击时,它将有名字3,姓氏3,依此类推..

谁能给我一些php中的示例脚本?我是 PHP 新手。

表单应为 HTML。如果有人可以提供 Ajax 示例代码,那将是一大优势。

4

2 回答 2

10

这取决于您所说的“字段”是什么意思。听起来好像您在谈论一个表单,它不是 PHP,而是 HTML。您可以将按钮 [添加] 回传到服务器,然后使用另一组表单输入刷新页面。您也可以通过 javascript 执行此操作,而无需刷新页面。

简单的 Javascript (jQuery) 示例:

$(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 示例:

我不鼓励你按原样使用它

<?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>
于 2009-06-25T02:42:16.540 回答
2

有两种方法可以做到这一点,要么单独使用 PHP,要么使用一些花哨的 JavaScript。我将解决仅限 PHP 的解决方案。JavaScript 解决方案的响应速度会更快,因为不会重复往返服务器,但它也仅适用于启用 JavaScript 的用户,而 PHP 解决方案适用于所有人。

解决方案的概要如下:

  1. 初始$count为 1,生成一行。
  2. 如果用户单击“添加”,表单将回发到包含隐藏count变量的相同 PHP 文件中。脚本从头开始重新启动,递增$count并显示比上次多一行。
  3. 如果用户单击提交,则处理已输入的名称。

这是一些示例代码。我很抱歉我没有在我正在写这个的机器上安装 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>
于 2009-06-25T02:56:32.923 回答