30

2 つの別々の送信ボタンを配置したい Web サイトを開始しました。そのうちの 1 つは入力されたデータを取得し、同じ画面に表示するためにいくつかの計算を行います。私はこれでうまくいきました:

<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php">
<input type="submit" name="calc" value="Find Angle">

そして、私は使用します:

if (!isset($_POST['submit'])){
Do actions, display calculations}

ここで、入力したデータを引き続き取得するが、別のアドレスに移動する 2 番目の送信ボタンが必要です。これを行うエレガントな方法はありますか?

4

4 に答える 4

49

onclickフォームのアクションを変更してから送信する新しい送信ボタンにメソッドを追加できます。

<script type="text/javascript">
  function submitForm(action) {
    var form = document.getElementById('form1');
    form.action = action;
    form.submit();
  }
</script>

...

<form id="form1">
  <!-- ... -->
  <input type="button" onclick="submitForm('page1.php')" value="submit 1" />
  <input type="button" onclick="submitForm('page2.php')" value="submit 2" />
</form>
于 2012-05-21T19:52:57.940 に答える
19

ボタンのプロパティで formaction="page1.php" を使用して、フォームのアクションを変更できます。

<form id="form1" name="form1" method="post" onsubmit="" onreset="" action="programname.php">
    <input type="submit" name="calc" value="Find Angle">

    <input type="button" type="submit" formaction="page1.php">Action 0</button>
    <input type="button" type="submit" formaction="page2.php">Action 1</button>
</form>

注: ボタン タグの formaction 属性は、Internet Explorer 9 以前のバージョンではサポートされていません。

于 2014-07-28T06:55:47.597 に答える
11

複数の送信ボタンを処理する最善の方法は、アクション スクリプトで大文字小文字の切り替えを使用することです

<form action="demo_form.php" method="get">

    Choose your favorite subject:

    <button name="subject" type="submit" value="html">HTML</button>
    <button name="subject" type="submit" value="css">CSS</button>
    <button name="subject" type="submit" value="javascript">Java Script</button>
    <button name="subject" type="submit" value="jquery">jQuery</button>

</form>

アクション/サーバー側スクリプト:

demo_form.php

<?php

switch($_REQUEST['subject']) {

    case 'html': //action for html here
                break;

    case 'css': //action for css here
                break;

    case 'javascript': //action for javascript here
                        break;

    case 'jquery': //action for jquery here
                    break;
}

?>

参照: W3Schools

于 2016-08-05T05:23:07.837 に答える
0

別のアプローチは、いくつかのセッション変数を作成して使用して、簡単に実現できることです。

例: $_SESSION['validate']。

ボタンの HTML および PHP コード

<button type="submit" id="first_submit" style="<?php echo isset($_SESSION['validate'])?'display:none':'';?>">first submit</button>
<button type="submit" id="second_submit" style="<?php echo isset($_SESSION['validate'])?'':'display:none';?>">second submit</button>

jquery と ajax スクリプト

<script>
    $(document).ready(function(){

        $("#form").on('submit', function(e){
            e.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'handler-file.php',
                data:  new FormData(this),
                dataType: "json",
                enctype: 'multipart/form-data',
                contentType: false,
                cache: false,
                processData:false,
                error:function(error){
                    //your required code or alert
                    alert(error.responseText);
                },
                success: function(response){
                    if(response.status=='1')
                    {
                        //your required code or alert
                        $('#first_submit').hide();
                        $('#second_submit').show();
                    }
                    else if(response.status=='2')
                    {
                        //your required code or alert
                        $('#first_submit').show();
                        $('#second_submit').hide();
                    }
                    else
                    {
                        //your required code or alert
                    }
                }
            });
        });

    });
    </script>

ハンドラー PHP ファイル

<?php
session_start();

$result['status']='0';
$result['error']='';

if(!isset($_SESSION['validate']))
{
    if(!isset($_FILES['file'])) 
    {
        $result['error'].='[Er-02 file missing!]';
    }
    else
    {
        //your other code
        $_SESSION['validate'] = true;
        $result['status']='1';
    }
}
else if($_SESSION['validate']==true)
{
    if(!isset($_FILES['file'])) 
    {
        $result['error'].='[Er-03 Validation file missing!]';
    }
    else
    {
        //your other code
        unset($_SESSION['validate']);
        $result['status']='2';
    }
}
else
{
    $result['error'].='[Er-01 Invalid source!]';
}
echo json_encode($result); 

?>

最適または効率的なソリューションではない可能性があります。私の経験レベルはそれほど多くないので、利用可能なすべてのソリューションの後に、私の目的に最も適したこのソリューションを思いつきましたが、それらには制限があります。どこにもなかったのでここに書こうと思いました。

注: プレゼンテーション、スクリプト、およびバックエンド ファイル間の応答、成功、エラー処理などの他の部分が含まれていることに気付くかもしれません。

それが役に立てば幸い!

于 2020-06-03T07:04:27.607 に答える