1

単一レコードのデータベースからデータを編集するために使用される、PHPで生成されたHTML4移行ページがあります。ユーザーには、変更を保存するか、レコードを削除するかの2つのオプションがあります。コントロール付きのフォームを使用します(一部は非表示になっています):

<form method="post" action="object_mod.php"><!-- this is another file -->
<!-- inputs follow -->

私は2つのアクションを処理したいので、すなわち。レコードを削除または保存するフォームの</FORM>タグの前に2つの送信ボタンを配置しました。

<input type="submit" id="btnSubmit" value="Save">
<input type="submit" id="btnDelete" value="Delete">
</form>

ユーザーが削除を確認する必要があるため、次のonclickイベントを追加しました。

<input type="submit" id="btnDelete" value="Delete" onclick="javascript:deleteRecordConfirm();">

javascript:(ともなしで試しonclick="javascript:deleteRecordConfirm(); return true;"ました)が、フォームを送信しません。

JS機能は

function deleteRecordConfirm(){
  if(confirm('Are you sure to delete?')){
    document.getElementById("field_action").value=-1;
    //document.forms[0].submit();
    return true;
  }
}

これfield_actionは-1に設定されているので、object_mod.phpで、レコードを保存するのではなく削除したいことがわかります。

ここで質問に行きます、なぜこのフォームは削除時に送信されないのですか?

ユーザーがJavascriptを無効にして、確認がなくてもフォームを送信できないようにするとよいと思います。そのため<INPUT TYPE="submit">、削除に使用します。それは良い考えですか?私は、2つの独立したフォーム(実際には、削除にはレコードIDを持つ1つの非表示フィールドのみが必要です)に独自の送信ボタンを指定することを考えていました。1つは削除用、もう1つは保存用です。

実際、このページはある種のイントラネットで機能し、信頼できるユーザーがいて、ハッキングなどを恐れることはありませんが、セキュリティに関するコメントも歓迎します。

(Firefox 19.0でテストしましたが、Javascriptコンソールにエラーは表示されません。w3cバリデーターは有効なページだと言っています)。

4

3 に答える 3

2

コードに従ってフォームを送信する必要があります。私が見つけた唯一のことは、入力タグを/>.

しかし...この方法では、確認がキャンセルされても、フォームは送信されます。ハンドラーを使用し、form.onsubmitそれが false を返す場合、フォームは送信されません。

@B3aTの答えは、無条件に「外部化」するための最良の方法ではないという点で正しいとは思いません。多くの場合、最もシンプルなものが最適です。

于 2013-02-28T20:46:42.570 に答える
1

実際のフォーム投稿を「外部化」するのが最善の方法だと思います。

//通常のボタンを作成します(送信しない)//独自の関数を呼び出します(保存および削除)//ロジックを実行した後document.forms["myform"].submit();

別の解決策は、「削除」という名前のチェックボックスを追加し、「保存」ボタンの名前を「完了または実行」に変更することです。また、サーバー側で「削除」が有効になっている場合は、削除します。

通常、「削除」は「エントリごと」のレベルで必要です(同じユーザーが複数のレコードを持っている)ので、別のボタン/リンクを作成し、最終的にajaxリクエストを実行/?delete = 1&id=3のURLにアクセスする必要があります。

カスタムのyes/noウィンドウを作成するか、jQueryプラグインを使用する必要があります。ブラウザの標準は「確認」のみです。

于 2013-02-28T20:41:19.913 に答える
0

OK、うまくいきました。実際、これは非常にばかげた間違いでした。このボタンはフォームの外側にあるため、問題はこのボタンにありました。私はそれを内部に持っていると確信していたので、PHPコードを確認せず、HTML出力ではなくスクリプトからすべてコピーする必要がありました.

私がこれを正しく理解しているように、行document.forms[0].submit();は機能しましたが、フォームを送信したのはボタンではなく、document.form[0]オブジェクト自体だったからです。

ご回答ありがとうございます。マルセルからのこのform.onsubmitヒントを試してみます。

于 2013-02-28T21:34:52.723 に答える