【问题标题】:How to use $_GET to get multiple parameters using the same name in PHPPHP中如何使用$_GET获取多个同名参数
【发布时间】:2018-06-21 16:43:32
【问题描述】:

我正在使用复选框来搜索我创建的 mysql 数据库。由于复选框都使用相同的名称,所以当我使用 $_GET 时,它只会获取 URL 中的最后一个值。

例如: http://www.website.com/search.php?features=Textures&features=Items&style=Realistic&submit=search

只会返回项目,并会覆盖纹理。

有没有办法存储这两个值,然后使用这些值来搜索我的数据库?

【问题讨论】:

  • 如果您坚持密钥始终为feature,那么您将只能获得 $_POST 中的最后一组,并且您必须自己处理原始输入。如果您不介意参数名称为 feature[],那么 $_POST 将包含一个名为 feature 的数组,其中包含所有值
  • 自己处理原始 POST 数据需要从 php://input 读取数据并自己构建请求数据。 php.net/manual/en/wrappers.php.php#wrappers.php.input

标签: php mysql


【解决方案1】:

PHP 在这里有点奇怪。使用它的标准表单数据解析器,您必须以 [] 结尾的控件名称才能访问多个控件。

<input type="checkbox" name="foo[]" value="bar">
<input type="checkbox" name="foo[]" value="bar">
<input type="checkbox" name="foo[]" value="bar">

将作为数组提供:

$_GET['foo'][]

如果您不想重命名字段,则需要访问原始数据 ($_SERVER['REQUEST_URI']) 并自行解析(我不建议这样做)。

【讨论】:

  • @MenelaosKotsollaris — 在我见过的任何系统中都没有。
  • @Quentin PHPStorm ?
  • ... 是一个 IDE,如果它抱怨那个 HTML,那么它就会被严重破坏(或配置错误)。
【解决方案2】:

我从未尝试过使用 $_GET,但如果您使用 $_POST,您可以执行以下操作:

<input type="checkbox" name="car[]" value="honda" /> Honda
<input type="checkbox" name="car[]" value="ford" /> Ford
<input type="checkbox" name="car[]" value="toyota" /> Toyota
// note the [] in the name

所以 $car = $_POST['car'] 是一个数组

你也可以用 $_GET 试试看。

【讨论】:

    【解决方案3】:

    在 html 中将您的复选框元素命名为“features[]”。这样它们将作为数组传递。

    【讨论】:

      【解决方案4】:

      您需要将该变量的名称设置为 HTML 数组变量,以便在表单上,​​它将是

      <input name='features[]'/>
      

      【讨论】:

      • 数组就是数组就是数组。在 html 表单元素中,当使用 [] 时它可以是数组元素,这就是它作为数组传递的方式。确保您可以挑剔该数组与说“定义为该名称的数组的一部分的HTML元素,并可以选择在方括号内指定索引”
      • 我不会对此投反对票,但是虽然 PHP 会从数据中创建一个数组,但就 URL 和 HTML 而言,它只是一堆东西一样的名字。服务器上使用的大多数语言都允许您从任何一组具有相同名称的表单控件中获取数据数组,而无需 PHP 要求的特殊命名约定。
      猜你喜欢
      • 2010-09-26
      • 1970-01-01
      • 2010-12-22
      • 2015-06-08
      • 1970-01-01
      • 2013-01-21
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多