ホームページ >バックエンド開発 >PHPチュートリアル >[php] 投票システム管理者の一部、投票の追加と削除
[php] 投票システム管理者パート、投票の追加と削除
卒業制作ではないので投票システムの導入については多くは語りません
主にphpの使い方について話します投票システムは、他の通常のシステムと同様に、管理者部分と一般ユーザー部分の 2 つの部分に分かれています
投票システムの管理部分に関しては、非常に簡単です投票を増やすための 2 つの部分の機能を提供します。投票
を削除するための鍵は、データベース テーブルを設計することです。
は、次のように投票を格納するように計画されています。投票が削除されたかどうかの説明。votechildren テーブルには、選択肢と投票の数
1。 >
まず、投票システムは次のようなものです:
3 つのリンクをクリックすると、この記事の関連機能を直接操作できます。主に管理者部分を書き、一般ユーザー部分は jpgraph を使って別の章を開いて説明します。
中間はログインシステムがあるべきだと言われています。 ここでは重要ではありません。以前の「[php] ログイン システムと出力ビューア情報」を参照してください (クリックしてリンクが開きます)
クリックして投票オプションを追加すると、次のインターフェイスが表示され、投票オプションを追加および削除できます。投票オプションは最大 10 個、アバター オプションは少なくとも 2 個あります。超過または不足している場合は、次のメッセージが表示されます。
プレビュー画像は IE6 を使用しています。したがって、オプションの追加と削除の応答が遅くなります。
管理者が投票情報を入力すると、投票は正常に追加できるようになります。
送信すると、管理者は誤操作を防ぐためにそれを追加するかどうか尋ねられます
ここのシステムは実際に xajax を使用して投票データに何かがあるかどうかを調査する必要があり、オプションが空の場合は追加すべきではありませんはい、
詳しくは、「[php] 登録システムと Xajax を使用してユーザー名が占有されているかどうかを即座に確認する」を参照してください (クリックするとリンクが開きます)。この記事では、主に投票システムのコア実装について説明します。以下の詳細をお見逃しなく。
次に、投票システムの削除投票部分をクリックし、それぞれの最後にある投票 削除ボタンがあります。
各投票タイトルをクリックして投票を表示します:
削除ボタンをクリックすると、 「確認」をクリックすると、投票が正常に削除されます。
上の図では、前に 4 つの投票があることがはっきりとわかります。 1 つの投票
2. 基本的な考え方
投票システムの管理者部分は削除しません。新しいテクノロジーやデータベース操作がある場合は、まず、voteparent テーブルの構造は次のとおりです。
id は自動です。 -increment 列。タイトルは、「私はハンサムです」の上に「ハンサムではありません」など、この投票のタイトルです。次のテキストは、この投票の説明を保存するために使用されます。自動インクリメント列は切断されません。削除方法が使用され、削除ビット isdel が設定され、削除ビットが 0 の投票が表示されます。
votechildren テーブルは次のとおりです。id は自動インクリメント列で、text は各サブオプションの説明を格納するために使用され、count はこのサブオプションの投票数を格納するために使用されます。 parentid は、このサブオプションがどの投票に属するかを保存するために使用されます。 voteparent テーブルには参照制約があることは明らかですが、操作時のトラブルを避けるために外部キーを設定する必要はありません
は注目に値します2 つのテーブルを作成したら、文字化けを避けるために必ずテーブル オプション タブに移動し、両方のテーブルのエンコードを utf-8 に設定してください
この記事では、createvote.html、createvote.php、delvote.php のみについて説明します。 、delvotehandle.php、Index.html 5 ページのコンテンツ
3. 制作プロセス
1. > まず、最も基本的な、
という 3 つのリンクだけを持つ、index.html ですが、ここでは説明しません。HTML を学習したばかりの人ならわかるでしょう。コードは次のとおりです: 2. createvote.html 独自の js 関数を使用して投票ページを追加します。投票ページの追加は大きなフォームです。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>投票系统</title></head><body><a href="createvote.html">添加投票(管理员部分)</a><br /><a href="delvote.php">删除投票(管理员部分)</a><br /><a href="voteindex.php">投票(普通用户部分)</a></body></html>もあり、現在存在するオプションの数を記録するために使用されます。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>创建投票</title></head><body><h1>增加投票</h1><button onclick="createbtn()">增加选项</button> <button onclick="delbtn()">删除选项</button><!--onsubmit属性是为了下面脚本能够顺利弹出确认框,用户确认之后才提交这个表单--><form action="createvote.php" method="post" onsubmit="return check()"><!--这里定义div的id是为了下面的javascript的操作,而且div不像p那样会参加很大的行距--><div id="createform"><div>投票主题:<input type="text" name="title" style = "width:70%"/></div><div>投票描述:<input type="text" name="text" style = "width:70%"/></div><div>选项1:<input type="text" name="opt1" style = "width:70%"/></div><div>选项2:<input type="text" name="opt2" style = "width:70%"/></div></div><!--这里是用来记录有多少个选项的--><input type="hidden" id="nodetotal" name="nodetotal" /><input type="submit" value="提交" /></form><a href="index.html">返回</a></body></html><script>//脚本部分,是现实的关键//开始先记录当前的选项数是2,并存入hidden域,到时候随表单一起提交var nodenum=2;document.getElementById("nodetotal").value=nodenum;//下面是“增加选项”“删除选项”的按钮操作function createbtn(){ //如果选项少于10个才操作 if(nodenum<10){ nodenum++; var node=document.createElement("div"); //操作节点如果涉及html文本,写成单引号就不用写\"这么难看的双引号的转义字符 node.innerHTML="选项"+nodenum+":<input type='text' name='opt"+nodenum+"' style='width:70%' />"; document.getElementById("createform").appendChild(node); //记得增加完每个节点,要更新以下hidden域里面的节点数哦! document.getElementById("nodetotal").value=nodenum; } else{ alert("最多10个选项"); }}//逻辑跟上面一样function delbtn(){ if(nodenum>2){ nodenum--; d=document.getElementById("createform"); d.removeChild(d.lastChild); document.getElementById("nodetotal").value=nodenum; } else{ alert("至少2个选项"); }}//表单确认框的脚本,表单onsubmit为true才能够提交嘛,confirm点确定则返回true反之为falsefunction check(){ return confirm("确定提交?");}</script>投票処理ページを追加します。
这里插入数据库要注意,先插入voteparent,再找出刚插入voteparent的那条记录的id,插入votechildren表的parentid,
这里找parentid需要注意,不要通过寻找最后一条插入记录的方法,找到parentid,因为这样如果多个管理员在操作数据库的并发时,会产生混乱
由于这里有中文,
操作数据库之前,记得加上mysql_query("set names utf8");这句话,详情请看代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>添加投票处理中……</title></head><body><?php//首先取出刚才要添加投票的title与text,隐藏域中的选项数$ptitle=$_REQUEST["title"];$ptext=$_REQUEST["text"];$nodetotal=$_REQUEST["nodetotal"];$con=mysql_connect("localhost","root","root");//连接数据库if(!$con){ die("连接失败!"); }mysql_select_db("test",$con);mysql_query("set names utf8");//把title与text插入到voteparent表,设定删除位是0之后,系统会自动生成idmysql_query("insert into voteparent(title,text,isdel) values ('".$ptitle."','".$ptext."',0);");//再通过title找到刚才系统生成的id$pid;$result=mysql_query("select id as pid from voteparent where title='".$ptitle."';");while($row=mysql_fetch_array($result)){ $pid=$row["pid"];}//建立一个php数组,里面存放每一个子选项$optarr=array();//选项的多少决定了我们的循环次数for($i=1;$i<$nodetotal+1;$i++){ $optarr[$i]=$_REQUEST["opt${i}"]; mysql_query("insert into votechildren(text,count,parentid) values ('".$optarr[$i]."',0,'".$pid."');"); }; mysql_close($con); ?></body></html><script>alert("添加成功");window.location.href="index.html";</script>
以上,管理员添加投票功能做完,下面是管理员删除投票功能
先把voteparent中所有的删除位不为1的投票查询出来,然后降序排列,因为人们希望先看到最新添加的投票
生成节点的时候设置好每一个投票的删除按钮id,这个id就是在数据库中的voteparent的id,方便后续操作
删除按钮的脚本不用写什么,就是把这个id传到delvotehandle.php,删除处理页中就可以了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>删除投票</title></head><body><h1>删除投票</h1><?php$con=mysql_connect("localhost","root","root");if(!$con){ die("连接失败!");}mysql_select_db("test",$con);mysql_query("set names utf8");$result=mysql_query("SELECT * FROM voteparent where isdel=0 order by id desc;");$i=1;while($row=mysql_fetch_array($result)){ echo "<div style='margin-right:10px;float:left'>投票${i}:<a href='vote.php?id=${row["id"]}'>${row["title"]}</a></div><div style='float:left'><button id='${row["id"]}' onclick='deljs(this.id)'>删除</button></div><div style='clear:both'></div>"; $i++;}mysql_close($con);?><p><a href="index.html">返回</a></p></body></html><script>function deljs(id){ if(confirm("确认删除?")){ window.location.href="delvotehandle.php?id="+id; } }</script>基本思想就是这样,其中这个页面采用了div布局,而不是table,详情可以参考我之前的《【CSS】关于div的对齐与网页布局》(点击打开链接)
5、delvotehandle.php
取到刚才传过来的id,根据这个id把相应的isdel删除位设定为1即可
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>删除投票处理中……</title></head><body><?php$pid=$_REQUEST["id"];$con=mysql_connect("localhost","root","root");if(!$con){ die("连接失败!"); }mysql_select_db("test",$con);mysql_query("set names utf8");mysql_query("update voteparent set isdel=1 where id=".$pid.";");mysql_close($con); ?></body></html><script>alert("删除成功");window.location.href="index.html";</script>
避免直接输入网址就能够访问,这里没写
可以参考我之前的《【php】登录系统与输出浏览者信息》(点击打开链接)