PHP编程: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(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;
}
? >
把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 爱上php,他也会爱上你。 因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 做为1门年轻的语言,php一直很努力。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 实践是检验自己会不会的真理。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
页:
[1]