Heim  >  Artikel  >  php教程  >  Mehrfachauswahlverarbeitung mit PHP und JavaScript

Mehrfachauswahlverarbeitung mit PHP und JavaScript

高洛峰
高洛峰Original
2016-11-25 09:49:521501Durchsuche

Wir müssen Benutzern häufig die Möglichkeit geben, mehrere Auswahlmöglichkeiten für die Verarbeitung zu treffen, z. B. indem wir Benutzern erlauben, mehrere Elemente in einer Liste auszuwählen und die ausgewählten Elemente dann zu löschen usw. Heute werde ich ein Beispiel geben, um zu veranschaulichen, wie PHP und JavaScript jeweils mit Mehrfachauswahlen umgehen. Was wir heute arbeiten, ist ein Abstimmungssystem, um für Elemente in der Itemtable-Tabelle der MySQL-Datenbank abzustimmen, und jede IP kann nur zwei Stimmen abgeben.



Die Tabelle itemtable wird durch die folgende MySQL-Anweisung erstellt:

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

Das Feld „name „ ist der Name des Listenelements und „Stimmen“ ist die Anzahl der erhaltenen Stimmen. Wir müssen auch eine Tabelle „voteiptable“ erstellen, um die IP der abstimmenden Benutzer aufzuzeichnen:

CREATE TABLE `voteiptable` (
`id` SMALLINT( 6 ) NOT NULL ,
`voteip` VARCHAR ( 15 ) NOT NULL,
PRIMÄRSCHLÜSSEL ( `id` )
);

Als nächstes schreiben wir die Datei „multivote.php“. Heute werden wir eine Datenbankklassendatei „dbclass.php“ verwenden ".

<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>

Wir können feststellen, dass es viele Ähnlichkeiten bei der Verarbeitung von Mehrfachauswahlen durch clientseitiges JavaScript und serverseitiges PHP gibt, aber natürlich gibt es auch Unterschiede. Dies ist ein relativ klassisches Multioptionsverarbeitungsprogramm. Es wäre einfacher, wenn die Optionen des Benutzers nicht eingeschränkt wären.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn