【问题标题】:How to GET value from an input checkbox to use it in a query to show information如何从输入复选框中获取值以在查询中使用它来显示信息
【发布时间】:2015-01-03 23:28:43
【问题描述】:

我正在尝试在定向系统中获取有关房间和塔楼的信息。它是一个搜索设备抛出复选框。重点是选择每个选项来过滤从数据库中检索到的信息。

问题是我试图获取的值甚至没有回显,所以我不能在查询中使用它们。另一方面,它们显示在 URL 中,如果我添加一个提交按钮,我可以获取我想要的信息,但这里的想法是在没有按钮的情况下立即获取信息。

这是我正在使用的刷新代码

var auto_refresh = setInterval(
function()
{
$("#results").load("searchroom.php").fadeIn("slow");


}, 1000);
$.ajaxSetup({ cache: false });

这就是我保存在 URL 中选择的值的方式

$('input[type="checkbox"]').on('change', function(e){
    var data = $('input[type="checkbox"]').serialize(),
        loc = $('<a>', {href:window.location})[0];
    $.post('/showbytipo.php?'+data);
    if(history.pushState){
        history.pushState(null, null, loc.pathname+'?'+data);
    }
});

这是 HTML 输入

<form method="GET" action="searchroom.php" id="myform" name="myform">
       <p>TIPOLOGIA</p>
        <ul>
            <li><input class="tipologia" id="tipologia"name="tipologia" type="checkbox" value="services" ><label>Serviços</label></li>
            <li><input class="tipologia" name="tipologia" type="checkbox" value="class"><label>class</label></li>

        </ul>

     <p>TORRE</p>
        <ul>
            <li><input class="torre" name="torre" value="a" type="checkbox" value="a" ><label>A</label></li>
            <li><input class="torre" name="torre" value="b" type="checkbox" value="b"><label>b</label></li>


        </ul>
</form>

    <div id="results" >


    </div>

这是从 url 获取值的 PHP 代码

 <?php
    include("connect.php");


    $tipo=$_GET['tipologia'];
    echo $tipo;
    $torre=$_GET['torre'];
    echo $torre;

    //$tipo='services';



           $sql = "select * from rooms where tower='$torre' AND floor='$piso' AND typology='$tipo'";
            //$sql = "select * from rooms where typology='$tipo'";
            $query = mysql_query($sql) or die ("erro na query");
            while($row = mysql_fetch_array($query)) {  

    echo $row["name"];
    echo $row["tower"];
    echo $row["typology"];
            }
     echo 'ola';



    ?>

【问题讨论】:

  • 问题是你请求searchroom.php。您需要将您的 get vars 添加到该网址。即searchroom.php?param1=somval&amp;param2=someOtherVal
  • 那是个问题,但现在我按照您所说的做了,而且没有 url 中的值,它令人耳目一新。当我更改复选框时,控制台中显示的刷新一次正确,然后再次更改,就好像它没有任何值一样。

标签: javascript php ajax search


【解决方案1】:

除了将变量直接传递给查询会带来严重的安全问题之外,您的输入字段的名称也相同。例如:name="tipologia" 和 name="torre" 有 2 个实例,在 url 中只有第二个会生效(如果它被选中)。

如果你想传递多个值,你的名字应该是这样的:name="tipologia[]" 这样你会在 php 中看到它们作为一个数组。

我也知道这无关紧要,但是为什么要使用 $.post ,因为您想将值作为 get 传递?你为什么不改用 $.get 呢?

编辑:

我没有看到问题的刷新部分。 如果要传递变量,则不要在刷新调用中传递任何变量,代码应如下所示:

var auto_refresh = setInterval(
function()
{
$("#results").load("searchroom.php", $('#myform').serialize()).fadeIn("slow");}, 1000);
$.ajaxSetup({ cache: false });

我希望你知道你在做什么,因为刷新的整个概念对我来说很混乱,但你仍然对复选框中的空值有问题:

您应该有一个 javascript 代码来更新一个单独的隐藏字段,该隐藏字段保存tipologia 或torre 字段的状态。否则你不能依赖复选框,它们的值将始终是最后一个复选框。

当然最简单的方法是使用单选按钮,这样隐藏字段就不会有这个问题了。

要调试变量,您应该使用 var_dump($_GET['torre']) 它将准确地告诉您其中的内容。所以,如果它是空的,你应该看到它,或者如果它是未定义的,你会看到 null。

希望有帮助。

【讨论】:

  • 现在,我只希望每个类别都有一个,例如房间类型:教室;塔楼:A - 我想要的结果是塔楼 A 的所有教室。虽然感谢您的建议,但这不是我要寻找的答案。这里的问题是复选框中选择的值显示在 url 中,但是如果我在控制台中查看刷新的 url,变量是空的,它们只会在我手动刷新页面时回显。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2016-11-04
  • 2019-07-16
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多