jQuery验证-远程功能与额外的数据


jQuery Validation - Remote function with additional data

我在验证一些数据时遇到问题。

我想检查之前是否有人通过检查company_id和我的评论表中登录的用户account_number来审查公司。

我目前拥有的代码似乎从来没有在评审表中找到任何东西,所以没有警告人们他们不能提交另一个评审。

非常感谢您的帮助。

这是我到目前为止的代码:

形式
<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验证脚本

$(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';
            }
    }
?>

验证代码工作正常,没有问题,除了不必要的逗号,。并不是所有的浏览器都很宽容。

$(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

问题在这里,因为它的验证和查询都失败了。

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

id赋给这个输入因为你在验证脚本中使用id选择器获取它的值return $("#company_id").val();所以它将是

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

将引号'放在查询内的变量周围,其余的都很好,工作

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