0

私はこれについて頭を悩ませていることを認めます。月曜日までにこのページを機能させる必要があるため、時間がなくなり、必死になっています。私は先週、スタックオーバーフローの回答をグーグルで検索して調べましたが、これを機能させる方法がまだわかりません。

下部に 2 つの送信ボタン、HOLD RESERVATION と BOOK NOW がある 1 つのフォームがあります。各ボタンはフォーム データを送信する必要があり (電子メールのみで、空想は何もありません)、予約確認の静的な HTML ページまたは予約ページにリダイレクトします。

これはうまくリダイレ​​クトされますが、フォームデータをメールで送信しません。

<input type="submit" onclick="var e = document.getElementById('mpNOV'); e.submit(); e.action='mp-NOVconfirm.shtml';" value="Hold my reservation" class="submit"></td>
<td width="45%" style="padding-top:10px; padding-bottom:10px; border-top: 1px solid #6f3957;">
<input type="submit" onclick="var e = document.getElementById('mpNOV'); e.submit(); e.action='../../index.shtml';" value="Book Now!" class="submit">

私は FORM ACTION="external.php" を php コードにしてみました (別のフォーム送信に使用した php コードに基づいています):

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST')
 {
 if(isset($_POST['Reservation']))
 {
 $subject = 'New Machu Picchu RESERVATION - November'; 
 $emailadd = 'jodi@happywivestravel.com'; 
 $url = 'http://www.happywivestravel.com/tour/machupicchu/mp-NOVconfirm.shtml'; 
 $req = '0';
 $text = "Results from form:\n\n"; 
 $space = ' ';
 $line = ' 
 ';
 foreach ($_POST as $key => $value)
 {
  if ($req == '1')
  {
  if ($value == '')
  {echo "$key is empty";die;}
 }
 $j = strlen($key);
 if ($j >= 20)
 {echo "Name of form element $key cannot be longer than 20 characters";die;}
 $j = 20 - $j;
 for ($i = 1; $i <= $j; $i++)
 {$space .= ' ';}
 $value = str_replace('\n', "$line", $value);
 $conc = "{$key}:$space{$value}$line";
 $text .= $conc;
 $space = ' ';
 }
 mail($emailadd, $subject, $text, 'From: '.$emailadd.'');
 echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
}

if(isset($_POST['Book']))
{
 $subject = 'New Machu Picchu BOOKING - November'; 
 $emailadd = 'jodi@happywivestravel.com'; 
 $url = 'http://www.happywivestravel.com/';
 $req = '0'; 
 $text = "Results from form:\n\n"; 
 $space = ' ';
 $line = ' 
 ';
 foreach ($_POST as $key => $value)
 {
  if ($req == '1')
  {
  if ($value == '')
  {echo "$key is empty";die;}
 }
 $j = strlen($key);
 if ($j >= 20)
 {echo "Name of form element $key cannot be longer than 20 characters";die;}
 $j = 20 - $j;
 for ($i = 1; $i <= $j; $i++)
 {$space .= ' ';}
 $value = str_replace('\n', "$line", $value);
 $conc = "{$key}:$space{$value}$line";
 $text .= $conc;
 $space = ' ';
}
mail($emailadd, $subject, $text, 'From: '.$emailadd.'');
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
}
}
?>

しかし、送信ボタンをクリックしても何も起こらないので、ここで何か間違ったことをしたに違いありません。リダイレクトなし、フォーム データはメール送信されません。

私はもともと、この関数をキャプチャ スクリプトで動作させたいと思っていましたが、今のところそれを破棄する必要がありました。これらの送信ボタンをできるだけ早く適切に機能させる必要があります。

私はphpについてほとんど何も知りません.javascriptには非常に慣れています(ここに行くにつれて学んでいます)。ここで何か助けていただければ幸いです。ありがとうございました!!

4

4 に答える 4

1

より簡単な jquery メソッド:

$('#buttonid1').click(function() {
    $('#formid').attr('action', '/path/page1/');
    $('#formid').submit();
});
$('#buttonid2').click(function() {
    $('#formid').attr('action', '/path/page2/');
    $('#formid').submit();
});

言ってるだけ...

于 2014-03-15T09:47:36.530 に答える
1

ここで jQuery がベスト フレンドになります。

ID付きの2つのボタン。

<input type="button" id="btn1" value="Hold my reservation" class="submit">
<input type="button" id="btn2" value="Book Now!" class="submit">

次に、jQuery を使用して ID とその中で 2 つのボタン クリック アクションを検出し、Ajax 呼び出しを POST 要求 (フォーム送信) として送信してからリダイレクトします。ボム。

$('#btn1').click(function()
{
    $.ajax(
    {
        url: "submit_script.php",
        type: "POST",
        data: {input1: input1, input2: input2},
        dataType: "html",
        success: function(data)
        {
            window.location = 'http://www.example.com/page.php';
        }
    });
});

$('#btn2').click(function()
{
    $.ajax(
    {
        url: "submit_script.php",
        type: "POST",
        data: {input1: input1, input2: input2},
        dataType: "html",
        success: function(data)
        {
            window.location = 'http://www.example.com/page.php';
        }
    });
});

Ajax 内で創造性を発揮し、それぞれに必要な入力フィールドを送信できます。これは、それらを分離する方法、および/または各クリックを別の送信 URL に送信する方法です。

関数パラメータ内でdata変数を使用して、「page.php」にデータを渡すこともできます。

また

ボタン名の名前を変更するだけで、送信フォーム内でどのボタンを押したかを検出し、送信ページの投稿内でそれを検出できます。

上記の解決策については、このページを参照してください:
stackoverflow.com/questions/547821/two-submit-buttons-in-one-form

于 2013-03-29T16:03:49.933 に答える
0

フォーム タグ内のボタンを削除しないのはなぜですか。そして、それでナビゲートしますか?

<form id="formid" action="link" method="post">
于 2013-03-29T15:39:04.537 に答える
0

次のように、送信ボタンReservationとに名前を付けてみてください。Book

<input type="submit" onclick="this.name='Reservation'; var e = document.getElementById('mpNOV'); e.submit(); e.action='mp-NOVconfirm.shtml';" value="Hold my reservation" class="submit"></td>
<td width="45%" style="padding-top:10px; padding-bottom:10px; border-top: 1px solid #6f3957;">
<input type="submit" onclick="this.name='Book'; var e = document.getElementById('mpNOV'); e.submit(); e.action='../../index.shtml';" value="Book Now!" class="submit">
于 2013-03-29T16:13:38.353 に答える