0

phpで必要なjQuery関数を呼び出すのに苦労していたので、それらをjavascriptに追加しましたが、私がよく知っているメソッド(success関数)では、phpがINSERTINTOクエリとSELECTクエリ以外を実行できません。このスクリプトを変更してphpを完成させるにはどうすればよいですか、および/または次のことを実行できるようにコードを組み合わせるにはどうすればよいですか?

フォームを検証します(男性と女性に別々のルールがあります)

検証が成功した場合:両方の性別:parent.close_field('notice'); (現在、javascriptでのみ機能します)

性別が女性の場合:

  • customer_infoテーブルに情報を挿入します
  • このアカウントに割り当てられたuser_idを識別します
  • ユーザーを次のページにリダイレクトします(現在、phpとjavascriptの両方で)

性別が男性の場合:

  • リクエストを通知するメールを生成します
  • 情報をinvite_requestsテーブルに挿入します
  • 男性へのエコーメッセージ(現在は両方で、推奨される方法はphpです)
  • Fancybox iframeを閉じます(現在、javascriptでのみ機能します)

私はfancybox2とこのjQuery検証プラグインを使用していますhttp://bassistance.de/jquery-plugins/jquery-plugin-validation/

Javascript

var $custInfo = $("#customer_info");
$(document).ready(function () {
  var validator = $custInfo.validate({
    rules: {...},
    messages: {...},
    errorLabelContainer: "#messageBox",
    submitHandler: function () {
        $custInfo.ajaxSubmit({
            success: function () {
                if ($('input[name=gender][value=female]').is(':checked')) {
                    parent.close_field('notice');
                    window.location.href = "page1.html";
                } else if ($('input[name=gender][value=male]').is(':checked')) {
                    parent.close_field('notice');
                    parent.$.fancybox.close();
                    alert("This isn’t available yet for men, but we’ll send you an invitation as soon as it is");
                }
            }
        });
    }
  });
  $custInfo.find("input[name=gender]").change(function () {
    if ($(this).val() == "male") {
        $custInfo.submit();
    }
  });
}); 

PHP

<?php
//Start session and connection to database goes here
//Function to sanitize values received from the form goes here     
$gender = $_POST['gender'];
if ($gender==="female" ) {
    // INSERT information into customer_info table    
   $qry = "INSERT INTO customer_info(fname, lname, gender, zip, email, phone, terms, security_question, security_answer, participating_retailers, notify_new_items, notify_promotions, priority1, priority2, priority3, priority4, priority5, gift_privacy, user_name, password, Quickfill)      VALUES('$_POST[fname]','$_POST[lname]','$_POST[gender]','$_POST[zip]','$_POST[email]','$_POST[phone]','$_POST[terms]','$_POST[security_question]','$_POST[security_answer]','$_POST[participating_retailers]','$_POST[notify_new_items]','$_POST[notify_promotions]','$_POST[priority1]','$_POST[priority2]','$_POST[priority3]','$_POST[priority4]','$_POST[priority5]','$_POST[gift_privacy]','$user_name','".md5($_POST['password'])."','$_POST[Quickfill]')";
       $result = @mysql_query($qry);     
    if($result) {   

// Identifies user_id assigned to this account
          $qry="SELECT * FROM customer_info WHERE user_name='$user_name' AND password='".md5($_POST['password'])."'";
          $result=mysql_query($qry);            
    if($result) {
        if(mysql_num_rows($result) == 1) {
            session_regenerate_id();
            $member = mysql_fetch_assoc($result);
            $_SESSION['SESS_USER_ID'] = $member['user_id'];
            $_SESSION['SESS_USER_NAME'] = $member['user_name'];
            session_write_close();
// Redirects user to the next page
            header("location: page1.html");
            exit();
        }else {  //user_name failed
            header("location: login_failed.html");
            exit();  }   
    }else { die("Unable to access your account (Error Message 1)");   }    
    }else { die("Unable to access your account (Error Message 2)");   } 
  }   
// If Gender is Male    
  else { 
// Notify us of request via email    
$sendto  = "info@click2fit.com";$userfname = $_POST['fname'];$userlname = $_POST['lname'];$usermail = $_POST['email'];$gender = $_POST['gender'];$subject  = "Invite Request - " . ($gender) . " ";
// INSERT information into invite_requests table
   $qry = "INSERT INTO invite_requests(fname, lname, gender, zip, email, phone, terms, participating_retailers, notify_new_items, notify_promotions, priority1, priority2, priority3, priority4, priority5, gift_privacy, user_name, password, Quickfill)         VALUES('$_POST[fname]','$_POST[lname]','$_POST[gender]','$_POST[zip]','$_POST[email]','$_POST[phone]','$_POST[terms]','$_POST[participating_retailers]','$_POST[notify_new_items]','$_POST[notify_promotions]','$_POST[priority1]','$_POST[priority2]','$_POST[priority3]','$_POST[priority4]','$_POST[priority5]','$_POST[gift_privacy]','$user_name','".md5($_POST['password'])."','$_POST[Quickfill]')";
    $result = @mysql_query($qry);
 // Echo message to Men
  echo "<p><strong>Click2Fit is not yet available for men, but we'll be sure to send an invitation as soon as it is</strong></p>"; 
// Redirects user - This should be replaced with the function which closes the fancybox iframe
  header("location: home.html");
exit();     
    }
?>
4

1 に答える 1

1

javascriptはクライアント側の言語(ユーザーのブラウザーで実行されることを意味します)であり、phpはサーバー側の言語(サーバー上で実行されることを意味します)であることを理解することが重要です。javascriptとphpを相互に作用させるには、AJAXを使用する必要があります。

すでにjQueryを使用しているので、 AJAXapiを確認することをお勧めします。基本的に、JavaScriptコード内からphp関数を呼び出すたびに、次のようなことが起こります。

$.ajax({
  type: "POST", /*usually POST, but it can also be GET and some other HTTP requests in certain browsers*/
  url: "some.php", /*the url of the php which processes your data*/
  data: { name: "John", location: "Boston" } /*the data you want to pass to the server.  It will be contained in the $_POST array because of the 'type: "POST"' line above*/
}).done(function( msg ) {
  alert( "Data Saved: " + msg ); /*'msg' is what server send back to you while the contents of the function are what you do once the server finishes.  You can change the variable name, msg, as well as the function contents to suit your needs */
});
于 2012-12-01T01:35:51.780 に答える