【解決方法】PHPを使用してページの更新でフォームの送信を停止する方法


フォームからいくつかの値を送信していますが、問題は、ページを更新すると、隠しフィールドで送信された値がデータベースに自動的に挿入されることです。 また、ユーザーがサイトに登録するときに、プロダクト キーをメールで送信したいと考えています。 私のメール機能は正しいです。
コードはこちら

XML
<?php
include('header.php');
include('menu.php');
@$obj = new MyClass();

$name=$_REQUEST['name'];
$email=$_REQUEST['email'];
$phone=$_REQUEST['phone'];
$key=substr(number_format(time() * rand(),0,'',''),0,8);
$status='0';
$query  =   mysql_query("INSERT INTO `user` (`username`, `email`, `telephone`, `ProductKey`, `CreatedDate`,`ActiveStatus`) VALUES ('$name', '$email', '$phone', '$key',now(),'$status')");
//or die (mysql_error());
if($query)
    {     $query1       =   "SELECT * FROM `clearomizer` WHERE query.id='Sno'";

            $db_query   =   mysql_query($query1);
            $row        =   @mysql_fetch_array($db_query);

            $name       =   $row['username'];
            $key        =   $row['ProductKey'];
            $username   =   $row['email'];


     $to=$username;
           $subject="Your Key For The product";
           $msg="Dear $name,<br /><br />";
        $msg.="Welcome to live.com.  Your Activation Key Is $key. <br /><br />";
        $msg.="Thank you once again for purchasing this product. If you have any issue with our service or have any questions, you can reach us by following methods.";
            $msg.="<br /><br />Email: support@live.com <br /><br /><br/>";
            $msg.="Happy to serve you<br/>Team Live ";
            $headers= 'MIME-Version: 1.0' . "\r\n";
           $headers.= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
           $headers.= "From:www.live.com\r\n";
           mail($to,$subject,$msg,$headers);
    }
    else {

        echo "thanks";
        }


?>

<script  type="text/javascript">
 function validateForm()
{


  var x=document.forms["myForm"]["name"].value;
if (x==null || x=="")
  {
  alert("Please Enter First Name");
  return false;
  }
  var iChars = "abcdefghijklmnopqrstuvwxyz.ABCDEFGHIJKLMNOPQRSTUVWXYZ.  ";
var x=document.forms["myForm"]["name"].value;
for (var i = 0; i < x.length; i++)
{
if (iChars.indexOf(x.charAt(i)) == -1)
{

alert("Enter Alpha Value In Name");
return false;
}
} var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
  {
  alert("Please Enter a valid e-mail address");
  return false;
  }
  var x=document.forms["myForm"]["phone"].value;
if (x==null || x=="")
  {
  alert("Please Enter Contact Number");
  return false;
  }
  var iChars = "0123456789.-";
var x=document.forms["myForm"]["phone"].value;
for (var i = 0; i < x.length; i++)
{
if (iChars.indexOf(x.charAt(i)) == -1)
{

alert("Please Enter Numeric value In Contact");
return false;
}}

}
</script>


<form name="myForm"  onSubmit="return validateForm()" method="post">


 <table width="280" border="1" cellspacing="1" cellpadding="1">
  <tr>
    <td width="128">Name</td>
    <td width="145"><label for="name"></label>
      <input type="text" name="name" id="name"></td>
  </tr>
  <tr>
    <td>Email</td>
    <td><label for="email"></label>
      <input type="text" name="email" id="email"></td>
  </tr>
  <tr>
    <td>Contact No</td>
    <td><label for="phone"></label>
      <input type="text" name="phone" id="phone"></td>
  </tr>
  <tr>
    <td><input type="button" name="submit" id="submit" value="Submit"></td>
    <td>&nbsp;</td>
  </tr>
</table></form>
</div>

解決策 1

PHP と mysql を使用するときはいつでも従うベスト プラクティスまたは少なくともプラクティスは、フォームとデータベース スクリプトを別々のページに配置することです。 したがって、フォームを含むページを index.php と呼び、値をデータベースに保存するページを register.php と呼びます。

次に、index.php で jQuery AJAX を使用して、フォーム値を GET または POST 非同期リクエストで register.php に送信し、値をデータベースに保存して、ユーザーに電子メールを送信します。 すべての利点は、register.php ページへのリダイレクトなどを表示する必要がまったくないことです。index.php ページを離れることなく、これらすべてを行うことができます。 また、あなたのJavaScriptはjQueryから本当に恩恵を受けることができます: Jクエリ[^].

コードの問題は、フォームと PHP スクリプトの両方が同じページにあり、自分自身へのポストバックのチェックがないという事実にあるようです。 また、フォームタグに「アクション」属性がない場合、デフォルトはそれ自体にポストバックするため、更新すると同じ値が再ポストされます。

お役に立てれば。

編集: また、入力の検証に正規表現を使用し、ユーザーが送信ボタンをクリックするまで検証を延期しないでください。 コントロールがフォーカスを失ったらすぐに実行してみてください (jquery はここでその力を発揮し、気に入るはずです) 🙂

コメント

タイトルとURLをコピーしました