【问题标题】:How to capture data from multiple form search fields in one variable如何从一个变量中的多个表单搜索字段中捕获数据
【发布时间】:2015-03-01 21:22:11
【问题描述】:

我有一个 html 搜索表单,其中包含多个字段,例如选择、文本区域和文本输入。我需要将所有字段的值存储到 php 搜索表单中的 $input 中,但我不确定如何将它们存储到 php 页面上一个名为 $input 的变量中。

<form name="search" method="post" action="http://example.com/search/">
Seach for: <input type="text" name="find" /> <input type="submit"  
name="search" value="Search" />
Search for movies by Type
<select name="find">
<option value="Sci-Fi" selected>Sci-Fi</option>
<option value="Comedy">Comedy</option>
<option value="Drama">Drama</option>
</select>
</form>

//on search.php need to 'find' to be data from several form inputs
$input = $_POST['find'];

【问题讨论】:

  • 如果用户填写了多个字段,您希望$input 包含什么?如果您希望将它们连接起来,请使用.
  • 我更新了代码以显示 html 表单,以帮助更好地解释我正在尝试做的事情。希望用户能够从选择框中进行选择或键入关键字或两者兼而有之,并将所有输入存储在 search.php 页面的 $input 中,因为那里的所有代码都基于存储在一个中的所有日期$输入变量

标签: php forms


【解决方案1】:

如果您给多个输入提供相同的名称,$_POST['find'] 将只包含来自其中一个的输入(我认为是最后一个)。您需要为它们指定不同的名称,或者您可以使用[] 结束名称。当您执行后者时,PHP 会将所有输入放入一个数组中。

<form name="search" method="post" action="http://example.com/search/">
Seach for: <input type="text" name="find[]" /> <input type="submit" name="search" value="Search" />
Search for movies by Type
<select name="find[]">
    <option value="Sci-Fi" selected>Sci-Fi</option>
    <option value="Comedy">Comedy</option>
    <option value="Drama">Drama</option>
</select>
</form>

有了这个,你可以做到:

$input = implode(' ', array_filter($_POST['find']));

array_filter 将删除所有空值,然后将其余的值与它们之间的空格连接在一起。

【讨论】:

  • 试过...我得到错误 array_filter() 期望参数 1 是数组,null g 和 implode() [function.implode]: Invalid arguments
  • 听起来您没有将 HTML 中的所有 name="find" 更改为 name="find[]"
  • 正确。只是这样做了,但与上面的 Silences 答案相同。如果我将输入字段留空,它将从选择字段返回结果。但是,如果我在输入字段中输入关键字,那么无论选择字段如何,我都不会得到任何结果。奇怪的。如果我没有选择字段作为查询的一部分,它确实会给我输入字段的结果。
  • 您在&lt;input&gt;&lt;select&gt; 中都更改了名称,对吧?我很确定它应该可以工作。
  • 是的,我做到了。如果我使用这种方法在输入字段中输入搜索词,我只是没有得到任何结果。
【解决方案2】:

让你的 $input 成为一个数组。例如:

$input = array(
    "user" => $_POST['username'],
    "find" => $_POST['find'],
);

或者简单地将所有内容添加到 $input 中:

$input .= $_POST['username'];
$input .= $_POST['find'];

【讨论】:

  • 我很想在这里做第二个选项……那是我最初的方法。两条独立的输入线。但是当我这样做时,只有将文本输入留空才能得到结果
  • 我觉得第一个选项数组可能正在工作,即使没有结果。我尝试在 SQL 中执行 $input[0] 以从数组中获取结果,但我得到了错误的结果。
  • 试试例如:$input['username'].
  • 使用 $input = 数组方法更进一步。使用该方法查看包含更新问题的新帖子:stackoverflow.com/questions/28804243/…
【解决方案3】:
<?php
array_pop($_POST); // To delete Submit button from $_POST
foreach(array_filter($_POST) as $key=> $val)
{
    $input .= "$val";
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2014-02-25
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2018-03-21
    • 2010-10-20
    相关资源
    最近更新 更多