【问题标题】:how to retrieve Checkbox checked event stored in database如何检索存储在数据库中的复选框选中事件
【发布时间】:2014-08-29 06:30:35
【问题描述】:

我只是在我的项目中遗漏了几行代码。我有复选框和提交按钮。用户单击复选框,单击时他将过滤选项。我将复选框检查结果作为序列化数组存储到数据库中,并将其作为反序列化数组进行检索,因此每当我刷新页面时,我都会正确获取过滤器复选框结果。唯一的问题是当我刷新页面时我的复选框没有显示为选中状态。它正确显示结果并存储到数据库中,但我无法维护复选框事件。我想我在 html 输入类型中缺少 1 行代码。我的反序列化数组存储在 $config 变量中。 这是我的代码: html代码:

    if($param['aktion'] == 'get-widget-vehicle-edit')
{
    $page['register-fahrzeuge'] = array(
        0   => array( 'FAHRZEUGE','enabled',$page['script'],''),
        1   => array( 'EDIT-FAHRZEUGE','aktiv',$page['script'],'',''),  
    );

    $html = '<table width="538" cellspacing="0" cellpadding="0" border="0">
            <tr>
                <td>
                    <div>'.CreateRegister($page['register-fahrzeuge']).'</div>
                    '.CreateMessage().'
                    <div class="cont-liste-verlauf register">
                        <table id="FAHRZEUGE" >
                            <tr>
                                <td>';
    <table id="FAHRZEUGE" >
                                <tr>
                                    <td>
                                    <input type="checkbox" name="Anzahl_Fahrzeuge_ohne_Bilder" id="Anzahl_Fahrzeuge_ohne_Bilder" checked />
                                    <label for="Anzahl_Fahrzeuge_ohne_Bilder">Anzahl_Fahrzeuge_ohne_Bilder</label><br>

                                    <input type="checkbox" name="Fahrzeuge_ohne_Preis" id="Fahrzeuge_ohne_Preis" value="Fahrzeuge_ohne_Preis" checked />
                                    <label for="Fahrzeuge_ohne_Preis">Fahrzeuge_ohne_Preis</label><br>

                                    <input type="checkbox" name="Fahrzeuge_mit_Fehlern" id="Fahrzeuge_mit_Fehlern" value="Fahrzeuge_mit_Fehlern" checked />
                                    <label for="Fahrzeuge_mit_Fehlern">Fahrzeuge_mit_Fehlern</label><br>

                        <input type="checkbox" name="Herausforderungen" id="Herausforderungen" value="Herausforderungen" checked />
                                    <label for="Herausforderungen">Herausforderungen</label><br><br>                

                            </td>
                        </tr>
                            </table>
$html .= '</td>
                    </tr>
                        </table>
                        '.CreateButton($page['button']).'
                    </div>
            </td>
        </tr>
    </table>';

    $return = array(
        'status' => 1,
        'html'  => $html
    );

    echo json_encode($return);
    die();
}

php 代码:

    if($param['aktion'] == 'get-widget-vehicle')
{
    $page['register-fahrzeuge'] = array(
        1   => array( 'FAHRZEUGE','aktiv',$page['script'],''),
        0   => array( 'EDIT-FAHRZEUGE','enabled',$page['script'],'',''),    
    );        

            /*when empty default config...
            $query=    "SELECT dashboard_widget.configuration FROM dashboard_widget WHERE Id =1"; 
            */ 

           $query ="SELECT dashboard_widget_users.configuration
                                         FROM dashboard_widget_users
                                         INNER JOIN yw_user ON dashboard_widget_users.dsnr_yw_user = yw_user.intern
                                         INNER JOIN dashboard_widget ON dashboard_widget_users.dsnr_dashboard_widget = dashboard_widget.id
                                         WHERE dashboard_widget_users.dsnr_yw_user=".$user_id." AND dashboard_widget.id=1 ";  
                    $result = mysql_query($query, $myConnection);               


        $html = '<table width="538" cellspacing="0" cellpadding="0" border="0" >
            <tr>
                <td>
                <div>'.CreateRegister($page['register-fahrzeuge']).'</div>
                '.CreateMessage().'
                <div class="cont-liste-verlauf register">';
                    if($row = mysql_fetch_assoc($result)) 
                    {
                        $empty_config=$row['configuration'];
                        if(empty($empty_config )) {
                            $sql="SELECT dashboard_widget.configuration FROM dashboard_widget WHERE Id =1";
                            $sql_result = mysql_query($sql, $myConnection);
                            $results = mysql_fetch_assoc($sql_result);  
                            $config= unserialize($results['configuration']);                            
                        }
                        else{
                        $config= unserialize($row['configuration']);
                        }

                        foreach($config as $val)
                        {
                            if($val == 'Anzahl_Fahrzeuge_ohne_Bilder')
                            {

                                $sql='SELECT count( * ) as bilder FROM autodo.amo_bilder_live l LEFT JOIN autodo.afzdaten a ON l.dsnr_afzdaten = a.dsnr WHERE l.dsnr_afzdaten IS NULL';
                                $sql_result=mysql_query($sql);
                                $results=mysql_fetch_assoc($sql_result); 
                                $configVehicleWidget[$val]['count'] = $results['bilder'];

                            }
                            else if($val == 'Fahrzeuge_ohne_Preis')
                            {
                                $sql='SELECT count(*) as Preis FROM autodo.afzdaten WHERE Preis IS NULL';
                                            $sql_result=mysql_query($sql);
                                            $results=mysql_fetch_assoc($sql_result);
                                            $configVehicleWidget[$val]['count'] = $results['Preis'];
                            }
                            else if($val == 'Fahrzeuge_mit_Fehlern')
                            {
                                $sql='SELECT count(*) as fehler FROM autodo.afzdaten WHERE fehler IS NULL';
                                $sql_result=mysql_query($sql);
                                $results=mysql_fetch_assoc($sql_result);
                                $configVehicleWidget[$val]['count'] = $results['fehler'];

                            }
                            else if($val == 'Herausforderungen')
                            {
                                $sql='SELECT count(*) as herausforderung FROM autodo.afzdaten WHERE herausforderung IS NULL'; 
                                $sql_result=mysql_query($sql);
                                $results=mysql_fetch_assoc($sql_result);
                                $configVehicleWidget[$val]['count'] = $results['herausforderung'];
                            }                       

                            if($configVehicleWidget[$val]['count'] > 0)
                            {
                                $html .= '<a href="'.$configVehicleWidget[$val]['link'].'" style="color:red;">'.'<image src="'.$configVehicleWidget[$val]['image'].'" width="30" height="25" align="middle">.'.$configVehicleWidget[$val]['count'].' '.$configVehicleWidget[$val]['linkName'].'<br>'.'<br>'.'</a>';
                            }
                            else
                            {
                                $html .='<span style="color:green;">'.'<image src="'.$configVehicleWidget[$val]['image'].'" width="30" height="22" align="middle">.'.$configVehicleWidget[$val]['textAllOK'].'<br>'.'<br>'.'</span>';
                            }                           
                    }
                }

                $html .= '              
            </div>          
            </td>
        </tr>
    </table>';

    $return = array(
        'status' => 1,
        'html'  => $html
    );

    echo json_encode($return);
    die();
}

【问题讨论】:

    标签: php arrays checkbox state


    【解决方案1】:

    如果您的复选框被选中,则需要输出“checked”,如果未选中,则不需要。

    “checked”值已经从数据库中检索到了(在这种情况下不需要使用 session)。

    这是一种方法:

    <?php
    
    $is_checked = true;
    
    if ($is_checked)
    {
        // checked
    
        ?>
        <input type="checkbox" name="a" checked />
        <?php
    }
    else
    {
        // not checked
    
        ?>
        <input type="checkbox" name="a" />
        <?php
    }
    
    
    ?>
    

    这是做同样事情的更紧凑的方法:

    <?php
    
    $is_checked = true;
    
    // this will output either "checked" or nothing ""
    echo '<input type="checkbox" name="a" ' . ($is_checked ? 'checked' : '') . ' />';
    
    
    ?>
    

    编辑:这是一个如何从数据库中检索 $is_checked 值的示例。

    使用以下 SQL 创建一个测试表并用示例数据填充它:

    CREATE TABLE test
    (
    `user_id` int(11),
    `checkbox_name` varchar(256),
    `is_checked` int(11)
    );
    
    
    INSERT INTO test (`user_id`, `checkbox_name`, `is_checked`)
    VALUES
    ('1', 'a', '0'),
    ('1', 'b', '1'),
    ('1', 'c', '0'),
    ('2', 'a', '0'),
    ('2', 'b', '1'),
    ('2', 'c', '1')
    ;
    

    用 PHP 检索数据:

    <?php
    
    function is_cb_checked ($user_id, $checkbox_name)
    {
    
        $q = mysql_query ('select * from test where user_id = ' . (int)$user_id . " and checkbox_name = '" . mysql_real_escape_string ($checkbox_name) . "'" );
    
        $row = mysql_fetch_assoc ($q);
    
        $is_checked = ($row['is_checked'] > 0 ? true : false);
    
        return $is_checked;
    }
    
    
    $user_id = 2;
    
    
    $a_is_checked = is_cb_checked ($user_id, 'a');
    $b_is_checked = is_cb_checked ($user_id, 'b');
    $c_is_checked = is_cb_checked ($user_id, 'c');
    
    
    echo 'a = <input type="checkbox" name="a" ' . ($a_is_checked ? 'checked' : '') . ' /><br/>';
    echo 'b = <input type="checkbox" name="b" ' . ($b_is_checked ? 'checked' : '') . ' /><br/>';
    echo 'c = <input type="checkbox" name="c" ' . ($c_is_checked ? 'checked' : '') . ' /><br/>';
    

    【讨论】:

    • 您好,我尝试过同样的方法,但它不起作用...您能告诉我它如何通过仅使用 $is_checked=true 知道我的复选框是否来自数据库?请检查您修改后的答案...
    • 我编辑了我的答案并添加了一个示例代码,用于从数据库中检索复选框值
    • 我认为存在误解,我将复选框选中的结果以数组的形式存储在数据库中,并从未序列化的方式中恢复它正常工作只需要显示选中了哪个复选框,以便我可以即使在页面刷新后也保持状态。在 if($param['aktion'] == 'get-widget-vehicle') 条件下,我将我的 unserailize 数组存储在 $config 变量中....只是想使用该变量来检查 if($param['aktion'] == 'get-widget-vehicle-edit') 函数中检查了哪个复选框...
    【解决方案2】:

    如果您想在页面加载时选中所有复选框, 你可以在 $( 文档 ).ready() document.getElementById("myCheck").checked = true;

    【讨论】:

      【解决方案3】:

      你会想要改变这个

      <input type="checkbox" name="Fahrzeuge_mit_Fehlern" id="Fahrzeuge_mit_Fehlern" value="Fahrzeuge_mit_Fehlern" checked />
      

      对于这样的事情,不确定当您将复选框值从数据库中取出时会是什么样子

      <input type="checkbox" name="Fahrzeuge_mit_Fehlern" id="Fahrzeuge_mit_Fehlern" value="Fahrzeuge_mit_Fehlern" <?php echo (isset($config['Fahrzeuge_mit_Fehlern'])) ? 'checked="true"' : ''; ?> />
      

      如果你的复选框被选中,基本上告诉它,应用选中的属性,否则不要,我想它们现在总是被选中。

      当然,您需要在创建 html 输出之前提取数据库内容。

      【讨论】:

      • 请检查修改后的代码现在复选框也没有显示...你能告诉我我在哪里做错了吗?我的数组存储在 $config 变量中,所以我应该放入会话变量并检查输入类型复选框吗?
      • 你没有 php 标签和 echo,或者他们只是没有显示 ,没关系我现在看到它们是一个字符串。
      • 我在 php 中编写此代码,所以我不能在 php 中使用 php 标签...我已将 html 代码放入 php var ...
      • 为什么,你在为表单做ajax?或提交时正常页面重新加载。
      • 您是否缺少 foreach($config as $val) 上的结尾 } 还是只是复制粘贴错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多