-1

簡単なメール購読フォームを作成したいのですが、まだ機能していません。ここに私がやりたいステップがあります。

  1. 検証は JavaScript コードを使用して行われ、失敗するとポップアップ エラー メッセージが表示されます。
  2. AJAX を使用して MySQL データベースに入力を渡し、PHP スクリプトでフォーム (サーバー側) を処理します。
  3. 成功すると、.responseText がドキュメント オブジェクトに出力されます。

これが私のコードフォームコードです:

    <div class="header_resize">
      <div class="logo">
        <h1><img src="images/logo.jpg" width="235" height="59" /></h1>
      </div>
      <div class="subs-form">
      <p id="ajaxanswer"><b>Subscribe to our newsletter.</b></p>
      <script>
      <!--
function validateForm()
{
var x = document.forms["subscription"]["email"].value;
var atpos = x.indexOf("@");
var dotpos = x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
  {
  alert("Not a valid e-mail address");
  return false;
  }
else
{
function ajaxFunction() {
    var ajaxRequest;    //The variable that makes AJAX possible!
        try  {  
            ajaxRequest = new XMLHttpRequest(); 
        }   catch (e)   {
        try  {
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        }   catch (e)   {
        try  {
            ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }   catch (e)   {
            alert ("Your Browser is not compatible!");
            return false;
            }
        }
    }   
// Function to receive data from server using  XMLHttpRequest object property  onreadystatechange
            // onreadystatechange stores function to process response from server
            ajaxRequest.onreadystatechange = function() {
                // ajax.Request.readystate == 4 means the response is complete
                if (ajaxRequest.readystate == 4) {
                    // response.Text is whatever data returned by server
                    document.getElementByID('ajaxanswer').value = ajaxRequest.reponseText;
                }
            }
        var email = document.getElementById('email').value;
        var queryString = "?email=" + email;
        ajaxRequest.open("GET", "subscribe.php" + queryString, true);
        ajaxRequest.send(null);
}
}
}
//-->
</script>
      <form name="subscription">
          <input type="text" name="email">
          <input type="submit" onclick='validateForm()' value="Submit Your Email">
      </form>
      </div>
      <div class="clr"></div>
    </div>

ここに私のphpコードがあります:

    <!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php

$conn=mysql_connect('localhost', 'dbuser', 'dbpwd') or die('Could not connect to MySql serve: ' . mysql_error());

mysql_select_db('dbname') or die('Could not select subscribe database: ' . mysql_error());

$safe_email = html_entity_decode($_GET['email']);

$sql="INSERT INTO subemail (email_addr) VALUES ('$safe_email')";

if (isset($_GET['email'])) {
    $failure = "There was an error when submitting the form!";
    $succeed = "Thank you for your subscription!";
    $subject = "Message Form - Email Subscription.";
    mail("my@email.com", $subject, "Email subscriber: " . $safe_email);
    echo $succeed;
    }
    else {
    echo $failure;
    }

mysql_close($conn);


?>
</body>
</html>

コードに何か問題がありますか?

4

3 に答える 3

0

古い XMLHttpRequest はブラウザに依存するため、ほとんどの人は使用しません。jQuery などの JavaScript フレームワークを使用してみてください。Ajax 呼び出しは最大 3 行のようです。そして、PHP jQuery Ajax をググってみてください。長期的には、プロジェクトはより管理しやすくなります

于 2013-05-21T00:46:15.347 に答える
0

これを機能させるために、質問からコードのいくつかの派手な行を削除する必要がありました。

<script type='text/javascript'>

    function subscribe(){
        var xmlhttp = false;

        if(window.XMLHttpRequest){
            xmlhttp = new XMLHttpRequest();
        }else{
            xmlhttp = ActiveXObject('Microsft.XMLHTTP');
        }


        xmlhttp.onreadystatechange  = function(){
           if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
                document.getElementById("ajaxanswer").innerHTML = xmlhttp.responseText;     
            }
        }

        var email  = document.getElementById("email").value;
        xmlhttp.open('GET', 'subscribe.php?email='+email, true);
        xmlhttp.send(null); // important for Firefox -3.0
    } 

</script>
    <input type="text" id="email" name="email">
    <input type="submit" onclick='subscribe()'  value="Submit Your Email">  
<div id="ajaxanswer"></div>

これで、subscribe.php ファイルに次の PHP コードが含まれているはずです。

<?php

$email = $_GET['email'];
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        echo 'invalid email';
    }else{
        echo 'your email is ok';
}
于 2013-05-21T00:48:54.587 に答える