1

我对一些代码有三个问题:

  1. 如何isset($_POST['submit'])知道何时单击了提交按钮。我不明白这背后的机制?
  2. 为什么每个输入元素都使用artist[]带有方括号的值为 的名称?我们是否在 HTML 中定义和数组?
  3. 有人告诉我,赋予输入元素的名称值必须与赋予$_POST变量的名称相匹配。但在这种情况下$_POST,使用artist不带方括号的 with。这里发生了什么 ?

.

 <html>

 <head></head>
 <body>

 <?php

 // check for submit
  if (!isset($_POST['submit'])) {

   // and display form
   ?>

 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <input type="checkbox" name="artist[]" value="Bon Jovi">Bon Jovi
    <input type="checkbox" name="artist[]" value="N'Sync">N'Sync
    <input type="checkbox" name="artist" value="Boyzone">Boyzone
    <input type="checkbox" name="artist" value="Britney Spears">Britney Spears
    <input type="checkbox" name="artist" value="Jethro Tull">Jethro Tull
    <input type="checkbox" name="artist" value="Crosby, Stills & Nash">Crosby, Stills & Nash
    <input type="submit" name="submit" value="Select">
</form>

 <?php

 } else {

     // or display the selected artists
     // use a foreach loop to read and display array elements
     if (is_array($_POST['artist'])) {

         echo 'You selected: <br />';

         foreach ($_POST['artist'] as $a) {
             echo "<i>$a</i><br />";
         } 

     } else {

         echo 'Nothing selected';

     }
}
?>
</body>
</html>
4

3 回答 3

4

1. isset($_POST['submit']) 如何知道提交按钮何时被点击。

单击提交按钮会使浏览器提交表单(并在数据中包含单击的提交按钮的名称/值)。

提交表单会创建一个 HTTP 请求。

PHP 不会运行,除非作为对服务器接收 HTTP 请求的反应。

PHP 检查数据以查看其中是否包含提交按钮的名称/值。

  1. 为什么每个输入元素都使用一个值为“artist[]”的名称,并带有这样的方括号?

大多数表单处理库将提供一种访问与数组同名的多个元素的方法。PHP 要求名称在[]允许之前以结尾。

有人告诉我,输入元素的名称值必须与 $_POST 变量的名称相匹配。但在这种情况下,$_POST 使用的是不带方括号的“艺术家”。这里发生了什么?

PHP 的表单数据解析器将[]创建数组的消息视为消息,而不是名称的一部分。这很奇怪。

但是,它确实允许您定义以下内容:

<input type="checkbox" name="foo[bar][]" value="1">
<input type="checkbox" name="foo[bar][]" value="1">
<input type="checkbox" name="foo[bar][]" value="1">
<input type="checkbox" name="foo[oat][]" value="1">
<input type="checkbox" name="foo[oat][]" value="2">
<input type="checkbox" name="foo[oat][]" value="3">

然后循环$_POST['foo']获取可以依次循环的两个项目的数组。

于 2013-10-02T15:11:57.280 回答
1
  1. $_POST['submit']在提交表单并且存在名称为“submit”的输入字段时设置。在您的情况下,<input type='submit'>它的名称为“提交”。(您还可以使用保存该值的 $_POST['submit'] 获取提交按钮的值)。

  2. 这些名称具有艺术家 [],因为它声明了在处理表单时要传递的数组。您可以使用它将值组合在一起。通常,它是由等完成的artist[name]artist[album]可以在 PHP 中使用_POST['artist']['name'].

  3. 从 2 开始排序。使用空方括号使数组没有关联。您将第一个字段引用为$_POST['artist'][0]和 next $_POST['artist'][1]

当所有字段都被赋予相同的名称时,将构建一个数组,您可以像 3 一样在 PHP 中引用它。

于 2013-10-02T15:13:46.180 回答
0
  1. 提交按钮实际上是提交表单,它本身就是一个 POST 值。因此,如果已设置,则表示已提交表单。不过,最好检查是否$_SERVER['REQUEST_METHOD']等于“POST”。

  2. 是的,它定义了一个“数组”,但这是错误的,因为在最后 4 个复选框中它没有方括号。

  3. $_POST['artist']将包含一个包含所有复选框值的数组(真或假,取决于它们是否分别被选中)。

于 2013-10-02T15:15:12.747 回答