jQuery Validation - Remote function with additiona

2019-08-29 06:25发布

问题:

I am having issues with validating some data.

I want to check if someone has reviewed a company before by checking for the company_id and the logged in users account_number in my reviews table.

The code I currently has doesn't ever seem to find anything in the reviews table so doesn't warn people they can't submit another review.

Your help to get this working is much appreciated.

Here is the code I have so far:

Form

<form name="review" id="review" method="post" action="/db_processing/reviews/process-reviews.php">
    <input type="hidden" value="<?php echo($results['company_id']) ?>" name="company_id" />
    <input type="hidden" value="<?php echo($_SESSION["ID"]) ?>" name="account_number" />
    <p class="cs-threequarter">
        <b>Comments:</b><br>
        <textarea name="comments" style="width:95%; height: 150px"></textarea>
    </p>
    <p class="cs-quarter">
        <b>Rating:</b>
            <span class="star-rating">
                <input type="radio" name="rating" value="1"><i></i>
                <input type="radio" name="rating" value="2"><i></i>
                <input type="radio" name="rating" value="3"><i></i>
                <input type="radio" name="rating" value="4"><i></i>
                <input type="radio" name="rating" value="5"><i></i>
            </span>
    </p>
    <p><input class="cs-btn cs-red" name="submit" type="submit" value="Submit Review!"></p>
    <div class="cs-container"></div>
    <div class="cs-error-note" id="cs-error-note3"></div>
</form>

<script src="/js/validation/reviewval.js"></script>

jQuery Validation Script

$(document).ready(function () {  
    $('#review').validate({ 
        errorLabelContainer: "#cs-error-note3",
        wrapper: "li",
        ignore: "not:hidden",
        rules: {              
            comments: {
                required: true

            },
            account_number: {
                required: true,
                    remote: {
                        url: "/db_processing/reviews/check-account.php",
                        type: "post",
                        data: {
                             company_id: function() {
                             return $("#company_id").val();
                        }
                    },    }
            },
            rating: {
                required: true
            }
        },
        messages: {               
            comments: {
                required: "Please enter some comments."
            },
            account_number: {
                required: "You must be logged in to review.",
                remote: "You have already reviewed this company."
            },
            rating: {
                required: "Please select a rating."
            }
        },
        submitHandler: function(form) {
                 form.submit();
        }
    });

});

Check-account.php

<?php
    require('../../../private_html/db_connection/connection.php');
    $conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password);    
    if(isset($_POST['account_number'])) {
        $account_number = $_POST['account_number'];
        $compid = $_POST['company_id'];
        $query = $conn->prepare("SELECT account_number FROM reviews WHERE account_number =$account_number && company_id =$compid");
        $query->execute();
        $rows = $query->fetchAll();
        $total_rows = count($rows);
            if( $total_rows > 0 ){
                echo 'false';
            } else {
                echo 'true';
            }
    }
?>

回答1:

Validation code working fine, there is no problem expect unnecessary comma ,. remove it, Not all browsers are very forgiving.

$(document).ready(function () {
    $('#review').validate({
        errorLabelContainer: "#cs-error-note3",
        wrapper: "li"
        ignore: "not:hidden",
        rules: {              
            comments: 
                required: true
            },
            account_number: {
                required: true,
                    remote: {
                        url: "/db_processing/reviews/check-account.php",
                        type: "post",
                        data: {
                                company_id: function() {
                                return $("#company_id").val();
                            }
                        }, //<-----Remove this, it's unnecessary
                   }
            },
            rating: {
                required: true
            }
        },
        messages: {               
            comments: {
                required: "Please enter some comments."
            },
            account_number: {
                required: "You must be logged in to review.",
                remote: "You have already reviewed this company."
            },
            rating: {
                required: "Please select a rating."
            }
        },
        submitHandler: function(form) {
                 form.submit();
        }
    });
});

HTML

The problem is here, because of it validation and query both failing.

<input type="hidden" value="<?php echo($results['company_id']) ?>" name="company_id" />

assign id to this input because you are fetching it's value with id selector in validation script here return $("#company_id").val(); so it will be

<input type="hidden" value="<?php echo($results['company_id']) ?>" name="company_id" id="company_id" />

last in PHP

put quotes ' around variables inside query, rest is all good and working.

$query = $conn->prepare("SELECT account_number FROM reviews WHERE account_number = '$account_number' && company_id = '$compid'");