2

私はvalidate-emailjavascriptを作成し、それをフォームとPHPで動作させようとしています。クールの、いくつかの問題...

  1. 私のフォームでわかるように、メソッドとして「post」を定義しました。しかし、getメソッドであるかのようにデータを取得することしかできません。電子メール検証スクリプトを追加してコードを採用する前は、これは機能していました。

  2. 電子メールが正しくない場合、私はfalseを返します。test.php(実際に定義されている)へのリクエストは実行されるべきではないという点ではありませんか?現在のように、falseを返してもページにアクセスします。

  3. 上記の質問への回答に応じて、電子メールが正常に確認された場合、Javascriptからフォームを送信する必要がありますか?

javascript:

function isValidEmail() {
    regExp = /^[a-zA-Z]+([_\.-]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([\.-]?[a-zA-Z0-9]+)*(\.[a-zA-Z]{2,4})+$/;
 if(document.subscribe.email1.value.search(regExp) == -1){
          alert(document.subscribe.email1.value + " Incorrect email address");
    return false; 
    } 

//document.subscribeForm.submit();

return true; 
}

php:

<?php

echo $_POST['email1'];

$mysqli = mysqli_connect("localhost", "root", "", "test", "3306");

$result = mysqli_query($mysqli, "SELECT email, id, subscriber, subscribed_date FROM `user` u;");

while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
foreach($row as $key => $value){

   echo "$key = $value<BR/>";
}
}

mysqli_free_result($result);
mysqli_close($mysqli);

?>

html:

<div id="subscribe">
  <form action="test.php" name="subscribe" method=post">
    <p id="formlabel">E-mail</p> <input type="text" name="email1">
    <br>
    <p id="formlabel">Repeat e-mail</p> <input type="text" name="email2"> <br/>
    <input type="submit" value="Subscribe" onclick="isValidEmail()">
  </form> 
4

2 に答える 2

3
<input type="submit" value="Subscribe" onclick="isValidEmail()">

これが実行isValidEmail()され、結果が破棄されます。onclick自分自身が戻ってきて、undefined提出が妨げられることはありません。

あなたは言うことができますonclick="return isValidEmail()"。でも:

  1. 検証/送信のものをform onsubmitではなくinput clickに配置して、すべてのタイプのフォーム送信で常に呼び出されるようにします。

  2. インラインイベントハンドラーは避けたほうがよいでしょう。

  3. "フォームの属性でaを見逃したためmethod、デフォルトでに戻っていたと考えられgetます。

それで:

<form id="subscribe" method="post" action="test.php">
    ...
</form>

<script type="text/javascript>
    document.getElementById('subscribe').onsubmit= function() {
        if (!this.elements.email1.value.match(/^[^@]+@[^@]+$/) {
            alert('Please enter an e-mail address');
            return false;
        }
        if (this.elements.email1.value!=this.elements.email2.value) {
            alert('E-mail addresses do not match');
            return false;
        }
        return true;
    } 
</script>

現在使用している表現は偽物であり、多くの有効な電子メールアドレスを拒否するため、正規表現を簡単なものに置き換えました。彼らの電子メールアドレスがあなたの電子メールアドレスが何であるかというあなたの概念に合わないので顧客を遠ざけること。

正規表現を使用して電子メールアドレスを正しく「検証」することは、とてつもなく困難です。上記のような明らかに不正な文字列の些細なチェックのみを含めることをお勧めします。電子メールアドレスを実際に確認する必要がある場合は、実際に電子メールアドレスにメールを送信するか、少なくともアドレスのドメイン名部分でMXerを検索する必要があります。

議論のためにこの質問を見てください。

于 2010-02-08T12:36:52.047 に答える
2

フォームのonsubmitイベントに関数をアタッチする必要があります。

<form action="test.php" name="subscribe" method="post" onsubmit="isValidEmail()">

ここで、falseを返すイベントを停止できます。また、method = post "でタイプミスをしたため、POSTデータとして送信されません。

于 2010-02-08T12:26:00.630 に答える