|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。数据|数据库 引见
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;
}
? >
把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。 |
|