Post有请求有限数量的参数吗?

时间:2018-02-03 16:11:25

标签: javascript php

我试图向我的服务器发送5个参数:

  1. 操作:将包含表单的名称,在这种情况下为" 登录"
  2. 姓名:想要登录的人的姓名
  3. 姓氏:想要登录的人的姓氏
  4. 电子邮件:想要登录的人的电子邮件
  5. 密码:想要登录的人的密码
  6. 问题是我的服务器只读取4个参数:姓名,姓氏,电子邮件和密码,而且看不到行动!

    以下是代码:

    使用Javascript:

    function signin() {
        alert("OK");
        var action = $(this).attr('name'); // puts in action the name of the form (this case "signin")
        $.ajax({
            type: "POST",
            url: "submit.php",
            data: {
                Action: action, // the server don't see it!!
                Name: document.getElementById('signin-name').value, // Name in the form
                Surname: document.getElementById('signin-surname').value, // // Surname in the form
                Email: document.getElementById('singin-email').value, // Email in the form
                Password: document.getElementById('singin-password').value // // Password in the form
            },
            cache: false,
            success: function() {
                alert("success");
                window.location.href = "index.php"; // load the index.php page, which contains the login form
            }
        });
    }
    

    PHP - Signin.php:

    <!-- Signin Form -->
    
    <?php
    require('include/header.php');
    ?>
    
    <div class="limiter">
        <div class="form-container">
            <div class="form-wrap">
                <form action="submit.php" method="post" name="form-signin" id="form-signin" autocomplete="off">
    
                    <span class="form-title">Registration form</span>
    
                    <div class="form-field">
                        <label for="Name">Name</label>
                        <input type="text" name="Name" id="signin-name" class="form-control" required pattern=".{1,100}" autofocus>
                    </div>
                    <div class="form-field">
                        <label for="Surname">Surname</label>
                        <input type="text" name="Surname" id="signin-surname" class="form-control" required pattern=".{1,100}" autofocus>
                    </div>
                    <div class="form-field">
                        <label for="email">Email address</label>
                        <input type="email" name="Email" id="signin-email" class="form-control" required>
                    </div>
                    <div class="form-field">
                        <label for="Password">New password</label>
                        <input type="password" name="Password" id="signin-password" placeholder="Almeno 6 caratteri" class="form-control">
                    </div>
                    <div id="display-error" class="alert alert-danger fade in"></div><!-- Display Error Container -->
    
    
    
                    <div class="form-submit-container">
                        <div class="form-submit-wrap">
                            <button class="form-cancel-button" type="submit">Cancel</button>
                            <button class="form-submit-button" type="submit" onclick="signin()">Signin</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
    
    <?php require('include/footer.php');?>
    

    PHP - Submit.php:

    <?php
    
    #Detect AJAX and POST request, if is empty exit
    if((empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') or empty($_POST)){
        exit("Unauthorized Acces");
    }
    
    require('inc/config.php');
    require('inc/functions.php');
    
    # Check if Login form is submitted
    if(!empty($_POST) && $_POST['Action'] === 'form-login'){
    
        # Define return variable. for further details see "output" function in functions.php
        $Return = array('result'=>array(), 'error'=>'');
    
        $email = $_POST['Email'];
        $password = $_POST['Password'];
    
        /* Server side PHP input validation */
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $Return['error'] = "Please enter a valid Email address.";
        } else if($password === '') {
            $Return['error'] = "Please enter Password.";
        }
        if($Return['error']!='') {
            output($Return);
        }
    
        # Checking Email and Password existence in DB
    
        # Selecting the email address of the user with the correct login credentials.
        $query = $db->query("SELECT Email FROM USERS WHERE Email='$email' AND Password='$password'");
        $result = $query->fetch(PDO::FETCH_ASSOC);
    
        if($query->rowCount() == 1) {
            # Success: Set session variables and redirect to Protected page
            $Return['result'] = $_SESSION['UserData'] = $result;
        } else {
            # Failure: Set error message
            $Return['error'] = 'Invalid Login Credential.';
        }
    
        output($Return);
    }
    
    # Check if Registration form is submitted
    if(!empty($_POST) && $_POST['Action'] === 'form-signin') {
    
        # Define return variable. for further details see "output" function in functions.php
        $Return = array('result'=>array(), 'error'=>'');
    
        $name = $_POST['Name'];
        $surname = $_POST['Surname'];
        $email = $_POST['Email'];
        $password = $_POST['Password'];
    
        # Server side PHP input validation
        if($name === '') {
            $Return['error'] = "Please enter Full name.";
        } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $Return['error'] = "Please enter a valid Email address.";
        } else if($password === '') {
            $Return['error'] = "Please enter Password.";
        }
        if($Return['error']!='') {
            output($Return);
        }
    
        # Check Email existence in DB
        $result = $db->query("SELECT Email FROM USERS WHERE Name='$name' AND Surname='$surname' AND Email='$email'");
        if($result->rowCount() == 1){
            # Email already exists: Set error message
            $Return['error'] = 'You have already registered with us, please login.';
        }else{
            # Insert the new user data inside the DB
            try{
                $db->query("INSERT INTO `users` (`ID_user`, `Name`, `Surname`, `Email`, `Password`) VALUES (NULL, '$name', '$surname', '$email', '$password')");
            }
            catch (PDOException $e) {
                echo $e->getMessage();
            }
    
            # Success: Set session variables and redirect to Protected page
            $Return['result'] = $_SESSION['UserData'] = $result;
        }
    
        output($Return);
    }
    

    PHP - Functions.php

    # Function to set JSON output
    function output($Return=array()){
        header('Content-Type: application/json; charset=UTF-8');
        #exit(json_encode($Return)); # Final JSON response
        echo json_encode($Return);
    }
    

    这是调试器的屏幕截图: Debug Screenshot

2 个答案:

答案 0 :(得分:0)

function signin() {
    alert("OK");
    var action = $('#form-signin').attr('name'); // puts in action the name of the form (this case "signin")
    
  //  alert(action);
    $.ajax({
        type: "POST",
        url: "submit.php",
        data: {
            Action: action, // the server don't see it!!
            Name: $('signin-name').val(), // Name in the form
            Surname: $('signin-surname').val(), // // Surname in the form
            Email: $('singin-email').val(), // Email in the form
            Password: $('singin-password').val() // // Password in the form
        },
        cache: false,
        success: function() {
            alert("success");
            window.location.href = "index.php"; // load the index.php page, which contains the login form
        }
    });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="limiter">
    <div class="form-container">
        <div class="form-wrap">
            <form action="submit.php" method="post" name="form-signin" id="form-signin" autocomplete="off">

                <span class="form-title">Registration form</span>

                <div class="form-field">
                    <label for="Name">Name</label>
                    <input type="text" name="Name" id="signin-name" class="form-control" required pattern=".{1,100}" autofocus>
                </div>
                <div class="form-field">
                    <label for="Surname">Surname</label>
                    <input type="text" name="Surname" id="signin-surname" class="form-control" required pattern=".{1,100}" autofocus>
                </div>
                <div class="form-field">
                    <label for="email">Email address</label>
                    <input type="email" name="Email" id="signin-email" class="form-control" required>
                </div>
                <div class="form-field">
                    <label for="Password">New password</label>
                    <input type="password" name="Password" id="signin-password" placeholder="Almeno 6 caratteri" class="form-control">
                </div>
                <div id="display-error" class="alert alert-danger fade in"></div><!-- Display Error Container -->



                <div class="form-submit-container">
                    <div class="form-submit-wrap">
                        <button class="form-cancel-button" type="submit">Cancel</button>
                        <button class="form-submit-button" type="submit" onclick="signin()">Signin</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

答案 1 :(得分:0)

问题出在$this的范围内。由于您的Javascript是在BUTTON元素中调用的,因此$this具有相对于按钮的范围,而不是表单。在尝试检查$this自行返回的内容时,会显示[object Window]

function signin() {
 console.log(this);
}

Console:
[object Window]

如果您打算将Javascript重新用于其他表单,或者仅使用表单ID代替{,则需要通过this通过signin(this)并回溯到包含form元素{1}}。

HTML:

this

JS:

<button onclick="signin(this)">

或者只是简单地将function signin(element) { var action = element.form.getAttribute("name"); } 更改为表格this,因为Lakmal指出:

id