【问题标题】:PHP Array only returning first character of stringPHP数组只返回字符串的第一个字符
【发布时间】:2012-11-17 06:40:01
【问题描述】:

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

合十礼

【问题讨论】:

  • 使用 foreach($_POST as $value){ echo "values=".$value."";} 了解 Post 项目的每个值使用 print_r($_POST );
  • 7 和 13 都选择时是否有效?
  • @AnkurSaxena 如果你有答案写在答案部分..
  • @Douglas 不,我显示的 var_dump 是在选中两个框之后。 $N = count($chap); 每次都在重新调整 1。

标签: php sql arrays string forms


【解决方案1】:

$_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>

【讨论】:

    【解决方案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>
    

    【讨论】:

      【解决方案3】:

      Molle 博士和 Douglas 都是正确的,但我想扩展一下他们的答案。

      $_POST 一个数组。它可以包含各种值,可以是key =&gt; value 结构,也可以是一系列数字索引的值。每个值都可以是任何其他类型的数据。在这种情况下,您的变量:

      $_POST['chapter']

      是一个字符串,最有可能 - PHP 将数组索引([0] 等)解释为一个 character 索引,当用于字符串(或可以简单地转换为字符串的变量时) ,比如整数或浮点数。)这就是为什么你得到第一个字母而不是第一个值的原因:只有一个值可以得到!

      当然,您可能会遇到数组的值本身就是数组的情况 - 在这种情况下,您可以通过键入 $array[0]['candles'] 或其他内容来访问该值,但 @ 不会发生这种情况987654326@ 数组(始终是字符串数组。)

      【讨论】:

      • 感谢您的实际解释。我想知道为什么它在我的其他脚本而不是这个脚本中起作用。
      • 没问题。祝你的剧本好运!
      【解决方案4】:

      $_POST['chapter'] 不是数组。 $N 返回 1 因为 $chap 不是数组,如果变量不是数组,则 count() 函数总是返回 1。

      你可以用like

       name="章节[]" 

      那么 $_POST['chapter'] 应该是一个数组。

      【讨论】:

        【解决方案5】:

        $_POST 作为数组工作,它打印通过表单发布的所有项目值 要知道帖子值使用

        echo"<pre>";
         print_r($_POST);
        

        $_POST 作为数组工作,它包含我们通过表单发布的所有值。

        为了获取每个值,我们也可以使用

        foreach ($_POST as $value ) 
        {
           echo $values."</br>";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-03
          • 1970-01-01
          • 1970-01-01
          • 2020-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多