我正在使用复选框来更改SQL查询。
HTML:
<input type="checkbox" name="chapter" value="7" /><label>ch. 7</label><br />
<input type="checkbox" name="chapter" value="13" /><label>ch. 13</label>
PHP:
//adjust query for chapter
$chap = $_POST['chapter'];
$chapter = "";
if(!empty($chap)){
$N = count($chap);
if($N == 1){
$chapter .= " AND chapter = '".$chap[0]."'";
}else{
$chapter .= " AND (chapter = '".$chap[0]."' OR chapter = '".$chap[1]."')";
}
}
$zquery = "SELECT * FROM records WHERE ".$zipcodes.$chapter;
如果未选中复选框,则可以正常工作。选中第7章框后,它可以正常工作。问题在于13盒子。当我检查时,$chap[]
只返回"1"
而不是"13"
的值。例如,当我var_dump
$zquery
时,我得到string(3384) "SELECT * FROM records WHERE (party_zip='34683' OR party_zip='34682' ) AND chapter = '1'"
。
此外,$N
始终返回1
,即使我同时选中这两个框。 $_POST['chapter']
不是数组吗?为什么它只返回字符串中的第一个字符?
合十
答案 0 :(得分:2)
$_POST['chapter']
不是数组,在输入名称中使用方括号:
<input type="checkbox" name="chapter[]" value="7" /><label>ch. 7</label><br />
<input type="checkbox" name="chapter[]" value="13" /><label>ch. 13</label>
答案 1 :(得分:2)
如果您只想从表单返回一个值
,请尝试删除[0]
$chapter .= " AND chapter = '".$chap."'";
或者(可能你想要的),将你的输入更改为数组,它应该工作
<input type="checkbox" name="chapter[]" value="7" /><label>ch. 7</label><br />
<input type="checkbox" name="chapter[]" value="13" /><label>ch. 13</label>
答案 2 :(得分:1)
Molle博士和道格拉斯博士都是正确的,但我想对他们的答案进行一些扩展。
$_POST
是一个数组。它可以包含各种值,可以是key => value
结构,也可以是以数字方式索引的一系列值。每个值可以是任何其他类型的数据。在这种情况下,你的变量是:
$_POST['chapter']
是一个字符串,很有可能 - 当对字符串使用时,PHP将数组索引([0]
等)解释为字符索引(或者对于可以简单地转换的变量)字符串,如整数或浮点数。)这就是为什么你得到的第一个字母而不是第一个字母:只有一个值得到!
当然,您可能会遇到数组值本身就是数组的情况 - 在这种情况下,您可以通过输入$array[0]['candles']
或其他内容来访问该值,但这不是将发生$_POST
数组(总是一个字符串数组。)
答案 3 :(得分:0)
$_POST
作为数组工作,它打印通过表单发布的所有项目值
知道帖子值使用
echo"<pre>";
print_r($_POST);
$_POST
作为数组工作,它包含我们通过表单发布的所有值。
获取每个值我们也可以使用
foreach ($_POST as $value )
{
echo $values."</br>";
}
答案 4 :(得分:0)
$ _ POST ['chapter']不是数组。 $ N返回1 beacuse $ chap不是数组,如果变量不是数组,则count()函数总是返回1.
您可以使用
name="chapter[]"
然后$ _POST ['chapter']应该是一个数组。