PHP,AJAX&amp; MySQL - 从多个<select>

时间:2016-09-23 09:30:12

标签: javascript php mysql ajax

我目前已经设置了能够选择要显示的最低价格,并且页面将相应更新而没有任何问题。但是,我还希望能够设置从不同的&lt; select&gt;中显示的最高价格。 (以及将来,其他选项,如产品类型)。但是,当我修改它以传递2个值时,我使用的方法(http://www.w3schools.com/php/php_ajax_database.asp)不起作用,它不会显示任何结果。我认为在尝试实际获得最大值时失败了,但我不知道在哪一点(或为什么)这是失败的。任何帮助将不胜感激!我花了相当多的时间进行反复试验,其他任何教程都没有多大帮助。如果您能够提供帮助,请解释您的答案,因为我是AJAX / JS的新手。 HTML: &lt; select id =“price-from”onchange =“setPrice(this.value)”&gt;     &lt; option selected value =“500”&gt;£500&lt; / option&gt;     &lt; option value =“1000”&gt;£1,000&lt; / option&gt;     &lt; option value =“2000”&gt;£2,000&lt; / option&gt;     &lt; option value =“3000”&gt;£3,000&lt; / option&gt;     &lt; option value =“4000”&gt;£4,000&lt; / option&gt;     &lt; option value =“5000”&gt;£5,000&lt; / option&gt;     &lt; option value =“6000”&gt;£6,000&lt; / option&gt;     &lt; option value =“7000”&gt;£7,000&lt; / option&gt;     &lt; option value =“8000”&gt;£8,000&lt; / option&gt;     &lt; option value =“9000”&gt;£9,000&lt; / option&gt;     &lt; option value =“10000”&gt;£10,000&lt; / option&gt;     &lt; option value =“20000”&gt;£20,000&lt; / option&gt; &LT; /选择&GT; &lt; p id =“to”&gt; To&lt; / p&gt; &lt; select id =“price-to”onchange =“setPrice(this.value)”&gt;     &lt; option value =“500”&gt;£500&lt; / option&gt;     &lt; option value =“1000”&gt;£1,000&lt; / option&gt;     &lt; option value =“2000”&gt;£2,000&lt; / option&gt;     &lt; option value =“3000”&gt;£3,000&lt; / option&gt;     &lt; option value =“4000”&gt;£4,000&lt; / option&gt;     &lt; option value =“5000”&gt;£5,000&lt; / option&gt;     &lt; option value =“6000”&gt;£6,000&lt; / option&gt;     &lt; option value =“7000”&gt;£7,000&lt; / option&gt;     &lt; option value =“8000”&gt;£8,000&lt; / option&gt;     &lt; option value =“9000”&gt;£9,000&lt; / option&gt;     &lt; option value =“10000”&gt;£10,000&lt; / option&gt;     &lt; option selected value =“20000”&gt;£20,000&lt; / option&gt; &LT; /选择&GT; JavaScript的: function setPrice(str){ if(str ==“”){     document.getElementById(“section1”)。innerHTML =“&lt; p&gt; No Results&lt; / p&gt;”;     返回;     警报(“错误1”); } else {     if(window.XMLHttpRequest){         // IE7 +,Firefox,Chrome,Opera,Safari的代码         xmlhttp = new XMLHttpRequest();     } else {         // IE6,IE5的代码         xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);     }     xmlhttp.onreadystatechange = function(){         if(this.readyState == 4&amp;&amp; this.status == 200){             document.getElementById(“section1”)。innerHTML = this.responseText;         }     };     xmlhttp.open(“GET”,“priceQuery.php?min =”+ str +“max =”+ str,true);     xmlhttp.send();   } } PHP: &LT; PHP     $ con = mysqli_connect('localhost','root','','nbgardens');     if(!$ con){     死('无法连接:'。mysqli_error($ con));     }     mysqli_select_db($ CON, “nbgardens”);     $ min =(isset($ _ GET ['min'])?$ _GET ['min']:null);     $ max =(isset($ _ GET ['max'])?$ _GET ['max']:null);     $ sql =“SELECT * FROM products WHERE product_price&gt; ='”。$ min。“'AND product_price&lt; ='”。$ max。“'”;     $ result = mysqli_query($ con,$ sql);     while($ row = mysqli_fetch_assoc($ result)){         echo“&lt; div class ='browse-image'&gt;             &lt; a href ='#'&gt;             &lt; p class ='price'&gt;£“。$ row ['product_price']。”&lt; / p&gt;             &lt; img src ='“。$ row ['product_img']。”'width ='200px'class ='thumb'&gt;             &lt; figcaption&gt;“。$ row ['product_title']。”&lt; / figcaption&gt;&lt; / a&gt;&lt; / div&gt;“;         }     mysqli_close($ CON); ?&GT;

3 个答案:

答案 0 :(得分:1)

您当前的代码存在一些问题:

设置两个不同的变量

当您选择(?:(?!</?script[\s>]).)*或选择</script>时,您使用相同的单参数启动相同的功能。该函数不知道您提供的参数是price-from还是price-to。对此的许多解决方案之一是不给它任何参数并要求它获取所选值

使用price-from

分隔网址参数

使用您提供XHR对象的当前网址,您的请求看起来像这样(假设str =“1000”):

price-to

在您的PHP代码中,&等于字符串priceQuery.php?min=1000max=1000 $_GET['min']永远不会设置

对于您当前的PHP代码,我认为没有错,所以这里的

我的修复:

HTML:

"1000max=1000"

Javascript:

$_GET['max']

答案 1 :(得分:0)

您可以使用下一个选项覆盖最小/最大值。 这是正确的代码:

&#13;
&#13;
raise ActiveRecord::Rollback
&#13;
function setPrice() {
  var min = parseInt(document.getElementById('price-from').value),
      max = parseInt(document.getElementById('price-to').value);
  if(max < min) {
    var maxLocal = max;
    max = min;
    min = maxLocal;
  }
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById("section1").innerHTML = this.responseText;
        }
    };
    xmlhttp.open("GET","priceQuery.php?min=" +min + "max=" +max, true);
    xmlhttp.send();
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你应该试试这个:

<select id="price-from" onchange="setPrice(this.value)">
    <option selected value="500">£500</option>
    <option value="1000">£1,000</option>
    <option value="2000">£2,000</option>
    <option value="3000">£3,000</option>
    <option value="4000">£4,000</option>
    <option value="5000">£5,000</option>
    <option value="6000">£6,000</option>
    <option value="7000">£7,000</option>
    <option value="8000">£8,000</option>
    <option value="9000">£9,000</option>
    <option value="10000">£10,000</option>
    <option value="20000">£20,000</option>
</select>
<p id="to">To</p>
<select id="price-to" onchange="setPrice(this.value)">
    <option value="500">£500</option>
    <option value="1000">£1,000</option>
    <option value="2000">£2,000</option>
    <option value="3000">£3,000</option>
    <option value="4000">£4,000</option>
    <option value="5000">£5,000</option>
    <option value="6000">£6,000</option>
    <option value="7000">£7,000</option>
    <option value="8000">£8,000</option>
    <option value="9000">£9,000</option>
    <option value="10000">£10,000</option>
    <option selected value="20000">£20,000</option>
</select>

对于Javascript,你应该尝试这样的jQuery:

<script type="text/javascript">
$(document).ready(function(){
var minValue,maxValue;
    $("#price-from").on("change",function(){
    minValue=$(this).val();
    });
    $("#price-to").on("change",function(){
    maxValue=$(this).val();
    });
    if(minValue!='')
        $.post( "priceQuery.php", { min: minValue, max: maxValue  } );
});
</script>

你的PHP代码是这样的:

<?php
    $con = mysqli_connect('localhost','root','','nbgardens');
    if (!$con) {
    die('Could not connect: ' . mysqli_error($con));
    }

    mysqli_select_db($con,"nbgardens");
    $min = (isset($_POST['min']) ? $_POST['min'] : null);
    $max = (isset($_POST['max']) ? $_POST['max'] : null);
    $sql="SELECT * FROM products WHERE product_price >= '".$min."' AND product_price<= '".$max."'";
    $result = mysqli_query($con,$sql);

    while($row = mysqli_fetch_assoc($result)){
        echo"<div class='browse-image'>
            <a href='#'>
            <p class='price'>£" . $row['product_price'] . "</p>
            <img src='" . $row['product_img'] . "' width='200px' class='thumb'>
            <figcaption>" . $row['product_title'] . "</figcaption></a></div>";
        }                           
    mysqli_close($con);
?>