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

介绍
checkbox是一个相当低价的页面表单项,在让客户张开多重采纳的图景下,它以致足以允许客户挑选一切门类也许三个都不选。不过,即便那是贰个丰盛精彩的表单成分,但在大家的劳作中,在什么科学地保留选择项那地点总存在部分易混淆的事态产生。本文将呈报在坚决守护好的数据库设计条件的秘诀下,怎么样把checkbox接受项正确地保存在数据库中。
必要本文将解说如何把选择项准确地保存在客户数据库中的方法。即便这里包蕴了平价的PHP代码,但本人将从数据库设计的见解来发挥它们,所以,你能够很有益地采用任何叁个数据库和劳务器端脚本语言来落成。笔者只是想提供二个什么样做的办法,让你能应用于您和睦的站点中。借令你想运行这里的源码,你要求设置php、mysql和互连网服务器。
例1:招聘站点
倘使你被必要做两个招徕约请类的网址,允许求职的软件开荒职员填写他们的才具,让雇主能访谈这些站点并依照求职者的手艺找到确切的职工。你也驾驭,三个开垦职员具有的本领悟多于一个,由此你说了算那样设计你的站点。
每八个求职者将允许访谈本站,注册二个顾客,况且输入他的技能,Checkbox就派上用处了,你或许想作那样的一页:
__ PHP __ MySQL __ Zope __ Perl __ Javascript __ JSP
[提交]
每三个求职都得以选择她所具备的本事。显著对于分裂人来讲那选取项是分歧的。一位恐怕会是PHP和Mysql,其余人大概只是JSP。你将什么保存那么些选取呢?七个很当然的主张是指向各种选项建三个字段,这样开端能够健康办事。不过随后你可能会意识,当你想扩张或调度时,麻烦就来了,你恐怕只好改正你的表结构。
好的措施应是这般的:
你应有一个顾客表富含客户的登记音讯,如顾客名、密码和其余一些您需求的什么内容。借令你直接接纳本文前面给出的源码,你要建四个简易的表如下:
id username 1 User1 2 User2 3 User3 大家先建二个表 “const_skills”
用如下的 SQL 语句: SQL CREATE TABLE const_skills ( id int not null
primary key, value varchar(20State of Qatar 卡塔尔; 以后我们插足能力: SQL INSERT INTO
const_skills(id, value) VALUES (1, “PHP”); SQL INSERT INTO
const_skills(id, value) VALUES (2, “MySQL”); SQL INSERT INTO
const_skills(id, value) VALUES (3, “Zope”); SQL INSERT INTO
const_skills(id, value) VALUES (4, “Perl”); SQL INSERT INTO
const_skills(id, value) VALUES (5, “Javascript”); SQL INSERT INTO
const_skills(id, value) VALUES (6, “JSP”); 你的 const_skills
现在应是那般的: id value 1 PHP 2 MySQL 3 Zope 4 Perl 5 Javascript 6 JSP
那几个表只是让顾客能够筛选相应的本事,以后,再建一个表 lookup_skills
用如下的SQL: SQL CREATE TABLE lookup_skills ( id int not null
auto_increment primary key, uid int, skill_id int );
这个表lookup_skills的目标是提供从客商表到开垦工夫表之间的一个映射关系。换句话说,它让大家保留开垦者和她们一些技艺,如,当求职者完结选拔点击提交时,大家将填写那些表用checkbox中被选定的这几个值。对于每三个选上的手艺,大家在此个表中加一条记下,记下客户id及所筛选的id。
在大家看那一个插入记录的代码早前,我们先规划一下以此页面,应有的始末有贰个表单,大家能够查询的数据库而且取checkbox标签从const_skills表中,建这些checkbox表单项。
代码如下: ?php /* insert code to connect to your database here */ /*
get the checkbox labels */ $skills =
get_checkbox_labels(“const_skills”); /* create the html code for a
formatted set of checkboxes */ $html_skills =
make_checkbox_html($skills, 3, 400, “skills[]”); ? html body br form
name=”skills” method=”POST” action=”insertskills.php” Check off your web
development skills: ? echo “$html_skills”; ? br input type=”submit”
value=”Submit” /form /body /html ?php function
get_checkbox_labels($table_name) { /* make an array */ $arr =
array(); /* construct the query */ $query = “SELECT * FROM
$table_name”; /* execute the query */ $qid = mysql_query($query);
/* each row in the result set will be packaged as an object and put in
an array */ while($row= mysql_fetch_object($qid)) { array_push($arr,
$row); } return $arr; } /* Prints a nicely formatted table of checkbox
choices. $arr is an array of objects that contain the choices $num is
the number of elements wide we display in the table $width is the value
of the width parameter to the table tag $name is the name of the
checkbox array $checked is an array of element names that should be
checked */ function make_checkbox_html($arr, $num, $width, $name,
$checked) { /* create string to hold out html */ $str = “”; /* make
it */ $str .= ” table width=”$width” border=”0″ n”; $str .= ” tr n”;
/* determine if we will have to close add a closing tr tag at the end
of our table */ if (count($arr) % $num != 0) { $closingTR = true; } $i
= 1; if (isset($checked)) { /* if we passed in an array of the
checkboxes we want to be displayed as checked */ foreach ($arr as $ele)
{ $str .= ” td input type=”checkbox” name=”$name” value=”$ele- id””;
foreach ($checked as $entry) { if ($entry == $ele- value) { $str .=
“checked”; continue; } } $str .= ” “; $str .= “$ele- value”; if ($i %
$num == 0) { $str .= ” /tr n tr “; } else { $str .= ” /td n”; } $i++; }
} else { /* we just want to print the checkboxes. none will have checks
*/ foreach ($arr as $ele) { $str .= ” td input type=”checkbox”
name=”$name” value=”$ele- id” “; $str .= “$ele- value”; if ($i % $num ==
0) { $str .= ” /tr n tr “; } else { $str .= ” /td n”; } $i++; } } /*
tack on a closing tr tag if necessary */ if ($closingTR == true) { $str
.= ” /tr /table n”; } else { $str .= ” /table n”; } return $str; } ?

那代码是特别简单的,你飞速地就看完了吗。主要的劳作有四个函数实现:”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是一个不错的表单成分,正如本文所探讨的。小编希望那推进你用它们来干活,创建一个数目驱动的网址。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图