2017-02-06 12 views
2

PHPにPOSTする前にJavascriptで検証を実行したいhtmlのフォームがあります。しかし、PHPセクションまでのリンクは、各入力タグに名前を割り当て、フォームタグにアクション属性を指定したにもかかわらず、動作していないようです。ここでjavascriptからPHPにフォームを送信できません

は、フォームのHTMLコードです:

<form id="signupform" action="signupform.php" method="post"> 
    <input type="text" name="Email" placeholder="Email Address" class="signupinput" id="email" /> 
    <br /> 
    <input type="password" name="Password" placeholder="Password" class="signupinput" id="passwordone" /> 
    <br /> 
    <input type="password" placeholder="Repeat Password" class="signupinput" id="passwordtwo" /> 
    <br /> 
    <input type="button" value="Sign Up" class="signupinput" onClick="verifypass()" id="submit" /> 
</form> 

ボタンは、私はPHPに送信する前に私のフォームの値を確認するために使用するJavaScript関数を呼び出します:

function verifypass() { 
    var form = document.getElementById("signupform"); 
    var email = document.getElementById("email").value; 
    var password1 = document.getElementById("passwordone").value; 
    var password2 = document.getElementById("passwordtwo").value; 
    var emailcode = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 

     if (emailcode.test(email)) { 
     if (password1.length > 6) { 
      if (password1 == password2) { 
      form.submit(); //this statement does not execute 
      } else { 
      $("#passwordone").notify("Passwords do not match!", { 
       position: "right" 
      }) 
      } 
     } else { 
      $("#passwordone").notify("Password is too short!", { 
      position: "right" 
      }) 
     } 
     } else { 
     $("#email").notify("The email address you have entered is invalid.", { 
      position: "right" 
     }) 
     } 
    } 
+1

あなたのコンソールはform.submit()で何と言うのですか? – Akintunde007

+0

ユーザーが望む[passwords/phrases](https://xkcd.com/936/)を使用できるようにします。 [パスワードを制限しないでください](http://jayblanchard.net/security_fail_passwords.html) –

+0

**プレーンテキストのパスワードを保存しないでください!** PHPの[組み込み関数](http:// jayblanchard)を使用してください。 net/proper_password_hashing_with_PHP.html)を使用してパスワードセキュリティを処理します。 5未満のPHPバージョンを使用している場合。5あなたは 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使うことができます。 *** [パスワードをエスケープしない](http://stackoverflow.com/q/36628418/1011527)***を確認するか、ハッシュする前に他のクレンジングメカニズムを使用してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

答えて

2

何らかの理由で、JavaScriptの実装によってはHTML要素IDとコードが混在しています。あなたの送信ボタンに別のIDを使用している場合には、(id="somethingelse"代わりid="submit"の)動作します:

<input type="button" value="Sign Up" class="signupinput" onClick="verifypass()" id="somethingelse" /> 

は(私はid="submit"が提出方法は、ボタンのノードを使用して、フォームのノードに上書きされる効果があると思います。なぜ、おそらくform.buttonid.valueのようなショートカットを許可することは決して考えられませんでした。私はIDとして可能なメソッド名を使用することを避けています)。

0

を私は思いますあなたがそれをリアルタイムで行うと、ユーザーが各入力を離れるときにエラーを送信する方が良いでしょう。たとえば、電子メールアドレスを設定する入力があります。 Javascriptでonfocusoutイベントが発生したときに、チェッカー機能を呼び出すeventlistenerを電子メール入力に追加できます。 フォーム入力を扱う簡単な例があります。 (下のコード) 完全なシステムでは両側をチェックする必要があるため、重大な攻撃から身を守ることはできません。 Javascriptの例

説明:

  • 2入力、電子メール、およびパスワードがあり、すべてが正しいかどうか示されている隠しボタンがあります。
  • 電子メールチェック機能とパスワードチェック機能は入力フィールドの値をチェックしており、3マークの長さでない場合はエラーを表示します。
  • showIt funcitonは真であれば、送信ボタンを表示します。
  • 最後の関数は、入力フィールドのステータスを格納するfieldsオブジェクトを反復します。falseの場合はfalseを返します。これは、showIt関数が取得するブール値です。

希望です。

1

私はそれがうまくいかない理由はよくわかりませんが、使用すればform.submit(); の代わりに<input type="submit"/>を入力し、の代わりにonsubmitイベントを使用します0。そうすれば、IIRCは本当か偽かを返すだけです。

関連する問題