• ベストアンサー

登録ボタンの二度押しを回避したい

phpで登録ボタンを二度押すと同じ物が二件以上登録されます。 どう回避すれば良いでしょうか? <?php $rows = json_decode(file_get_contents("./jdata/".$lin.$idno.'.json'), true); if (count($rows)<100) { if (!empty($_POST['write'])) { if ($contents_m!=$_POST['contents']) { $row = array( 'name' => $_POST['name'], 'title' => $_POST['title'], 'contents' => $_POST['contents'], 'aiconu' => $_POST['aiconu'], 'time' => date("Y/m/d H:i:s") ); array_unshift($rows, $row); file_put_contents("./jdata/".$lin.$idno.'.json', json_encode($rows)); } $contents_m=$_POST['contents']; } <!DOCTYPE html> <html lang="ja"> <head> input id="tou" type="submit" name="write" disabled value="登録">

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • retorofan
  • ベストアンサー率33% (328/975)
回答No.2

セッションを使用してトークンを埋め込めば、 フォームの二重送信を防ぐことができます。 わからなければ、あらたに投稿(質問)すれば、 また誰かが助けてくれるでしょう。 「こんなふうにやってみたけれど、うまくいかない」 というような質問ならば・・・。

その他の回答 (1)

  • t_hirai
  • ベストアンサー率27% (157/577)
回答No.1

関連するQ&A

  • 複数のプログラムを1ページで行えますか?

    PHP始めたばかりです。 下記の事で困っています。 単体ではうまく動くのに二つ並べると動作しません。 どうしたら複数のプログラムを1ページで行えますか? どこかに番号を付けて同じにならないようにするのかなとは思いますが分かりません。 ご教示お願い致します。 <?php $file = 'txt/a0001.txt'; if ($_POST['button_save']) { //POSTされたときは書き込み処理をする $fp = @fopen($file, 'w'); if ($fp == false) { print "このファイルには書き込みできません。<br>\n"; } else { $contents = htmlspecialchars($_POST['textBox_contents']); fwrite($fp, $contents); fclose($fp); print "書き込み完了しました。<br>\n"; } } $text = file_get_contents($file); $text = htmlspecialchars($text); ?> <textarea name="textBox_contents" cols="40" rows="2"><?php echo($text); ?></textarea> <br/> <input type="submit" name="button_save" value="保存"> </form> <p> <p> <?php $file = 'txt/b0001.txt'; if ($_POST['button_save']) { //POSTされたときは書き込み処理をする $fp = @fopen($file, 'w'); if ($fp == false) { print "このファイルには書き込みできません。<br>\n"; } else { $contents = htmlspecialchars($_POST['textBox_contents']); fwrite($fp, $contents); fclose($fp); print "書き込み完了しました。<br>\n"; } } $text = file_get_contents($file); $text = htmlspecialchars($text); ?> <textarea name="textBox_contents" cols="40" rows="2"><?php echo($text); ?></textarea> <br/> <input type="submit" name="button_save" value="保存"> </form>

    • ベストアンサー
    • PHP
  • mysqlとphpを使った入力画面でチェックボックスのデータの受け取り方

    住所録を作成しています。 趣味をチェックボックスで選択するようにしましたが、1つしか選ばれません。例を挙げましたので教えてください。 if($tou<>""){ $sql = "insert into kainan values (0, '$tou', '$kai')"; $result = mysql_query($sql); $sql = "select * from jyusho where tou='$tou' order by tou asc limit 1"; $result = mysql_query($sql); while($row = mysql_fetch_array($result)){ $id = $row["id"]; } echo "<p>登録完了しました</p>\n"; exit; } echo " <p>データを入力してください<p/> <form action=\"touroku.php\" method=\"post\"> <p>○登録日:<input type=\"file\" name=\"tou\" size=40 >\n <p>○趣味:\n <input type=\"checkbox\" name=\"kai\" value=\"不明\">不明\n <input type=\"checkbox\" name=\"kai\" value=\"英語\">英語\n <input type=\"checkbox\" name=\"kai\" value=\"算数\">算数\n </p>\n <p><input type=\"submit\" value=\"登録\">   <input type=\"reset\" value=\"クリア\"></p>\n </form>\n ";

  • PHP 関数化

    失礼します。今回関数化をしたいのですが、うまくできません 内容はjsonファイルを読みこみ連想配列に変換したいです。 当方PHP初心者なので当たり前の事かもしれませんが宜しくお願い致します。 function Array_trans_json($file_path,$json_arr){ $json = file_get_contents($file_path); //jsonデータを読み込む $json = mb_convert_encoding($json,'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); //文字化けを防ぐ //$json_arr["piyo"][control_num];でアクセスできる $json_arr = json_decode($json,true); //jsonデータを連想配列に変換 } $file_path = "./test.json"; if(file_exists($file_path)){ $json_arr; Array_trans_json($file_path,$json_arr);

    • ベストアンサー
    • PHP
  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • PHPでファイルアップロードがうまくいきません

    PHP初心者なんで宜しくお願い致します。 ファイルアップロードのシステムを作っているんですが どうもうまくいきません。 <form action="<? $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> 写真:<input type="file" name="file" size="40" /> <input type="submit" name="new_write" value=" 登録 "> </form> <? if(isset($_POST['new_write'])){ $filename = $_FILES['file']['name']; $updir = "./image/".$filename; if(move_uploaded_file($_FILES['file']['tmp_name'], $updir)){ print "OK"; }else{ print "NG"; } } ?> 上記の記述をしています。 そしてphpinfo()で情報を確認しても file_uploadsはONになっています。 そしてPHPのバージョンは4.4.2です。 単純なことかもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 会員登録でファイルアップロード+データベース更新 が上手く行かない

    PHP初心者です。 名前等の項目と画像ファイルをアップロードして登録するような会員登録を作ろうとしています。DBはSQLite でPHP5です。 名前等の登録だけのアプリケーションはOK。またファイルのアップロードだけもOK。 しかし、それらを合体ると、DBには登録されますがファイルがアップロードされません。どなたかご教示下さい。 (抜粋)※抜粋です。entry.php という名前です。 <?php include_once('../inc/common.inc'); getDbConnect(); //--- DBへ追加 ---// if(isset($_POST['cmdRegister'])){ いろいろとあって doDbInsert($dbcon,'meibo',array ( 'meibo_id' => "$new_meibo_id", 'user_name' => "'$user_name'", 'email' => "'$email'", ),$dberror_msg ); //---画像をフォルダへ保存 ---// $file_dir = 'C:\Apache Group\Apache2\htdocs\band\faces\\'; $file_path = $file_dir . $_FILES["uploadfile"]["name"]; move_uploaded_file($_FILES["uploadfile"]["tmp_name"], $file_path); header('Location: ./entry.php'); exit; } getDbClose($dbcon); ?> <html> <body> <form method="post" action="./entry.php" enctype="multipart/form-data"> ニックネーム<input type="text" name="user_name" size="40" value="<?= $user_name; ?>"><br> メール<input type="text" name="email" size="60" value="<?= $email; ?>"><br> <INPUT type="hidden" name="MAX_FILE_SIZE" value="100000"> 画像:<INPUT type="file" name="uploadfile"><br> <input type="submit" name="cmdRegister" value="保 存"> </body> よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの掲示板について

    下記のソースコードを実行したところページは表示されるのですが 記事を書き込み画像を添付して送信することができませんでした。 どのように修正すればいいでしょうか <?php $con = pg_connect("dbname=postgres user=postgres password=postgres"); if ($_POST['write']) { $name = get_form($_POST['name']); if (strlen($name) > 100) exit(); if (!$name) $name = "名無しさん"; $title = get_form($_POST['title']); if (strlen($title) > 100) exit(); if (!$title) $title = "無題"; $contents = get_form($_POST['contents']); if (strlen($contents) > 500) exit(); if (!$contents) error("本文を入力してください"); $delkey = get_form($_POST['delkey']); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("delkey", $delkey, $expire); $tname = $_FILES['image']['tmp_name']; if ($tname) { if (!is_uploaded_file($tname)) error("不正なアップロード"); $type = $_FILES['image']['type']; if ($type != "image/jpeg" && $type != "image/pjpeg") { error("JPEG形式ではありません"); } $rs = pg_query($con, "select last_value from pgbbs3_no_seq"); $no = pg_fetch_result($rs, 0, 0) + 1; $path = "image/$no.jpg"; move_uploaded_file($tname, $path); $path_t = "image/{$no}_t.jpg"; list($sw, $sh) = getimagesize($path); $dw = 128; $dh = $dw * $sh / $sw; $src = imagecreatefromjpeg($path); $dst = imagecreatetruecolor($dw, $dh); imagecopyresized($dst, $src, 0, 0, 0, 0, $dw, $dh, $sw, $sh); imagejpeg($dst, $path_t); } pg_query($con, "insert into pgbbs3(name,title,contents,delkey) values('$name','$title','$contents','$delkey')"); } else { $name = $_COOKIE['name']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { $no = get_form($_POST['no']); $delkey = get_form($_POST['delkey']); $rs = pg_query($con, "delete from pgbbs3 where no=$no and delkey='$delkey'"); if (pg_affected_rows($rs) == 0) error("記事削除に失敗しました"); } // フォームの文字列を取得する function get_form($str) { $str = pg_escape_string(htmlspecialchars($str)); $str = ereg_replace("\n|\r|\r\n", "<br>", $str); return $str; } // エラー表示して終了 function error($msg) { print "<p><font color='red'>$msg</font></p>\n"; exit(); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>画像アップロード掲示板</title> </head> <body> <p>JPEGファイルのみアップロードできます。</p> <form method="post" action="pgbbs3.php" enctype="multipart/form-data"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> 題 名:<input type="text" name="title"><br> <input type="hidden" name="max_file_size" value="30000"> 画像:<input type="file" name="image"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> </form> <hr> <form method="post" action="pgbbs3.php"> 記事番号:<input type="text" name="no"> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"> <input type="submit" name="delete" value="記事削除"> </form> <?php $rs = pg_query($con, "select * from pgbbs3 order by no desc"); while ($row = pg_fetch_array($rs)) { $time = substr($row['time'], 0, 19); $no = $row['no']; print "<hr>No.{$no} <strong>{$row['title']}</strong>"; print " 投稿者:{$row['name']} 投稿日時:$time"; $fn = "image/{$no}.jpg"; $fn_t = "image/{$no}_t.jpg"; if (file_exists($fn)) print "<br><br><a href='$fn'><img src='$fn_t' border='0'></a>"; print "<br><br>{$row['contents']}\n"; } pg_close($con); ?> </body> </html>

    • 締切済み
    • PHP
  • ■が増えていく。

    ログファイルに文字を書き込むという単純なphpファイル(uho.php)について、 ******* <?php $LINES = file('log.dat'); if ($_POST['write']) write(); function write(){   global $LINES;   $contents = $_POST['contents'];   $data = "$contents<>\n";   array_unshift($LINES, $data);   $FILE = fopen('log.dat', 'w');   $log= implode("",$LINES);   fputs($FILE,$log);   fclose($FILE); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> </head> <body> <form method="post" action="uho.php"> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type=submit name=write value=aaaa> </form> <? for($i=0; $i<count($LINES) ; $i++) print $LINES[$i]."<br>"; ?> </body> </html> ***** と記述しました。 phpエディタは、「phpエディタ standalone」を使用していて、文字コードはEUCがいいとのことですが、参考にしているサイトのPHPスクリプトがShift_JIS形式で作成しているようなので、とりあえずShift_JISで保存しています。ApacheやPHP等の環境を一気にインストールできる「phpdev423」を用いてWin XP上で走らせていることにより動作確認をしています。 それで困っていることがあるのですが、どうやら文字を転送すると、ログファイルをメモ帳でひらくと、 aaaa<> bbbb<> cccc<>■ dddd<>■■ eeee<>■■■ ffff<>■■■■ という風に■が並んでいきます。実際の■ではなく、これより幾分か小さい黒い正方形が表示されます。 このログファイルにさらにもじを書き足した場合、 1111<> aaaa<> bbbb<>■ cccc<>■■ dddd<>■■■ eeee<>■■■■ ffff<>■■■■■ となります。なぜこういった現象が起こるかがわかりません。

    • ベストアンサー
    • PHP
  • PHPで作る掲示板のプログラムについて

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか? <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP

専門家に質問してみよう