如何实现PHP Checkbox处理和相应更新MySQL数据库

时间:2013-06-19 18:33:47

标签: php html mysql

我的目标是允许用户更新当前是否有多个成员处于活动状态。让我解释一下到目前为止我做了什么。

这是我的表单/表在浏览器中的样子:

Table Exmaple

唯一可以修改的部分显然是带有复选框输入的“当前发布者”列。这是生成表的代码:

public function selectAllMembers()
        {
            //Declerations
             $i =""; 

            $stmt = $this->dbh->prepare("SELECT UserId, Firstname, Lastname, Active, UserPriv FROM Members;"); //Select ALL data from table, Perhaps had a limit later 
            $stmt->execute(); //Execute the query
            $result = $stmt->fetchAll(PDO::FETCH_NUM); //Fetch all of the data

            //Display results
            echo "<form name=\"UpdateUser\" method=\"Post\" action=\"\">";
            echo "<table border='1'>
            <tr>
            <th>User Id </th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Current Publisher</th>
            <th>User Priveleges</th>
            </tr>
            <tr>";

            if($result == false) 
                echo "<td>For some reason, there are no memebers.</td></tr></table>"; //Just in case there are no members...:)

            else
            {
                foreach($result as $row)
                    foreach($row as $col)
                    {

                        $i++;

                        switch ($i) { 
                            case 4: //Is it a current publisher?
                                if($col == 0) 
                                    echo "<td><input type=\"checkbox\" class=\"current\" value=\"1\" ></td>";
                                else
                                    echo "<td><input type=\"checkbox\" class=\"current\" value=\"1\" checked ></td>";
                                break;

                            case 5: //Do they have user priveleges?
                                if($col == 0)
                                    echo "<td>No</td>";
                                else
                                    echo "<td>Yes</td>";
                                echo "</tr><tr>"; //start a new row
                                $i=0; //reset counter
                                break;

                            default:
                                echo "<td>$col</td>";

                        }

                    }
                echo "</tr></table>";
                echo "</form>";
            }
        }

switch语句中的case 4和case 5确定它是true还是false(我在MySQL数据库中分别使用1或0表示true或false)。同样在案例4中,我将true或false转换为输入复选框。

我想做的是提交时(我的表单还没有提交按钮),有一个功能可以比较“当前发布者”列的任何更改。如果有任何更改,请更新相应的表。现在,每个人都很活跃。说Bob Smith不再活跃,我希望他在表中的值变为false。

我有几个问题实现这个。

1)如何修改我的复选框,使其可以与PHP进行比较/处理?这就是他们现在的情况:

<input type="checkbox" value="1">

我已经看到了一些关于如何提交多个复选框并随后使用PHP处理它们的示例。例如,我可以修改它们:

<input type="checkbox" name="member[]" value="1">

我的想法是使用用户ID作为名称,因为它始终是唯一的。然后我也可以在SQL查询中使用它来识别正确的用户。

2)如何根据输入更新我的表格?我应该只使用更新查询更新所有内容,还是只查看更改了哪些值?什么是最有效的?

任何帮助都将受到赞赏 - 特别是以示例的形式。如果有任何问题,请将它们放在评论中。我希望我传达了我想要做的事情的关键。

注意:如果没有“选中”复选框,也会出现无法提交的问题。这有什么变通方法吗?我已经看到了一个javascript解决方法,但是假设用户启用了javascript(我不知道谁不再使用,但我至少应该考虑这种可能性)。

2 个答案:

答案 0 :(得分:0)

考虑到内容,您只能打印&#34;名字/姓氏/当前发布者/用户权限&#34;并保留用户ID;

相反!,使用用户ID作为链接。我知道你知道如何创建基本表,你可以添加这种选项

<强> @ testallmembers.php

    <table>
        <tr>
           <td><a href="edit.php?id=<?php echo $row['user_id']?>">Edit</a></td>
           <td>F_NAME</td>
           <td>L_NAME</td>
           <td>CURRENT_PUBLISHED</td>
           <td>USER_PRIVILEGE</td>
        </tr>
    </table>

使用$ row [&#39; user_id&#39;]或您在sql中拥有的任何行索引都应该是可编辑的。

<强> @ edit.php

在edit.php中你必须使用这个

    if(isset($_GET['id']) && !empty($_GET['id'])) {
        /*
        * use mysqli_real_escape_string to quote the id, for anti sql attacks
        * if you know PDO then use predefined.
        */

        //[SQL CODE HERE] - search the $_GET['id'] basing from the user_id

        /* then print the "EDITABLE FORM" 
        *  SAMPLE: <form method='post' action='edit.php'>
        *               <input type='text' name='f_name' value='<?php $row['f_name']?>' />
        *               <input type='submit' name='submit'/>
        *          </form>  
        */  

    //using $_POST['submit'] to get the EDITABLE form
    }elseif(isset($_POST['submit'])) {
        /*
        *   Save the values to your database, you also need to check first the input values for anti sql injection..
        */
    }

答案 1 :(得分:0)

我认为你正在处理db result(关联数组)。 试试这个:

$stmt = $this->dbh->prepare("SELECT UserId, Firstname, Lastname, Active, UserPriv FROM Members;"); //Select ALL data from table, Perhaps had a limit later 
$stmt->execute(); //Execute the query
$result = $stmt->fetchAll(PDO::FETCH_NUM); //Fetch all of the data

//..... your html.....

for ($i = 0; $i < count($result); $i++)
{
    if($result[$i]['currentPublisher'] == 0) 
    {
      echo "<td><input type=\"checkbox\" name=\"$result[$i]['currentPublisher']\" class=\"current\" value=\"0\" ></td>";
      // NOTE: The value need to be 0   
    }
    else
    {
       echo "<td><input type=\"checkbox\" name=\"$result[$i]['currentPublisher']\" class=\"current\" value=\"1\" checked ></td>";
    }
}

//..... your html.....