2012-01-24 17 views
0

私はこの質問を掲載しているし、私はそれはまだImはできない。この現在のページにリダイレクト

私はフォームを持っているPHPのページを持っている

し、ユーザーがクリックリフレッシュときを解決するためにたくさんググ申し訳ありませんまたはF5を押すとデータベースに重複した値が作成され、再送信するとデータベースに重複値が挿入される可能性があることを示すメッセージがユーザーに表示されます。ユーザーのブラウザにアラートボックスを表示し、重複する値をデータベースに追加しないでください

私はそのheader()を知っています。私はheader()の多くをphpマニュアルで、またserver_nameの機能を読んでいますが、いまだに多くの方法でトップに入れてみましたが、解決できません。それは非常に重要です。誰もdo.jarの方法を説明するコードのサンプルで私を助けてください何ても助けていただければ幸いです。ユーザーは、それが前のページへの直接べきではないブラウザの戻るボタンをクリックした場合

<form method="post" action"demo.php"> 
    <input name="fname" type="text"> 
    <input type="submit" value="submit"> 
</form> 
demo.php 
    <?php 
    $firstname = $_POST['fname']; 
    ?> 

は、それが必要、何度も何度もフォームを送信するのを停止するために、私はdemo.phpページに追加すべきかを教えてくださいまだ現在のページにリダイレクトされます。

だから、ユーザーがクリックリフレッシュ場合やバックボタン、それが唯一の現在のページにリダイレクトする必要がありますし、任意の重複する値を挿入してはならないとも警告ボックスここに何をすべきかを私に説明disabled.Pleaseしなければならない、深いhelp.Thanksでイム

+0

フォームを提出した後には、JavaScript 'LOCATION.HREF = 'url''を使用してページをリロードする必要があります。ところで、あなたはフレームワークやアーキテクチャやCMSなどを使用していませんか? – Bajrang

+0

@ J.J。どのようなフレームワークを使用していないのですか?私はちょっと新しいPHPです。私はどんなフレームワークを使用する必要がある場合は親切に教えてください – niko

+0

ZEND、MVC、Magento、joomla、Typo3などについて聞いたことがありますか? – Bajrang

答えて

0
ユーザーがクリックリフレッシュあれば、それは情報を再投稿はありませんので、私は現在の位置を交換するためにPHPのヘッダ機能を使用し

と投稿された値を保存し、再送信を確認するセッション。 demo.php

<?php 
session_start(); 
if($_POST) 
{ 
    if(!isset($_SESSION[fname])) 
    { 
     //database queries here 
    } 
    $_SESSION[fname] = $_POST['fname']; 
    header('location:demo.php', true); //true replaces the current location 
}elseif(!issset($_SESSION[fname])){ 
    header('location:form.php'); 
} 

$firstname = $_SESSION[fname]; 

?> 

form.php

<form method="post" action"demo.php"> 
    <input name="fname" type="text"> 
    <input type="submit" value="submit"> 
</form> 
0

ソリューションは、挿入、更新、およびなどのデータベース操作が ページ名を削除した後にページをリダイレクトするようになります。test.phpを

if(isset($_REQUEST['deleteBtn'])) 
{ 
$emp_id=$_REQUEST['emp_id']; 
$count=mysql_query("delete from employees where emp_id=$emp_id"); 
header("location:test.php"); 
} 

この方法であなたはF5または[戻る]ボタンをクリックすると、フォームデータはしません再び投稿される。

+0

Hey Navin、Kya hal h? – Bajrang

+0

@ J.J Sab Teek hai ter Kya hal hi? –

1

コードにはさまざまな問題があり、影響を軽減するためのさまざまな方法があります。

まず、重複したエントリを作成する理由は何ですか? 悪質なデータの問題に加えて、あなたのサイトはCSRFに対して脆弱であることを意味しています。シングルユーストークンでCSRFを防止する方法をお読みください。

サイトでパフォーマンスの問題が発生した場合、ユーザーはしばしば送信ボタンを複数回クリックします。データベース上の重複した送信問題に対処しながら、javascriptを使用してページ上の送信リンクを無効にし、ページが何かをしているという視覚的なフィードバックを提供します。

リダイレクトは問題を解決する方法ではありません。

私の上司は

が重複したポストの警告について話しているブラウザの警告ボックスをたくありませんか? PRGを使用してこれを回避することができますが、それは他の問題を引き起こします。

+0

はい、ブラウザから警告ボックスが飛び出して欲しいとは思っていません。PHPやHTMLページを書いて私に説明してもらえますか?理解してもらえれば、これを追加してすべてのthosをリダイレクトしますが、より良い解決策私はphpとhtmlのページサンプルを必要とする代わりに直接 – niko

0

必要なのは、セッションIDを作成する際にセッションIDを埋め込み、そのセッションIDをサーバー上で追跡することです。その後、フォームが送信され、サーバー上でフォームを処理しているときにフォームが複数回送信された場合は、データベース内の最初の送信を上書きするか、エラーメッセージなどで応答できます。

これを行う簡単な方法は、セッションIDを生成し、それをフォームの非表示フィールドとして送信し、フォームがサブミットされたときにセッションIDを保存することですあなたのデータベースでは、セッションIDが一意であるという制約があります。

1

一意のID(session_id)を投稿してデータベースに保存する必要があります。 登録時に、session_idがすでに存在するかどうかをテストします。そうであれば、ユーザーにメッセージを送信してください。 「あなたはすでにこのフォームに投稿している」

コード:

<?php session_start; ?> 
    <form method="post" action"demo.php"> 
     <input name="fname" type="text"> 
     <input type="submit" value="submit"> 
     <input type="hidden" name="session_id" value="<?php echo session_id();?>"> 
    </form> 
    demo.php 
     <?php 
     //test session_id in database 
     $session_id = session_id(); 
     mysql_connect('localhost','xxx','xxx'); 
     mysql_select_db('xxx'); 
     $return = mysql_query("SELECT COUNT(*) AS nb_data FROM TABLENAME WHERE session_id='".session_id()."'"); 
     $data = mysql_fetch_assoc($return); 
     if ($data['nb_data'] == 0){ 
      echo 'Your message'; 
     } 
     else{  
      $firstname = $_POST['fname']; 
      //..... 
      header('location:xxx.php')? 
     } 
?> 
+0

へのリンクを投稿するのではなく、どのように私はブラウザの警告ボックスを避けるために理解する必要がありますか? – niko

+0

ちょうどその場所に挿入 'echo 'あなたのメッセージ'; '' echo'と ';' –

+0

返信して、チェックマークをつけてください。 –

関連する問題