【问题标题】:Php Checkbox - making check and uncheckPhp Checkbox - 勾选和取消勾选
【发布时间】:2012-02-22 21:52:52
【问题描述】:

我试图解决一个问题。

这是我的代码。

<?php

require 'connectDB.php';
print<<<_A_
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
_A_;
$mysql = new mysql();
$mysql->connect();

$dbResult = mysql_query("select * from profiles");






echo "<form action='#' method='post'>";

$dbResult = mysql_query("select * from profiles");


while ($info = mysql_fetch_array($dbResult)) {

    if ($info['isPremium'] == 0)
        echo "<input type=checkbox name='check2[]' id='check2' value=".$info['id'].">";
    else
        echo "<input type=checkbox name='check1[]' id='check1' value=".$info['id']." checked>";

    echo $info['profileName'] . "<br />";
}

echo "<p><input type='submit' name='btnPremium' /></p>";
echo "</form>";

如果用户单击复选框,我会向 db 发送查询以使其成为 1.However,当用户取消选中复选框时,我会出现此错误:Undefined index: check2 in C:\xampp\htdocs\googleAnalytics \GAPI\choosePremium.php 在第 43 行 我尝试在 arrPremium2 中保持取消选中:S

if (isset($_POST['btnPremium'])) {

    $arrPremium = $_POST['check1'];
    foreach($arrPremium as $result)
    {
        mysql_query("UPDATE profiles set isPremium=1 where id=".$result."");
    }

    $arrPremium2 = $_POST['check2'];
    print_r($arrPremium2);
}
?>

【问题讨论】:

    标签: php


    【解决方案1】:

    您的错误似乎来自:

    $arrPremium2 = $_POST['check2'];
    

    因为如果没有名为 'check2' 的复选框 'checked',则不会有 $_POST 的元素(因此未定义索引)。通过执行以下操作检查它是否存在:

    if(isset($_POST['check2'])) {
        $arrPremium2 = $_POST['check2'];
        // do something
    } else {
        // no check2's, do something else
    }
    

    一些你应该改掉的坏习惯:

    例如checked="checked" 是将复选框标记为选中的正确方法。

    你真的应该有:

     ?>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    

    改为。

    $arrPremium = $_POST['check1'];
        foreach($arrPremium as $result)
        {
            mysql_query("UPDATE profiles set isPremium=1 where id=".$result."");
        }
    

    不要这样做,你会让自己容易受到 MySQL 注入的影响。在使用 $result 更新数据库之前转义它,或者使用准备好的语句。

    【讨论】:

      【解决方案2】:

      复选框只有在被选中时才会给你一个值。否则,表单不会发送任何值。您可以设置一些默认值或使用隐藏输入技巧。

      违约很简单:

      $foo = isset($_POST['foo']) ? $_POST['foo'] : 0;
      

      通过这种方式,您可以获得所有值。它的东西,你必须知道有哪些复选框。

      我建议使用隐藏输入。对于每个复选框,您的 HTML 将如下所示:

      <input type="hidden" name="foo" value="0" />
      <input type="checkbox" name="foo" />
      

      这样,如果您选中复选框,浏览器将发送foo=1,覆盖隐藏字段的值。否则,复选框将不发送任何值,退回到隐藏输入的foo=0

      【讨论】:

        【解决方案3】:

        首先,请清理您的数据库查询,您当前的代码很容易被利用。在 mysql_query() 调用中将 mysql_real_escape_string() 放在 $result 变量周围。

        其次,如果用户未选中该值,则它不会作为 POST 变量发送。相反,您需要使用 isset() 检查它是否存在。

        if(isset($_POST['check2'])){ echo 'user checked this box'; }
        

        始终检查是否使用 isset() 设置了复选框。

        【讨论】:

        • if (isset($_POST['check2'])) { $arrPremium = $_POST['check2']; foreach ($arrPremium as $result) { mysql_query("UPDATE profiles set isPremium=1 where id=" . $result . ""); } } else { mysql_query("UPDATE 配置文件集 isPremium=0 where id=" . $result . ""); } 否则不起作用:(
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-17
        • 2021-01-26
        • 1970-01-01
        • 2015-01-08
        相关资源
        最近更新 更多