PHP中在数据库中保存Checkbox数据(2)

2016-02-19 12:13 12 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐PHP中在数据库中保存Checkbox数据(2),无聊中的都看过来。

【 tulaoshi.com - Web开发 】


这代码是非常简单的,你很快地就看完了吧。主要的工作有两个函数完成:"get_checkbox_labels" 和 "make_checkbox_html"。其中 "get_checkbox_labels" 查询表const_skills 并且返回一个对象数组,每一个对象有一个id值和相应的技能名称。我们传送这个数组和其它一些参数给"make_checkbox_html" ,这个函数将返回一个字串,用来生成checkbox的html代码。现在我们把这个字串插入html文件来生成我们需要的包含有各种技能选择的表单。注意我并没有传送变量 $checked 给"make_checkbox_html",这个参数是一个我们要显示的checked的对象数组。如果一个用户学会了一项新的技能,我们可以提供一个“编辑技能“页,显示的checkbox框中保存的用户的技能项应是被预先 checked。

用这种方法来动态创建一个表单相对于用一个固定的html代码来生成技能checkbox的好处在哪?嗯,或许我们允许求职者选择一个在我们的表const_skills中原先没有的项目,如DHTML,这样,我们可以将它插入表const_skills中,然后,求职者来访问我们的站点,就会发现多了一个DHTML选项。这一切无需调整html文件。

插入 lookup_skills

现在我们已经创建了这个表单,下面我们需要保存这个用户所选的技能。在make_checkbox_html函数中,我们用skill[]调用每一个选择项元素,意味着我们可以以数组元素的形式访问每个选择项。这样我们可以插入把这个选择插入表lookup_skill中。如果用户选中5个选项,我们就在lookup_skill中插入5条记录。记住在表lookup_skills中每一条记录只有两个字段用户id和技能id。在我的这个例子站点中,用户可以注册,然后能创建/编辑他们的简介。你可能要用session来保存userid,当他们登录后。但如何管理userid超过了本文的范围。

下面的代码,我们假定我们可能访问这个userid用这个变量名$uid,下面就是插入记录的函数代码:


/* the function we call to insert.
the $skills argument is the skills array that
is sent to the script when the user hits the submit button
*/
function insert_skills($uid, $skills) {

/* first, we'll delete any entries this user already has
in the table */
purge_lookup("lookup_skills", $uid);

/* now create the sql insert query */
$query = create_checkbox_query($skills, "lookup_skills", $uid);

/* execute the query */
mysql_query($query);
}

/* helper function for insert_skills().
removes all rows in $table with $uid */
function purge_lookup($table, $uid) {
$q = "DELETE FROM $table, WHERE uid = '$uid'";
mysql_query($q);
}

/* helper function for insert_skills().
generates the sctual SQL query */
function create_checkbox_query($arr, $table, $uid) {
$q = "INSERT INTO $table (uid, skill_id) VALUES";

foreach ($arr as $check) {
$q .= " ( $uid , $check )" . ",";
}

/* remove the last comma and return */
return substr($q, 0, -1);
}

?

很简单吧。现在你知道如何从表const_skill读记录来动态创建一个表单,也知道如何保存用户选择的技能到表lookup_skills中。下面我们要做什么?让我们看一下搜索吧
搜索

当一个雇主来找一个网络开发人员时,他来到你的搜索页面,你可以显示同样的一个表单并且允许他选择他想要雇员拥有的技能。你取到了他选中的技能的数组,然后你可以遍历这个数组,用一个SQL语句找出拥有此技能的求职者,你可以显示这个列表或结果,并允许搜索者点一个项目显示它的详细信息。下面的这个函数描述了如何创建这个查询语句:


/* builds a query to search for the skills
checked off in the $skills array */

function skill_search($skills) {
if (!empty($skills)) {
$query = "SELECT DISTINCT user.username
FROM user, const_skills, lookup_skills
WHERE lookup_skills.uid = user.id
AND lookup_skills.skill_id = const_skills.id ";

$query .= " AND (";
foreach ($skills as $check) {
$query .= " const_skills.id = $check OR";
}

/* remove the final OR */
$query = substr($query, 0, -2);
$query .= ")";

$count = count($skills);
$query .= " GROUP BY user.username HAVING count(user.username) = $count";

$query .= ";";
return $query;
}
}

?

如果执行了搜索 PHP 和 Javascript ,这个函数返回这个语句:

SELECT DISTINCT user.username FROM user, const_skills, lookup_skills WHERE lookup_skills.uid = user.id AND lookup_skills.skill_id = const_skills.id AND ( const_skills.id = 3 OR const_skills.id = 5 ) GROUP BY user.username HAVING count(user.username) = 2;

这个函数将返回你所选择的项目的逻辑与,这就是说,如果我们选了PHP 和Javascript 两项,只会返回*同时*拥有PHP 和 Javascript两种技能的求职者的username。如果你想要找拥有其中任一个技能的求职者,你可以用 PHP *OR* Javascript ,如果你想显示相同的记录,你可以去掉最后的"GROUP BY..." 子句。


总结

好了,就是这样。checkboxes是一个优秀的表单元素,正如本文所谈论的。我希望这有助于你用它们来工作,创建一个数据驱动的网站。

来源:http://www.tulaoshi.com/n/20160219/1600253.html

延伸阅读
通常我们使用以下的代码进行记录循环: Dowhilenotrecords.eof combo1.additemrecords![FullName] records.movenext loop 结果是每个循环中数据库都要进行一次数据结束测试。在大量的记录的情况下,浪费的时间相当大。而使用以下的代码,可以提高近1/3的速度: records.movelast intRecCount=records.RecordCo...
标签: Web开发
如何在数据库中用好Transaction? 在ASP的实际操作中,总会发生这样的情况,如在银行,从我的帐户往费文华的帐户划款, 我的帐户显示已经划出,但因银行的系统出现故障,导致费文华帐户的数据库更改失败, 这应该怎样处理呢?我帐户的金额应该没有损失吧? 你的利益当然没有损失,已经更改的帐户数据库资料会自动恢复。 这里用到的就是互动功能...
如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文件,怎样访问和使用这些文件。  本文概述:  。在mysql中建立一个新的数据库  。一个怎样储存文件的例子程序  。一个怎样访问文件的例子程序  在mysql中建立一...
标签: PHP
  PHP中对数据库操作的封装 在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序。这是一件枯燥、费时而且容易出错的功作。其实我们可以用PHP中的类来实现对数据库操作的封装,从而使写出的程序在很小的改动下就可以完成后台数据库的更改。 现在我们把其封装在dbfz.inc中,其...
完整性约束 完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束: Check NOT NULL Unique Primary Foreign key 完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了...

经验教程

237

收藏

22
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部