4

私が取り組んでいる Web サイトでは、サインオンをクリックすると jquery ダイアログ モーダルがポップアップしますが、[OK] をクリックしてフォームを送信する必要があります。仕事にも入ることができるようにする必要があります。私が持っているものは機能するはずですが、機能しません

jquery-1.3.2.js を使用しています。次のコードを含む php ファイルもあります。

  <tr valign="top" align="right" style="height:40px"><td >

    <div id="signin">

      <table style="margin-top:4px;margin-right:4px;border-style:solid;border-width:1px">

        <tr><td style="width:165px;">  

            <div><center>

            <a title="Sign In" onclick="LoginDialogOpen()" href="javascript:void();">Sign In</a><b>&nbsp;&nbsp; | &nbsp;&nbsp;</b>

            <a title="Create Account" href="CreateAccount.html">Create Account</a>

            </center></div>  

        </td></tr>

      </table>

    </div>

  </td></tr>

    <div id="Signin_Dialog" >

    <div id="bg">

    <label><span>Email:</span></label>

    <input type="text" name="email" id="email" class="dialog-input-text"/>

    <br>



    <label><span>Password:</span></label>

    <input type="password" name="password" id="password" class="dialog-input-text"/>

    <br>

    <br>

    <center><b><label id="login_error" style="color:red"><span>&nbsp;</span></label></center></b>



  </div>

</div>



<script>

    $('#login_dialog').dialog({

        autoOpen: false,

        width: 310,

    overlay: { opacity: 0.5, background: "black" },

  modal: true,

        buttons: {

            "Ok": function() { 

      $("body").addClass("curWait");                

      sql = "select client_id from users where email = '" + $("#email")[0].value + "' and login_password='" + $("#password")[0].value + "'";

      $.get('BongoData.php', { task:"SQLResultToJSON", sql: sql}, ResultOfLoginAttempt, "json");

            }, 

            "Cancel": function() { 

                $(this).dialog("close"); 

            } 

        }

    });


</script>`

次の機能を備えたJavaScriptファイルがあります。

function LoginDialogOpen(){

  $('#login_dialog').dialog('open');
  $('#login_dialog').keypress(function(e) {
    if (e.which == 13) {
      $("body").addClass("curWait");                

      sql = "select client_id from users where email = '" + $("#email")[0].value + "' and login_password='" + $("#password")[0].value + "'";

      $.get('BongoData.php', { task:"SQLResultToJSON", sql: sql}, ResultOfLoginAttempt, "json");
    }
});

}

それが私が持っているコードですが、なぜ機能しないのかわかりません。

$('#login_dialog').dialog('isOpen'); も試してみました。開いた直後ですが、奇妙なことに常にfalseが返されました。できれば助けてください。

4

3 に答える 3

3

生のクライアント側 SQL に関して他の人が作成したすべてのメモを検討することを強くお勧めします!

あなたの実際の質問に関して、私は次のことを提案します: ログインダイアログに次のようにフォームを置きます:

<div id="login_dialog">
  <form method="get" action="BongoData.php">
    <input type="text" name="email" />
    <input type="password" name="password" />
    <input type="submit" />
  </form>
</div>

次に、ダイアログが初期化されるスクリプト部分で、次のように記述します。

$('#login_dialog').dialog({
  autoOpen: false,
  width: 310,
  overlay: { opacity: 0.5, background: "black" },
  modal: true,
  buttons: {
    "Ok":     function() { $('#login_dialog form').submit(); },
    "Cancel": function() { $(this).dialog("close"); } 
  }
});

// hide the original submit button if javascript is active
$('#login_dialog form input[type=submit]').hide();
// register a submit handler to submit the form asynchronously
$('#login_dialog form').submit(function () {
  // calling serialize() on a form transforms form inputs to a string suitable for $.get and $.post
  $.get($(this).attr('action'), $(this).serialize(), ResultOfLoginAttempt, "json");
  // prevent that the browser submits the form.
  return false;
});
// and register a key listener to submit the form if the user presses enter on the password input field
$('#login_dialog form input[type=password]').onKeyDown(function (e) {
  if (e.which == 13) {
    // just trigger the submit handler
    $('#login_dialog form).submit();
  }
});

これらの準備により、JavaScript を大幅に簡素化できます。

function LoginDialogOpen(){
  $('#login_dialog').dialog('open');
}

いくつかの追加メモ: JavaScript で SQL を使用しないでください。代わりに、準備された SQL を使用してカスタマイズされた php ファイルを作成し、ログイン データを確認します。このソリューションでは、ブラウザから送信できる標準の html フォームであるため、javascript が存在しない場合、ログイン フォームは正常に機能しなくなります。また、一部のブラウザーは、追加の要件なしで Enter でフォームを送信する (つまり、送信ハンドラーをトリガーする) という事実にも注意する必要があります。最後のアクションとして、「ResultOfLoginAttempt」メソッド内でダイアログを手動で閉じる必要があるかどうかを最終的に確認する必要があります。

于 2010-09-28T09:27:26.717 に答える
0

if (e.keyCode == 13) {ではなく、という意味だと思いますif (e.which == 13) {

また、イアン・エリオットも正しいです。JavaScriptの一部またはフォームの一部として実際のSQLを使用しないでください。最終的に SQL* に補間される値をサーバーに送信できますが、完全な SQL は送信できません。

*値が適切に検証され、サニタイズされ、オプションで別の抽象化レイヤーを通過したら (MVC を考えてください)。

于 2009-07-11T08:44:00.633 に答える
0

Tamper Plugin for Fire Fox を見てください: Tamper Data 10.1.0 クライアント側で SQL を生成するのが悪いです。http リクエストを乗っ取ることができます。

于 2009-07-11T08:48:52.230 に答える