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

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

ただいまの
回答率

90.47%

  • PHP

    20810questions

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

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

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 374

yaachans

score 2

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>

 -------------------------------------------------------------------------------------

よろしくお願いします。 

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 16:29

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

    キャンセル

0

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 16: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>

    のようなものを追加してできたらと思っているのですが
    引き算のさせ方を教示お願いします。

    キャンセル

  • 2016/03/23 16:37

    $data[$_POST['koumoku']]++;

    と同じです。

    $data[$_POST['koumoku']]--;

    で引き算できます。

    キャンセル

  • 2016/03/23 16: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とすればいいのでしょうか。
    わからないことばかりですみません。

    キャンセル

  • 2016/03/23 19:44

    まじか。

    for文の使い方すらわからない状態ってことね。
    じゃぁ説明しても多分わからんと思うなぁ。

    そもそもgoogleとかで『php for』で検索すれば山盛りでてくるでしょ?
    https://goo.gl/9YF9Br

    ここで質問する前に、自分で貼り付けたソースがどう言う動きをするのが、
    もう少し自習してもいいんじゃないかな。

    その上で、どうしてそうなるのかって質問なら、
    かなり多くの人達が答えられるけど。

    キャンセル

関連した質問

同じタグがついた質問を見る

  • PHP

    20810questions

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