解決した場合は必ずいずれかの方へいるか賞を付与致します。
↓前回の質問↓
http://q.hatena.ne.jp/1244223506
こちらで作って頂いたソースコードに以下の2つの機能を追加してください。
①行きたい番地を第2希望まで追加
■行きたい番地(第一希望)
■行きたい番地(第二希望)
送信
(同じ番地の選択は不可)
②全員からの送信が完了していない状態で結果(result.php)を表示した場合
現状では「まだ全員の投票が完了していません」と表示されるだけですが
あと何人の投票が完了していないのか
誰の投票がまだ完了していないのか番地が表示されるようにしたいです。
例
まだ2名の方からの投票が完了しておりません。
詳細は以下の通りです。
2番地の方の投票が完了していません。
5番地の方の投票が完了していません。
以上2つが希望する追加機能です。
カスタマイズするファイルは前回の質問の回答2の状態からでお願い致します。
よろしくお願い致します。
PHP 5.1.6
perl, v5.8.8
MySQL - 5.0.45
とりあえず2のみの対応です。
Result.php の中を下記のように修正でできます。
$res = execSQL( "SELECT COUNT(*) AS cnt FROM list WHERE want_addr=0" ); if ( mysql_num_rows( $res ) > 0 ){ $row = mysql_fetch_array($res, MYSQL_ASSOC); if ( $row['cnt'] == 0 ) { $res = execSQL( "SELECT * FROM list ORDER BY id" ); print "<table border=\"1\">\n"; print "<tr><th>現在の番地</th><th>次の番地</th></tr>\n"; while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) ) { print "<tr>"; print "<td>".$row['id']."</td>"; print "<td>".$row['next_addr']."</td>"; print "</tr>\n"; } print "</table>\n"; } else { print "まだ".$row['cnt']."名の方からの投票が完了しておりません。<br>\n"; print "詳細は以下の通りです。<br><br>\n"; $res = execSQL( "SELECT * FROM list WHERE want_addr = 0" ); while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) ) print $row['id']."番地の方の投票が完了していません。<br>\n"; } }
先の質問のコメントで指摘がありましたが、運用上のセキュリティ対策は
全く考慮されていませんので、運用時は必要な対策を講じてください。
LAN内で仲間内でお遊びで使用する範囲では特に不要と思いますが、これによって
生じる損害に関しては自己責任でお願いいたします。
まぁ、データが見られたり壊されて困るような用途ではないと思いますが。
時間が取れたのでもう一点も変更しました。
DB を以下に変更します。
CREATE TABLE list ( id integer, want_addr1 integer, want_addr2 integer, next_addr integer );
下記の 3つのファイルを変更してください。
<html> <head> <title>投票</title> <?php require("db.php"); $def_id = "N"; $def_ad1 = "N"; $def_ad2 = "N"; if ( isset( $_POST["vote"] ) ) { vote(); } function vote() { global $def_id; global $def_ad1; global $def_ad2; if ( !isset( $_POST['id'] ) || !isset( $_POST['want_addr1'] ) || !isset( $_POST['want_addr2']) ) { print "<font color=\"red\">行き先が設定されていません</font><br>\n"; return; } if ( $_POST['id'] == "選択" || $_POST['want_addr1'] == "選択" || $_POST['want_addr2'] == "選択" ) { print "<font color=\"red\">行き先が設定されていません</font><br>\n"; return; } if ( $_POST['want_addr1'] == $_POST['want_addr2'] ) { print "<font color=\"red\">同じ行先は選択できません</font><br>\n"; return; } execSQL( "UPDATE list SET want_addr1=".$_POST['want_addr1'].", want_addr2=".$_POST['want_addr2']." WHERE id=".$_POST['id'].";" ); $def_id = $_POST['id']; $def_ad1 = $_POST['want_addr1']; $def_ad2 = $_POST['want_addr2']; print "登録を完了しました<br>\n"; } function selectOption( $name, $def) { $res = execSQL( "SELECT COUNT(*) AS cnt FROM list" ); if ( mysql_num_rows( $res ) > 0 ){ $row = mysql_fetch_array($res, MYSQL_ASSOC); $num= $row["cnt"]; } print "<SELECT name=\"".$name."\">\n"; print "<OPTION VALUE=\"選択\">選択</OPTION>\n"; for ( $i=1 ; $i<=$num ; $i++ ) { if ( $i == $def ) { print "<OPTION VALUE=\"".$i."\"selected>".$i."</OPTION>\n"; } else { print "<OPTION VALUE=\"".$i."\">".$i."</OPTION>\n"; } } print "</SELECT>\n"; } ?> </head> <body> <br> <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> ■現在の番地<br> <?php selectOption("id", $def_id ); ?> <br><br> ■行きたい番地(第一希望)<br> <?php selectOption("want_addr1", $def_ad1 ); ?> <br><br> ■行きたい番地(第二希望)<br> <?php selectOption("want_addr2", $def_ad2 ); ?> <br><br> <input type="submit" value="送信" name="vote"><br><br> </form> <a href="result.php" style="color:#ff0000;">結果</a><br><br><br> <a href="admin.php" style="color:#ff0000;">管理</a><br> </body> </html>
<html> <head> <title>結果</title> <?php require("db.php"); function showResult() { $res = execSQL( "SELECT COUNT(*) AS cnt FROM list WHERE want_addr1=0" ); if ( mysql_num_rows( $res ) > 0 ){ $row = mysql_fetch_array($res, MYSQL_ASSOC); if ( $row['cnt'] == 0 ) { $res = execSQL( "SELECT * FROM list ORDER BY id" ); print "<table border=\"1\">\n"; print "<tr><th>現在の番地</th><th>次の番地</th></tr>\n"; while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) ) { print "<tr>"; print "<td>".$row['id']."</td>"; print "<td>".$row['next_addr']."</td>"; print "</tr>\n"; } print "</table>\n"; } else { print "まだ".$row['cnt']."名の方からの投票が完了しておりません。<br>\n"; print "詳細は以下の通りです。<br><br>\n"; $res = execSQL( "SELECT * FROM list WHERE want_addr1 = 0" ); while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) ) print $row['id']."番地の方の投票が完了していません。<br>\n"; } } } ?> </head> <body> <br> <?php showResult(); ?> <br> <div align="left" style="font-size:medium">[<a href="index.php">戻る</a>]</div> </body> </html>
<html> <head> <style type="text/css"> <!-- th { background-color: #e0e0ff;} td { background-color: #e0ffe0;} td.emp { background-color: #ffffff;} input.err { background-color: #ffe0e0;} --> </style> <title>管理</title> <?php require("db.php"); if ( isset( $_POST["reset"] ) ) { $num = 6; if ( isset($_POST["id_size"]) ) { if ( preg_match("/^[0-9]+$/", $_POST["id_size"] ) == true ) { $num =$_POST["id_size"]; } } execSQL("DELETE FROM list"); for( $i=0 ; $i<$num ; $i++ ) { $arI[] = $i+1; $arN[] = RAND(); } array_multisort( $arN, SORT_DESC, SORT_NUMERIC, $arI, SORT_DESC, SORT_NUMERIC ); for( $i=0 ; $i<$num ; $i++ ) { execSQL( "INSERT INTO list ( id, want_addr1, want_addr2, next_addr ) VALUES ( '".($i+1)."', '0', '0', '".($arI[$i])."');" ); } } if ( isset( $_POST["update"] ) ) { for( $i=1 ; isset( $_POST["next_addr_".$i] ) ; $i++ ){ execSQL( "UPDATE list SET next_addr = ".$_POST["next_addr_".$i]." WHERE id = ".$i.";" ); } } function showList() { $res = execSQL( "SELECT * FROM list ORDER BY id" ); $cnt = execSQL( "SELECT next_addr, COUNT(*) AS cnt FROM list GROUP BY next_addr" ); print "<table border=\"1\">\n"; print "<tr><th>現在の番地</th><th>行きたい番地1</th><th>行きたい番地2</th><th>次の番地</th></tr>\n"; while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) ) { $css = ""; mysql_data_seek( $cnt, 0 ); while ( $row2 = mysql_fetch_array($cnt, MYSQL_ASSOC) ) { if( $row['next_addr'] == $row2['next_addr'] ) { if ( ( $row2['cnt'] != "1" ) || ( mysql_num_rows( $res ) < $row2['next_addr'] ) || ( $row2['next_addr'] <= 0 )) $css = "class = \"err\""; break; } } print "<tr>"; print "<td>".$row['id']."</td>"; if ( $row['want_addr1'] == 0 ) { print "<td class=\"emp\">".$row['want_addr1']."</td>"; print "<td class=\"emp\">".$row['want_addr2']."</td>"; } else { print "<td>".$row['want_addr1']."</td>"; print "<td>".$row['want_addr2']."</td>"; } print "<td><input ".$css." type=\"text\" name=\"next_addr_".$row['id']."\" value=\"".$row['next_addr']."\" size=\"10\"></td>"; print "</tr>\n"; } print "</table>\n"; } ?> </head> <body> <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <input type="submit" value="リセット" name="reset"> <input type="text" name="id_size"><br> リセットは選択初期化です。 <br> </form> <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> <?php showList(); ?> <input type="submit" value="更新" name="update"> </form> <br> <div align="left" style="font-size:medium">[<a href="index.php">戻る</a>]</div> </body> </html>
前回に引き続き回答ありがとうございます。
ご指摘の通りファイルを修正したのですが、ページが表示されません。
ご確認頂いてもよろしいでしょうか。
セキュリティに関しては攻撃されても特に損害はありません。