質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

1387閲覧

投票の取り消しをできるようにしたい(引き算)

yaachans

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/03/23 06:00

phpを使用してweb投票サイトを作成したいと思っています。

投票した票数を取り消し(1クリック1票とりけし)できるようにもしたいと思っています。
どのように作成したらよいでしょうか。

以下に現状が現状のソースです。


<html> <head> <title>集計</title> <?php header("Content-Type: text/html; charset=shift_jis"); ?> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <meta name="refresh" content="5"> </head> <body>好きなものを選んでください。 <form name="form" method="post" action="touhyou.php">

<input type='radio' accesskey="1" name='koumoku' value='0'>おにぎり<br>
<input type='radio' accesskey="2" name='koumoku' value='1'><br>
<input type='radio' accesskey="3" name='koumoku' value='2'><br>
<input type='radio' accesskey="4" name='koumoku' value='3'>にんじん<br>
<input type='radio' accesskey="5" name='koumoku' value='4'>りんご<br>
<input type='radio' accesskey="6" name='koumoku' value='5'>いちご<br>

<?php //枠 $subject=array('おにぎり','魚','肉','にんじん','りんご','いちご'); for($i=0; $i<count($subject); $i++){ } ?> <br> <input type="submit" name="submit" value="入力"> </form> <table border="1"> <?php //データの書き込み $data=file('data.txt'); for($i=0; $i<count($subject); $i++){ $data[$i]=rtrim($data[$i]); } if($_POST['submit']){ $data[$_POST['koumoku']]++; $fp=@fopen('data.txt','w'); for($i=0; $i<count($subject); $i++){ fwrite($fp,$data[$i]."\n"); } fclose($fp); } //データの出力 echo "<hr>"; for($i=0; $i<count($subject); $i++){ echo "<tr>"; echo "<td>{$subject[$i]}</td>"; echo "<td><table><tr>"; $wd=$data[$i]*2; //出力幅の設定 echo "<td width='$wd' bgcolor='#aeeeee'> </td>"; echo "<td>{$data[$i]} 個</td>"; echo "</tr></table></td>"; echo "</tr>\n"; } ?> </table> </body> </html>

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

データベース使わずファイルベースでやるなら、
投票と同じ方法で引けば良いんじゃないですかね。

その際の注意点として、このプログラムはユーザを特定してないので整合性取れなくなる可能性があるけど、

  1. data.txt内を全部配列に入れる
  2. 取り消したいデータをデクリメントする
  3. data.txtを保存(丸ごと上書き)する

の流れで良いんじゃないですかね。
データが膨大になると破綻すると思いますが、そういう場合はデータベース使いましょう。

投稿2016/03/23 06:31

編集2016/03/23 06:32
ogaaaan

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yaachans

2016/03/23 07:26

ご回答ありがとうございます。 初心者がいろいろなソースからほぼコピペでしたのですが <input type='radio' accesskey="7" name='koumoku' value='6'>おにぎり-<br> <input type='radio' accesskey="8" name='koumoku' value='7'>魚-<br> <input type='radio' accesskey="9" name='koumoku' value='8'>肉-<br> <input type='radio' accesskey="0" name='koumoku' value='9'>にんじん-<br> <input type='radio' accesskey="l" name='koumoku' value='10'>りんご-<br> <input type='radio' accesskey="j" name='koumoku' value='11'>いちご-<br> のようなものを追加してできたらと思っているのですが 引き算のさせ方を教示お願いします。
ogaaaan

2016/03/23 07:37

$data[$_POST['koumoku']]++; と同じです。 $data[$_POST['koumoku']]--; で引き算できます。
yaachans

2016/03/23 07:54

$data[$_POST['koumoku']]--; を実行するにはvalue1-5までと6-11までとで分岐させる必要があると思いました。 また、引き算させる対象値を指定するさい $fp=@fopen('data.txt','w'); for($i=0; $i<count($subject); $i++){ fwrite($fp,$data[$i]."\n"); の部分の0を6とすればいいのでしょうか。 わからないことばかりですみません。
ogaaaan

2016/03/23 10:44

まじか。 for文の使い方すらわからない状態ってことね。 じゃぁ説明しても多分わからんと思うなぁ。 そもそもgoogleとかで『php for』で検索すれば山盛りでてくるでしょ? https://goo.gl/9YF9Br ここで質問する前に、自分で貼り付けたソースがどう言う動きをするのが、 もう少し自習してもいいんじゃないかな。 その上で、どうしてそうなるのかって質問なら、 かなり多くの人達が答えられるけど。
guest

0

誰が何に投票したかをDBに記憶しておいて、取り消しの時にそのデータを使って減算(およびDBからの削除)をすればいいかと思います。
「誰が」の認識のために、ユーザIDを登録してログインしてから投票するようにするか、不正取り消しのリスクに目をつぶってCookieで間に合わせるかでしょうか。

投稿2016/03/23 06:26

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yaachans

2016/03/23 07:29

ご回答ありがとうござます。 同一端末から複数人入力を想定しているため 引き算での対応ができたらと思ったのですが やり方がわからず困っていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問