dポイントプレゼントキャンペーン実施中!

PHPの入力フォームでサブミットボタンを押すと、データベースのあるカラムに1が入力されるようにしたのですけど、ここで変な自体が起きてしまいまして、。。

POSTで受け渡先のページが自分自身の場合になっておりますが、 submitボタンを押していないにもかかわらず、画面の更新をするだけで、データーベースに同じ情報が更新した回数分だけ、登録されてしまうのですが、なんでなんでしょうか 教えてください。よろしくお願いします。

<?php
if (@$_POST['friend_req']) {

try{
require_once("../../db/connect_db.php");
$sql = "INSERT INTO friend(user_i, req_fg, user_you, add_fg) VALUES(?,?,?,?)";
$datas=array($user_id, 1, $_GET['no'], 0 );
$stmt = $pdo->prepare( $sql);
$stmt->execute($datas);

}catch(PDOException $e){
die($e->getMessage());
}
}
?>



<form method="post" action="<?=HOME?>universe/users/profile.php?no=<?php echo $_GET['no'];?>">
<input type="submit" name="friend_req" value="友人申請" >
</form>

質問者からの補足コメント

  • つらい・・・

    補足ですが、データベースに 1 が登録されていない段階では、更新してもなにも登録されないのですが、 一度、データベースに登録したあとに、 更新すると、submitボタンを押していないけどもsubmitボタンを押したときのように、更新した回数だけレコードが増えています。

      補足日時:2016/05/02 23:27

A 回答 (1件)

postしたページのリロードは、再度postすることです。



<?php
if (@$_POST['friend_req']) {

try{
require_once("../../db/connect_db.php");
$sql = "INSERT INTO friend(user_i, req_fg, user_you, add_fg) VALUES(?,?,?,?)";
$datas=array($user_id, 1, $_GET['no'], 0 );
$stmt = $pdo->prepare( $sql);
$stmt->execute($datas);
header("Location:".$_SERVER["SCRIPT_NAME"]);
}catch(PDOException $e){
die($e->getMessage());
}
}
?>

的な、INSERTしたら別ページに飛ぶようにしないとダメです
普通は更新したら「更新完了ページ」に飛ばすもんですけどね

ちなみにheaderで飛ばすので、HTMLの出力をする前に組み込む必要があります
あとPOSTとGETを組み合わせて使うのはかなり気を使わないといけません
$_SERVER["SCRIPT_NAME"]では飛べないし、仕様をよく検討してみてください
    • good
    • 0
この回答へのお礼

ありがとうございます。postしたページのリロードは、再度postすることということを知りませんでした。 headerに関しては、ただ単に飛ばすだけだとおもっていたのですが、$_POSTをリロードさせない役割もあったのですね。過去にPHPで実験として作成したものでも、気付いていないだけで、よくにた状況のものがいくつかでてきました。コメントがリアルタイムで表示されるものや、いいねボタンをおすといいねがつくようなものも自分のページにheaderなしで、飛ばしていたので、今確認したところ、更新するたびにいいねがついてしまってました。自分ではまったく気付かなかったので、とても感謝です。同時に少し疑問もでてきました。頭を整理してみます。

お礼日時:2016/05/03 01:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!