checkbox决定mysqli查询

x4shl7ld  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(230)

php和mysqli新手。我有一个使用ajax的php/mysqli搜索页面,搜索包含零件号、描述、价格和库存数量的表。我可以编写另一个select查询,将结果限制为stock>0的项目。我想要的是在表单上添加一个复选框,允许用户在所有结果之间进行选择,或者只选择库存项目(大于零)的结果。我尝试使用if(isset($\u get['stocked'])测试stocked,但没有成功。我错过了什么?感谢您的帮助。

<script type="text/javascript">
$(function() {
    $(".search_button").click(function() {
        var search_word = $("#search_box").val();
        var dataString = 'search_word=' + search_word;

        if (search_word == '') {

        } else {
            $.ajax({
                type: "GET",
                url: "searchdata.php",
                data: dataString,
                cache: false,
                beforeSend: function(html) {
                    document.getElementById("insert_search").innerHTML = '';
                    $("#flash").show();
                    $("#searchword").show();
                    $(".searchword").html(search_word);
                    $("#flash").html('<img src="ajax-loader_2.gif" /> Loading Results...');
                },

                success: function(html) {
                    $("#insert_search").show();
                    $("#insert_search").append(html);
                    $("#flash").hide();
                }

            });

        }
        return false;
    });
});
</script>

<form method="get" action="">
    <input type="checkbox" name="stocked" value="Yes"><label> Display in-stock items only</label>
    <input type="text" name="search" id="search_box" class='search_box'/>
    <input type="submit" value="Search" class="search_button" />
</form>

<?php
include('dbconnect.php');
if (isset($_GET['search_word'])) {
    $search_word = $_GET['search_word'];  //get value sent from search form
    $min_length  = 2;  //2 character minimum for search
    if (strlen($search_word) >= $min_length) { // if query length is more than or equal to minimum length, then
        $search_word     = htmlspecialchars($search_word);  //change characters used in html to their equivalents
        $search_word_new = mysqli_escape_string($conn,$search_word);  //prevent SQL injection
        $search_word_fix = str_replace(" ","%",$search_word_new);
//        $raw_results     = mysqli_query($conn,"SELECT * FROM stock WHERE partnumber LIKE '$search_word_fix%' AND availability > 0 ORDER BY partnumber LIMIT 10"); //in stock
        $raw_results     = mysqli_query($conn,"SELECT * FROM stock WHERE partnumber LIKE '$search_word_fix%' ORDER BY partnumber LIMIT 10"); //all
        if(mysqli_num_rows($raw_results) > 0) {   //one or more rows are returned
            while($row = mysqli_fetch_array($raw_results)) {  //put table data into array and loop while valid
                echo "<hr class='gryhr'><br><a href=\"indexxx.php?id={$row['id']}\">{$row['partnumber']}</a><br>";          
                echo "<p>".$row['description']."<br>".
                        "List price $".$row['listprice']."<br>".
                        "In stock: ".$row['availability']."</p><br>";
            }
            echo "<hr>Total Results: " .mysqli_affected_rows($conn);
        }
        else { //no matching rows found
            echo '<div>No Results</div>';
        }
    }
    else {   // if query length less than minimum
        echo "Enter minimum of ".$min_length." characters";
    }
}
mysqli_close($conn);
?>
1sbrub3j

1sbrub3j1#

看起来你根本没有将复选框值发送到你的php代码中。。。你可以这样做:

var dataString = $('#myForm').serializeObject();
    $('#myForm input[type=checkbox]').each(function() { dataString[this.name] = this.checked; });

你得修改一下你的剧本。
将id myform添加到表单元素中,并将搜索输入的名称更改为search\u word。
简而言之,它看起来像
--编辑——完整代码如下所示

<?php
// If form submited

    include('dbconnect.php');
    if (isset($_POST['search_word'])) {
        $search_word = $_POST['search_word'];  //get value sent from search form
        $min_length  = 2;  //2 character minimum for search
        if (strlen($search_word) >= $min_length) { // if query length is more than or equal to minimum length, then
            $search_word     = htmlspecialchars($search_word);  //change characters used in html to their equivalents
            $search_word_new = mysqli_escape_string($conn,$search_word);  //prevent SQL injection
            $search_word_fix = str_replace(" ","%",$search_word_new);
    //        $raw_results     = mysqli_query($conn,"SELECT * FROM stock WHERE partnumber LIKE '$search_word_fix%' AND availability > 0 ORDER BY partnumber LIMIT 10"); //in stock
            if (isset($_POST['stocked'])){ $stocked = " and stocked > 0";}
            $raw_results=mysqli_query($conn,"SELECT * FROM stock WHERE partnumber LIKE '$search_word_fix%' $stocked ORDER BY partnumber LIMIT 10"); //all
            if(mysqli_num_rows($raw_results) > 0) {   //one or more rows are returned
                while($row = mysqli_fetch_array($raw_results)) {  //put table data into array and loop while valid
                    echo "<hr class='gryhr'><br><a href=\"indexxx.php?id={$row['id']}\">{$row['partnumber']}</a><br>";          
                    echo "<p>".$row['description']."<br>".
                            "List price $".$row['listprice']."<br>".
                            "In stock: ".$row['availability']."</p><br>";
                }
                echo "<hr>Total Results: " .mysqli_affected_rows($conn);
            }
            else { //no matching rows found
                echo '<div>No Results</div>';
            }
        }
        else {   // if query length less than minimum
            echo "Enter minimum of ".$min_length." characters";
        }
    }
    mysqli_close($conn);

?>

至于你的观点

<script type="text/javascript">
$(document).ready( function() { // Wait until document is fully parsed

$.fn.serializeObject = function()
{
   var o = {};
   var a = this.serializeArray();
   $.each(a, function() {
       if (o[this.name]) {
           if (!o[this.name].push) {
               o[this.name] = [o[this.name]];
           }
           o[this.name].push(this.value || '');
       } else {
           o[this.name] = this.value || '';
       }
   });
   return o;
};

  $("#myForm").on('submit', function(e){

     e.preventDefault();

       var dataString = $('#myForm').serializeObject();
       $('#myForm input[type=checkbox]').each(function() { dataString[this.name] = this.checked; });

        if (dataString['search_word'] != '') {
            $.ajax({
                type: "POST",
                url: "searchdata.php",
                data: dataString,
                cache: false,
                beforeSend: function(html) {
                    // ...
                },

                success: function(html) {
                    $("#insert_search").show();
                    $("#insert_search").append(html);
                    $("#flash").hide();
                }

            });

        }
        return false;
    });
});
</script>

<form id="myForm" action="" method="post">
    <input type="checkbox" name="stocked" value="Yes"><label> Display in-stock items only</label>
    <input type="text" name="search_word" id="search_box" class='search_box'/>
    <input type="submit" value="Search" class="search_button" />
</form>

您的代码不起作用,因为您需要使用表单将数据发送到何处,并且还需要使用ajax将数据发送到何处。你得选一个。不是两者都有。在上面,我通过ajax调用发送它,并阻止默认表单提交。我也在用post而不是get发送。

相关问题