PHP数组只返回字符串的第一个字符

时间:2012-11-17 06:40:01

标签: php sql arrays string forms

我正在使用复选框来更改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']不是数组吗?为什么它只返回字符串中的第一个字符?

合十

5 个答案:

答案 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']应该是一个数组。