【问题标题】:Working with AJAX, PHP and MYSQL使用 AJAX、PHP 和 MYSQL
【发布时间】:2015-03-25 14:05:24
【问题描述】:

用最简单的术语来说,以下是我想要实现的目标:

它基于这个例子(他们使用一个选择而不是多个复选框形式): http://www.w3schools.com/php/php_ajax_database.asp

要填充的项目基于选中的复选框,如果用户选择持续时间为 4 且课程的子类别为 sql,则只有持续时间为 4 且在 sql 子类别下的课程才会被填充。

我的问题如下: 我希望能够在 URL 中发布多个变量,因为目前只能发布一个变量,并且我收到一个未选择的错误。

我希望能够一次选择多个复选框。在当前状态下,您可以选择多个复选框,但仅在最后一个复选框上调整结果。例如,如果复选框 2 + 3 被选中,则只会显示 3,而我想要 2 和 3 的结果。

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script>
            function showUser() {
                var selectedPerson = $('#testform').serialize();
                                                    document.getElementById("txtHint").innerHTML = "<div class='loading-indication'><img src='ajax-loader.gif' /> &nbsp; Please wait... Loading New Courses...</div>";


                $.ajax({
                    url:'getuser.php',
                    type:'post',
                    data:selectedPerson,
                    success:function(res){
                        $('#txtHint').html(res);
                    }
                })
            }
        </script>

        <script>
            function showUser2() {
                var selectedPerson = $('#testform2').serialize();
                                                    document.getElementById("txtHint").innerHTML = "<div class='loading-indication'><img src='ajax-loader.gif' /> &nbsp; Please wait... Loading New Courses...</div>";


                $.ajax({
                    url:'getuser.php',
                    type:'post',
                    data:selectedPerson,
                    success:function(res){
                        $('#txtHint').html(res);
                    }
                })
            }
        </script>
    </head>
    <body>

        <form id="testform">
            <input onchange="showUser();" name="person[]" type="checkbox" value="1">One<br>
            <input onchange="showUser();" name="person[]" type="checkbox" value="2">Two<br>
            <input onchange="showUser();" name="person[]" type="checkbox" value="3">Three<br>
            <input onchange="showUser();" name="person[]" type="checkbox" value="4">Four<br>
            <input onchange="showUser();" name="person[]" type="checkbox" value="5">Five<br>
        </form>

        <form id="testform2">
            <input onchange="showUser2();" name="person2[]" type="checkbox" value="communication">communication<br>
            <input onchange="showUser2();" name="person2[]" type="checkbox" value="business">business<br>
            <input onchange="showUser2();" name="person2[]" type="checkbox" value="html and css">Three<br>
            <input onchange="showUser2();" name="person2[]" type="checkbox" value="sql">Four<br>
            <input onchange="showUser2();" name="person2[]" type="checkbox" value="windows">Five<br>
                      <input onchange="showUser2();" name="person2[]" type="checkbox" value="cloud">Cloud<br>
            <input onchange="showUser2();" name="person2[]" type="checkbox" value="microsoft office">Java<br>

        </form>

        <br>
        <div id="txtHint"><b>Person info will be listed here...</b></div>

    </body>
</html>

下面是php:

<!DOCTYPE html>
<html>
<head>
<style>
table {
    width: 100%;
    border-collapse: collapse;
}

table, td, th {
    border: 1px solid black;
    padding: 5px;
}

th {text-align: left;}
</style>
</head>
<body>

<?php
 $person = '';
        $person  = isset($_POST['person']) ? $_POST['person'] : '';
        $allIds = '';
        if($person!=''){
            foreach($person as $personid){
                $allIds .= $personid.',';
            }
$allIds = rtrim($allIds,',');        }


 $person2 = '';
        $person2  = isset($_POST['person2']) ? $_POST['person2'] : '';
        $allIds2 = '';
        if($person2!=''){
            foreach($person2 as $personid2){
                $allIds2 .= $personid2.',';
            }
$allIds2 = rtrim($allIds2,',');        }


include("includes/db.php"); 



global $con;


$sql= "SELECT * FROM courses WHERE (course_duration IN ('" . $personid . "')) OR (course_duration IN ('" . $personid2. "')) LIMIT 10";
$result = mysqli_query($con,$sql);
$sqlCount = "SELECT * FROM courses WHERE (course_duration IN ('" . $personid . "')) OR (course_subc1 IN ('" . $personid2. "')) OR (course_subc3 IN ('" . $personid2. "')) OR (course_subc1 IN ('" . $personid2. "')) OR (course_subc4 IN ('" . $personid2. "')) OR (course_subc5 IN ('" . $personid2. "'))";
$get_crs_count = mysqli_query($con, $sqlCount);
$count_rows = mysqli_num_rows($get_crs_count);
echo '<p style="margin-bottom: 8px;margin-top: 8px;font-size:18px;"><b>Number of courses available: </b>' . $count_rows ;
while($row_crs = mysqli_fetch_array($result)){ 

    $crs_id = $row_crs['course_id'];
        $crs_cat = $row_crs['course_cat'];

    $crs_provider = $row_crs['course_provider'];

    $crs_title = $row_crs['course_title'];
        $crs_price = $row_crs['course_price'];
          $crs_city= $row_crs['course_city'];
                      $crs_category= $row_crs['course_cat1'];

          $crs_date= $row_crs['course_date1'];


$crs_sdesc= $row_crs['course_sdesc'];
$crs_shortdesc = mb_strimwidth("$crs_sdesc",0,140,"...");
        $crs_image = $row_crs['course_image'];
        $provider_image = $row_crs['provider_image'];


  echo " <article class='search-result row'><center>
      <div class='col-xs-12 col-sm-12 col-md-3' id='thumbnailContainer'>
        <a href='#' title='Lorem ipsum' class='thumbnail' id='resultThumbnail'><img src='$provider_image' /></a>
     <a href='searchPage.php?crs_price=$crs_price' style='color:black;'>  <button id='resultprice'><span id='resultpriceText'>$ $crs_price</span></button></a>
      </div>
      <div class='col-xs-12 col-sm-12 col-md-2'>
        <ul class='meta-search' id='listDesign'>
        <a href='searchPage.php?crs_date=$crs_date' style='color:white;'>   <li><button id='resultInfo'><i class='fa fa-calendar fa-1x'><span id='iconText'>  $crs_date</span></i></button></li></a>
         <a href='searchPage.php?crs_category=$crs_category' style='color:white;'>   <li><button id='resultInfo2'><i class='fa fa fa-tags fa-1x'><span id='iconText'> $crs_category</span></i></button></li></a>
<a href='searchPage.php?crs_provider=$crs_provider' style='color:white;'><li><button id='resultInfo'><i class='fa fa-graduation-cap fa-1x'><span id='iconText'>  $crs_provider</span></i></button></li></a>
<a href='searchPage.php?city=$crs_city' style='color:white;'><li><button id='resultInfo'><i class='fa fa-map-marker fa-1x'><span id='iconText'> $crs_city</span></i></button></li></a>
        </ul>
      </div></center>
      <div class='col-xs-12 col-sm-12 col-md-7 excerpet'>
        <h3 id='resultHeading'><a href='coursePage.php?crs_id=$crs_id' id='headingLinking'><b>$crs_title</b></a></h3>

        <div id='courseshortDescription'>
$crs_shortdesc
 <center><a href='coursePage.php?crs_id=$crs_id' style='color:white;'><button class='btn btn-danger' id='findoutBtn'>Find Out More</button></a> </center>
        </div>  

</div>

      <span class='clearfix borda'></span>
    </article>";
}

mysqli_close($con);
?>
</body>
</html>

【问题讨论】:

    标签: javascript php mysql ajax checkbox


    【解决方案1】:

    问题(大部分)出在 HTML 代码中。

    &lt;input type="checkbox"&gt; 确实在名称中使用方括号(与 select 相比,它会导致多选可用)。

    重写代码的这两部分

    <input onchange="showUser();" name="person[]" type="checkbox" value="1">One<br>
    <input onchange="showUser();" name="person[]" type="checkbox" value="2">Two<br>
    <input onchange="showUser();" name="person[]" type="checkbox" value="3">Three<br>
    <input onchange="showUser();" name="person[]" type="checkbox" value="4">Four<br>
    <input onchange="showUser();" name="person[]" type="checkbox" value="5">Five<br>
    
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="communication">communication<br>
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="business">business<br>
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="html and css">Three<br>
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="sql">Four<br>
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="windows">Five<br>
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="cloud">Cloud<br>
    <input onchange="showUser2();" name="person2[]" type="checkbox" value="microsoft office">Java<br>
    

    进入

    <input onchange="showUser();" name="person" type="checkbox" value="1">One<br>
    <input onchange="showUser();" name="person" type="checkbox" value="2">Two<br>
    <input onchange="showUser();" name="person" type="checkbox" value="3">Three<br>
    <input onchange="showUser();" name="person" type="checkbox" value="4">Four<br>
    <input onchange="showUser();" name="person" type="checkbox" value="5">Five<br>
    
    <input onchange="showUser2();" name="person2" type="checkbox" value="communication">communication<br>
    <input onchange="showUser2();" name="person2" type="checkbox" value="business">business<br>
    <input onchange="showUser2();" name="person2" type="checkbox" value="html and css">Three<br>
    <input onchange="showUser2();" name="person2" type="checkbox" value="sql">Four<br>
    <input onchange="showUser2();" name="person2" type="checkbox" value="windows">Five<br>
    <input onchange="showUser2();" name="person2" type="checkbox" value="cloud">Cloud<br>
    <input onchange="showUser2();" name="person2" type="checkbox" value="microsoft office">Java<br>
    

    编辑: 第 2 部分(PHP):

    使用 unserialize 来评估 PHP 从 JavaScript 接受的值 - 获取检查的数组 options - 因为你得到的是字符串,而不是数组

    此外,为了通过 comma ( , ) 将数组项粘贴到字符串中,您可以使用函数 implode。顺便说一句,在这种情况下,您不需要预先设置变量$person$person2。所以,我删除了第一个空值设置。

    所以,这里已经更正了——现在这部分应该运行

    $person  = isset($_POST['person']) ? $_POST['person'] : '';
    $allIds = '';
    if($person!='')
    {
        $person = unserialize($person);
        $allIds = implode(',', $person);
    }
    
    $person2  = isset($_POST['person2']) ? $_POST['person2'] : '';
    $allIds2 = '';
    if($person2!='')
    {
        $person2 = unserialize($person2);
        $allIds2 = implode(',', $person2);        
    }
    

    【讨论】:

    • 感谢您的回复,但随后在 php 页面上我收到以下错误:警告:在此行 foreach($person as $personid){
    • 抱歉,这并不能解决问题
    • 添加了更正的 PHP 代码 - 而且,在 sql 代码内部你有错误的变量 - 使用 $allIds$allIds2 而不是 $personid$personid2
    • 您好,感谢您所做的调整。我知道收到以下错误:注意:unserialize():在偏移量 0 的 1 个字节处出错,并且警告:implode():在这些行中传递的参数无效 $person = unserialize($person); $allIds = implode(',', $person);
    • 那么,原始代码的 GET 转储报告是什么?
    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2014-11-26
    • 2012-02-08
    相关资源
    最近更新 更多