在PHP中使用复选框和一个数据库

介绍

在php帮助论坛,如何处理问题的复选框出现很频繁。 通常,人们希望能够选择哪些行数据库的更新/删除/抛出窗外。

这个概念是非常简单的。 它涉及到命名你的复选框作为一个数组,使用mysql条款。 本教程的目的是给一个简单的例子,希望,下次有人问,我可以指出他们的教程,而不是重新解释。

的节目。

数据库

看到我们要更新数据库,我们需要一张桌子和一些数据。 这是一个表之前我做了:

创建表“tutorial_users”(“id”INT(10)非空AUTO_INCREMENT,“用户名”VARCHAR(50)非空,“管理”非常小的整数(1)非空的默认' 0 ',

主键(“id”))引擎=MYISAM

和一些数据。 不用猜也知道我只是在电视上看:

插入“tutorial_users”(“id”,“用户名”,“管理”)

值(

零,“Stewie”,' 0 '),(

零,“彼得”,' 0 '),(

零,“布莱恩”,' 0 '),(

零,梅格的,' 0 '),(

零,“路易斯”,' 0 '),(

零,“克里斯”,' 0 '),(

零,“抹油了失聪的人”,' 0 '),(

零,“困境”,' 0 ');

这是一个简单的设置。 用户的表和字段称为管理,这是该领域我们将更新。

如果你的(或加; 我们都平等机会)谁喜欢一个快速修复的完整代码。 否则,我们会将它分解。

的代码

< ?php
包括(“connect.php”);
美元更新=假;如果(数($ _POST)>0){
美元的管理=$ _POST[“管理”];
到(“intval中”,美元的管理);
美元的管理=内爆(”、“,美元的管理);
mysql_query(“更新tutorial_users设置管理= 0”)或trigger_error(mysql_error(),E_USER_ERROR);
mysql_query(“更新tutorial_users设置管理= 1,id(admin)美元”)或trigger_error(mysql_error(),E_USER_ERROR);
美元更新=真正的;}? >< ! DOCTYPE html公共”——/ / W3C / / DTD的XHTML 1.0 Strict / / EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " ><htmlxmlns=“http://www.w3.org/1999/xhtml”><头><元http-equiv=“内容类型”内容=“text / html; charset = utf - 8”/ ><标题>phpfreaks复选框教程< /标题>< /头><身体>
<表单动作= "< ?php echo $ _SERVER[“PHP_SELF”];? >”方法= " post " >
< ?php
如果(美元更新= = =真正的){
回声“< div >权限更新! < / div > ';}? ><表><tr><th>用户名< /th><th>管理员权限< /th>< /tr>< ?php
美元的sql=“选择id、用户名admin tutorial_users命令id ASC”;
美元的结果=mysql_query(美元的sql)或trigger_error(mysql_error(),E_USER_ERROR);而(列表($ id,美元的用户名,美元的管理)=mysql_fetch_row(美元的结果)){
美元的检查=(美元的管理= =1)吗?”=“检查”检查:”;
回声“< tr > < td >”。美元的用户名。' < / td > < td > < input type = "复选框" name = value =“管理[]”。$ id。“””。美元的检查。' / > < / td > < / tr > '。“\ n”;}? ><tr> <道明colspan=“2”> <输入类型=“提交”的名字=“提交”价值=“更新权限”/ > < /道明> < /tr>< /表>< /形式>< /身体>< /html>

插曲

谢谢你的坚持。 在我们仔细看看这些代码之前,我只是想说一点关于复选框和它们是如何工作的。

你可能意识到很多其他的表单元素,如文本字段,如果你离开他们空白的他们仍然会出现在$ _POST / $ _GET数组——只是一个空白值。

另一方面,复选框更像按钮。 如果你不检查他们,他们不会出现在数组中。 假设你选择他们,他们会把你给他们的价值或在默认情况下。 牢记这一点,以后会很重要。

把它分解

我要开始分解通过代码从打开表单标签,看到之前你必须填写,你可以处理它。

<表单动作= "< ?php echo $ _SERVER[“PHP_SELF”];? >”方法= " post " >
< ?php
如果(美元更新= = =真正的){
回声“< div >权限更新! < / div > ';}

我们有一个标准形式使用post方法,并操作相同的页面。 我们也会显示一条消息如果数据库更新,因为我们这样的好。

<表><tr><th>用户名< /th><th>管理员权限< /th>< /tr>

我们将设置一个表中列出的用户名和特权。 如果你不喜欢表,真不走运。

美元的sql=“选择id、用户名admin tutorial_users命令id ASC”;
美元的结果=mysql_query(美元的sql)或trigger_error(mysql_error(),E_USER_ERROR);

我们从数据库中选择我们需要的字段(不能忘记的id,因为我们将使用此识别每一行)和执行查询错误检查。

而(列表($ id,美元的用户名,美元的管理)=mysql_fetch_row(美元的结果)){

如果你不熟悉这个列表()构造,它允许我们从数字索引数组分配大量的变量。 我厌倦了使用美元行,因此改变。 重要的是要使用mysql_fetch_row(),这样你得到一个数字索引数组(而不是一个关联),你创建的变量与您所选择的顺序相同查询。 看到手册页多一点。

美元的检查=(美元的管理= =1)吗?”=“检查”检查:”;
回声“< tr > < td >”。美元的用户名。' < / td > < td > < input type = "复选框" name = value =“管理[]”。$ id。“””。美元的检查。' / > < / td > < / tr > '。“\ n”;

内部循环,我们首先计算出如果复选框应该自责。 也就是说,如果用户目前拥有管理员权限。 三元操作符的使用使这短暂而甜蜜的。 我们为每个用户然后回声一行。

请注意,我们的名字复选框管理[]。 这意味着$ _POST['管理']是一个数组。 数组中所有标记框的事实。 还请注意,我们将值设置为用户的id。

<tr> <道明colspan=“2”> <输入类型=“提交”的名字=“提交”价值=“更新权限”/ > < /道明> < /tr>< /表>< /形式>< /身体>< /html>

最后,我们做一个提交按钮,完成我们的html。 我不知道你,但是我发现表单没有提交按钮有点不满意。

接下来,我们将看看处理。

处理表单

包括(“connect.php”);
美元更新=假;

首先,我们有一个文件的连接我们数据库。 我会给你文件,但是我个人更愿意保持对自己的用户名和密码。 我们还创建一个变量,说我们还没有更新数据库…。

如果(数($ _POST)>0){
美元的管理=$ _POST[“管理”];
到(“intval中”,美元的管理);

我们的if语句将确保这段代码只运行如果表单被提交。 我们创建一个局部变量$ _POST数组。 然后我们做一些验证。 我们不希望任何讨厌的用户修改这些值的形式做一些SQL注入,我们确保这个数组中的每个值都是一个整数到函数。 再一次看到手册页如果你不太确定这个函数是如何工作的。

“如果我没有整数作为我的价值观?” 好问题。 您可能想使用mysql_real_escape_string(),如下所示:

到(“mysql_real_escape_string”,美元的管理);

或者你可以编写自己的函数来确保值是你期望的东西。

美元的管理=内爆(”、“,美元的管理);

接下来,我们使用内爆()函数将数组变成字符串。 我们用逗号来分隔每一个值。 这将允许我们使用条款。 如果你的价值观不是整数,你必须做些不同的事情。 我将在一分钟内。

mysql_query(“更新用户组管理= 0”)或trigger_error(mysql_error(),E_USER_ERROR);
mysql_query(“更新用户组管理(管理美元)= 1,id”)或trigger_error(mysql_error(),E_USER_ERROR);
美元更新=真正的;

之前我们更新新用户有管理员权限,我们第一次更新数据库,所以没有人。 为什么? 好吧,我们用逗号分隔的列表只包含那些我们想要管理的权利。 所以我们最好确保没有人呢。 我们的第二个查询使用的条款,它允许我们提供一个逗号分隔的值列表,id。

注意:更新每一行的替代品0是使用条款。

使用字符串

如果你的值是字符串,你需要更小心你的内爆和查询。 别忘了,所有在您的SQL字符串必须在报价。 这是一个非常简单的调整,但是它会给你一个错误如果你忘记。 让你的内爆看起来像这样:

美元的管理=内爆(“”、“”,美元的管理);

和你的查询如下:

mysql_query(“更新用户组管理= 1,id(“管理美元”)”)或trigger_error(mysql_error(),E_USER_ERROR);

注意额外的引用,我们我们的价值观解体后,他们可能看起来有点像这个:

1”、“2”、“3”、“4

所以我们需要将引用添加到正面和背面。

那就是了。 现在我们有时间一个简短的总结


猜你喜欢

转载自blog.51cto.com/13957086/2174927
今日推荐