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

这代码是特别轻巧的,你急迅地就看完了吗。主要的行事有五个函数完结:”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, -2State of Qatar; $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是叁个地利人和的表单成分,正如本文所研商的。笔者盼望那有利于你用它们来行事,创制二个数码驱动的网址。

介绍
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(20卡塔尔国 卡塔尔; 今后大家进入工夫: 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; } ?

发表评论

电子邮件地址不会被公开。 必填项已用*标注