PHP中的无限字段?

时间:2009-06-25 02:38:54

标签: php scripting field sample

如何在php中使用无限字段?这是场景:

首先,只有2个字段,名为:first name1,last name1

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

有人能在PHP中给我一些示例脚本吗?我是PHP的新手。

表单应该是HTML格式。如果有人可以提供Ajax示例代码,那将是一个很大的优势。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

有两种方法可以做到这一点,要么只使用PHP,要么使用一些奇特的JavaScript。我将解决仅限PHP的解决方案。 JavaScript解决方案将更加灵敏,因为不会重复往返服务器,但它也只适用于启用了JavaScript的用户,而PHP解决方案适用于所有人。

解决方案的概要是:

  1. 最初$count为1,并生成一行。
  2. 如果用户单击“添加”,则表单将回发到包含隐藏count变量的同一PHP文件中。该脚本从头开始重新开始,递增$count,并显示比上一次更多的行。
  3. 如果用户单击“提交”,则会处理已输入的名称。
  4. 这是一些示例代码。我很抱歉我没有在机器上安装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>