>php教程 >PHP开发 >PHP 및 JavaScript를 사용한 다중 선택 처리

PHP 및 JavaScript를 사용한 다중 선택 처리

高洛峰
高洛峰원래의
2016-11-25 09:49:521515검색

사용자가 목록에서 여러 항목을 선택한 다음 선택한 항목을 삭제할 수 있도록 허용하는 등 처리를 위해 사용자가 여러 가지 선택을 할 수 있도록 해야 하는 경우가 많습니다. 오늘은 PHP와 JavaScript가 각각 다중 선택을 처리하는 방법을 보여주는 예를 들어보겠습니다. 오늘 우리가 작업하고 있는 것은 MySQL 데이터베이스의 itemtable 테이블에 있는 항목에 투표하는 투표 시스템이며, 각 IP는 2개의 투표만 할 수 있습니다.



itemtable 테이블은 다음 MySQL 문을 통해 생성됩니다.

CREATE TABLE `itemtable` (
`id` TINYINT( 4 ) NOT NULL AUTO_INCREMENT,
`name` VARCHAR( 50 ) NOT NULL ,
`votes` SMALLINT( 6 ) NOT NULL ,
PRIMARY KEY ( `id` )
);

필드 "name "는 목록 항목의 이름이고, "votes"는 받은 투표 수입니다. 또한 투표 사용자의 IP를 기록하기 위해 "voteiptable" 테이블을 생성해야 합니다:

CREATE TABLE `voteiptable` (
`id` SMALLINT( 6 ) NOT NULL ,
`voteip` VARCHAR ( 15 ) NOT NULL,
PRIMARY KEY ( `id` )
);

다음으로 "multivote.php" 파일을 작성합니다. 오늘은 데이터베이스 클래스 파일 "dbclass.php"를 사용하겠습니다. ".

<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>请您投票</title>
<style type="text/css">
<!--
body , td{
font-family: "宋体";
font-size: 12px;
}
-->
</style>
</head>
<body>
<?
//包含数据库类文件:
include_once("dbclass.php")//检查该IP是否已经投过票了:
if($db->getfirst("select * from iptable where voteip=&#39;$_SERVER[REMOTE_ADDR]&#39;")){
echo "您已经投过票了,谢谢您的参与!";
}
//这是投票项目列表页面:
if(!$action){
echo "<table width=200 border=0 cellpadding=2 cellspacing=1>";
echo "<form action=&#39;&#39; method=&#39;post&#39; name=&#39;voteform&#39; onsubmit=&#39;return checkform(this)&#39;>";
//我们给每个复选框起这样的名字:check1、check2、check3、……,它们的值分别是项目的id,
//这样到时候我们处理起来就比较方便了:
$myitems=$db->query("select * from itemtable");
$itemNo=0;
while($myitem=$db->getarray($myitems)){
$itemNo++;
echo "<tr><td nowrap style=&#39;cursor:default&#39; onclick=&#39;voteform.check$itemNo.click()&#39;><input name=&#39;check$itemNo&#39; type=&#39;checkbox&#39; value=&#39;$myitem[id]&#39;>$myitem[name]</td></tr> \n";
}
echo &#39;<tr><td><input name="action" type="hidden" value="vote"><BR><input name="submit" type="submit" value="投票"> <input name="reset" type="reset" value="重置"></td></tr> &#39;;
echo "\n</form>\n </table>";
?>
<!-- 现在编写JavaScript程序初步验证用户表单,只允许用户选择两个项目 -->
<script langvage="JavaScript">
<!--
function checkform(myform){
checkedcount=0;
//循环检测复选框是否选中,若是,checkedcount加1:
for(i=1;i<=<?php echo $itemNo ?>;i++){
mycheck=eval("myform.check"+i); //mycheck是复选框对象
if(mycheck.checked==true){
checkedcount++;
}
}
if(checkedcount==2){ //如果只有两个复选框选中,就提交;
return true;
}else{ //否则发出警告:
alert("对不起,您只能投两个项目!");
return false;
}
}
-->
</script>
<?
}
//这是处理用户投票的页面
else if($action="vote"){
//在客户端用javascript检验数据是不安全的,但是可以减轻服务器负担和不用浪费用户时间。
//在服务器再次进行验证经常是必要的。
$itemcount=$db->getfirst("select count(*) as count from itemtable"); //取得项目总数
$checkarray=array();
for($i=1;$i<=$itemcount["count"];$i++){ //和javascript处理的过程是不是很像呢
$mycheck="check$i"; $mycheck=$$mycheck;
if($mycheck && $db->getfirst("select * from itemtable where id=&#39;$mycheck&#39;")){
//之所以加上$db->getfirst("select * from itemtable where id=&#39;$mycheck&#39;")是为防止所投项目id不存在
$checkarray[]=$mycheck; //如果这一项被选中,$checkarray增加一项,值为所选id
}
}
if(count($checkarray)==2){ //如果$checkarray的项数是2,则相应的票数加1:
for($i=0;$i<count($checkarray);$i++){
$db->query("update itemtable set votes=votes+1 where id=&#39;$checkarray[$i]&#39;");
} //把投票用户的IP记入数据库:
$db->query("insert into iptable (voteip) values (&#39;$_SERVER[REMOTE_ADDR]&#39;)");
echo "投票成功,谢谢您的参与!";
}else{ //否则:
echo "对不起,您只能投两个项目!";
}
}
?>
</body>
</HTML>

클라이언트 측 JavaScript와 서버 측 PHP의 다중 선택 처리에는 많은 유사점이 있지만 물론 차이점도 있습니다. 이것은 비교적 고전적인 다중 옵션 처리 프로그램입니다. 사용자의 옵션이 제한되지 않는다면 더 간단할 것입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.