2009-08-06 34 views
17

PHPページには、1つのMySQLテーブルのデータを削除するリンクがあります。 「削除」リンクをクリックすると、確認ボックスが表示され、「はい、削除しますか?」というメッセージが表示され、「はい」と「いいえ」の2つのボタンが表示されます。 。はいをクリックすると、MySQLテーブルのデータを削除したいので、いいえをクリックしても何も起こりません。PHP:yes/no確認ダイアログを表示

+0

どこに問題がありますか? – Bombe

+2

ヒント:ヘッダー

答えて

47
<a href="http://stackoverflow.com" 
    onclick="return confirm('Are you sure?');">My Link</a> 
+1

これを行う最も簡単で効果的な方法は、チャームのように動作します、ありがとう。 – Bhimbim

+2

Yiiのフレームワークに取り組んでいましたが、どういうわけかこの方法を見て私はyiiでもそれを実現しました。 'array'( 'onclick' => 'return confirm( "Are you sure?");') ' – Gjordis

8

あなたはプロンプトを表示するためにJavaScriptを使用することができます。ここで、この発見

からExample

<script> 
function confirmDelete(delUrl) { 
    if (confirm("Are you sure you want to delete")) { 
    document.location = delUrl; 
    } 
} 
</script> 

<a href="javascript:confirmDelete('delete.page?id=1')">Delete</a> 

<a href="delete.page?id=1" onclick="return confirm('Are you sure you want to delete?')">Delete</a> 

が警告別の方法:このJavaScriptは停止しませんレコードが削除されないようにする最後のURLへavigate - 彼らのブラウザでdelete.page?id=1

0

php.for例GTKDialogs内対話システムを使用することになり、これを行うのPHPの道: http://www.kksou.com/php-gtk2/articles/setup-a-dialog-box---Part-2---simple-yes-no-dialog.php javacript方法は、おそらく少し簡単ですしかし、javascriptがオフになっているときは覚えておいてください。(JavaScriptを有効にしてからこれを追加すると!?) これはtsvanharenのようなonclickハンドラを使うか、不快なポップアップの代わりに。私はそれのためのプロトタイプ(したがって、$()タグおよびshow()/非表示を())を使用

<a onClick="$('deletefromtable').show();"></a> 
<div id="deletefromtable" style="display:none;"> 
Do you really want to do this?<br/> 
<a href="deleteit.php">Yes</a>|<a onClick="$('deletefromtable').hide();">No</a> 
</div> 

。プロトタイプなしでも簡単に変更することができます:

<a onClick='document.getElementById("deletefromtable").style.display = "block";' href="#">click here to delete</a> 
<div id="deletefromtable" style="display:none;"> 
Do you really want to do this?<br/> 
<a href="deleteit.php">Yes</a>|<a onClick='document.getElementById("deletefromtable").style.display = "none";' href="#">No</a> 
</div> 

また、これはjavascriptなしでは機能しませんが、オプションはほとんどありません。

+1

phpgtkがサーバにインストールされていても(それは、グラフィカルインタフェースを必要とするため、Linuxを実行しているWebサーバにはインストールされません)、ブラウザー内でも、ブラウザ上でもなく、ユーザーのマシン:サーバーから、クライアント上のGTKウィンドウを開くことはできません。 –

9

このようなことを確認するには、常にフォーム/投稿ボタンを使用する必要があります。決してJavascriptに頼らないでください。理由を理解するためにthisを読んでください!

+3

確認ダイアログは、あなたのストーリーの問題とは関係ありません。確認ダイアログは、ユーザが偶然に削除ボタンをクリックしないようにするユーザビリティ機能です。あなたのリンクで、彼らは本当に愚かなことである認証のためのjavascriptを使用しました。 –

0

何かを削除する場合は、必ずPOSTを使用してGETしないでください。そうすればconfirm()を使うのは悪い考えです。あなたの状況では、jqModalのようなモーダルポップアップを使用し、ポップアップの中にyes/noボタンを含むフォームを表示します。

+0

'confirm()'はあなたがPOSTを使用できないようにするにはどうしますか? –

2

通常は、リクエストメソッドが「GET」の場合は確認フォームを表示し、メソッドが「POST」でユーザーが「はい」オプションを選択した場合はデータを削除します。

次に、削除リンクがあるページに、AJAXを使用して確認ページを迂回してリンクに投稿するonclick関数を追加します(またはjQuery confirm pluginを使用します)。

擬似コードの考え方は次のとおりです。

deleteです。PHP:削除リンクと

<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if ($_POST['confirm'] == 'Yes') { 
     delete_record($_REQUEST['id']); // From GET or POST variables 
    } 
    redirect($_POST['referer']); 
} 
?> 

<form action="delete.php" method="post"> 
    Are you sure? 
    <input type="submit" name="confirm" value="Yes"> 
    <input type="submit" name="confirm" value="No"> 

    <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>"> 
    <input type="hidden" name="referer" value="<?php echo $_SERVER['HTTP_REFERER']; ?>"> 
</form> 

ページ:

<script> 
    function confirmDelete(link) { 
     if (confirm("Are you sure?")) { 
      doAjax(link.href, "POST"); // doAjax needs to send the "confirm" field 
     } 
     return false; 
    } 
</script> 

<a href="delete.php?id=1234" onclick="return confirmDelete(this);">Delete record</a> 
15
<input name="_delete_" type="submit" value="Delete" onclick="return confirm('Are you sure?')"> 
+0

これはまだ簡単な答えですが、ありがたいです。 –

0
onclick="return confirm('Log Out?')? window.open('?user=logout','_self'): void(0);" 

は、このスクリプトを行なったし、その後、私はあまりにも、インターネットをチェックしに行く取り払わ。
はい、これは古い脅威ですが、似たようなバージョンはないようですが、私は貢献すると思っていました。
最も簡単な&最も単純な方法は、要素またはフィールドを含むすべてのブラウザで機能します。

立体構造がNULLまたはキャンセルされた場合は、void(0)と同じ、確認がTRUEあるときに実行するために他のコマンドにwindow.openを変更することができます。

0

私が見つけた最良の方法はここにあります。

HTMLコード

<a href="delete.cfm" onclick="return confirm('Are you sure you want to delete?');">Delete</a> 

はこれが機能するためにあなたはjQueryとブートストラップを追加する必要がありHEADセクションに

$(document).ready(function() { 
    $('a[data-confirm]').click(function(ev) { 
     var href = $(this).attr('href'); 
     if (!$('#dataConfirmModal').length) { 
      $('body').append('<div id="dataConfirmModal" class="modal" role="dialog" aria-labelledby="dataConfirmLabel" aria-hidden="true"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h3 id="dataConfirmLabel">Please Confirm</h3></div><div class="modal-body"></div><div class="modal-footer"><button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button><a class="btn btn-primary" id="dataConfirmOK">OK</a></div></div>'); 
     } 
     $('#dataConfirmModal').find('.modal-body').text($(this).attr('data-confirm')); 
     $('#dataConfirmOK').attr('href', href); 
     $('#dataConfirmModal').modal({show:true}); 
     return false; 
    }); 
}); 

をTHISを追加します。

0

<input type="submit" name="submit" value="submit" onclick="return confirm('Are you sure?');"/> ボタンでもこの操作を実行できます。

関連する問題