检查复选框时PHP更改查询

时间:2018-05-22 09:33:29

标签: javascript php ajax

当我点击一个复选框时,我正在尝试更改查询的一部分(该部分为'AND meerdere = $ postdata')。如果选中该复选框,则meerdere应为1,否则应为0.标准值应为0(如果未单击复选框)

我认为我可以通过使用ajax将值发布到同一页面来实现此目的。我在函数checkchanged()中尝试这个但是它不起作用。当我查看浏览器中的网络选项卡时,我可以看到带有数据的帖子'请求'。但是对于我的查询,postdata变量保持为0。任何人都可以帮助我。

或者我这样做完全错了?还是初学者,所以你可以指出我的所有缺点:)

<?php

if(isset($_POST["postdata"])){
    $postdata = $_POST["postdata"];
    }
else {$postdata='0';} 

$link = new mysqli("127.0.0.1","******","******","secretariaat");
        if (!$link) {
            echo "Error: Unable to connect to MySQL." . PHP_EOL;
            echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
            echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
        exit;
    }

$query = "SELECT * FROM wifi WHERE vervaldatum >= CURDATE() AND gebruikt = '0' AND meerdere = $postdata LIMIT 1;";
if ($result = $link->query($query)) {
/* fetch associative array */


  while ($row = $result->fetch_assoc()) {
      echo"<button value='".$row["id"]."'>".$row["code"]."</button>";
      $data = $row["id"];
  }

  /* free result set */
  $result->free();
}   

  mysqli_close($link);
?>


</label>
</div>
  <script type="text/javascript">
    $(document).ready(function(){
        var postid = <?php echo json_encode($data, JSON_HEX_TAG); ?>;

        $("button").click(function(){
            $.ajax({
                    type: 'POST',
                    url: 'processwifi.php',
                    data:{'postid': postid}, 
            success: function(response){
                    location.reload();
                    }
                    });
        });
    });

    function checkchanged(){

        if(document.getElementById("togBtn").checked == true){
            var self = this;
            self.postdata = 1;
        }
        else{
            var self = this;
            self.postdata = 0;
        }
            $.ajax({
                    type: 'POST',
                    url: 'wificode.php',
                    data:{'postdata': postdata}, 
            success: function(response){
                    alert('postdata');
                   //location.reload();
                    }
                    });
    }

4 个答案:

答案 0 :(得分:1)

数据:{'postdata': postdata },

不应该是self.postdata吗?因为你从未定义过postdata(var postdata)。

这可能是Boltkey在他的评论中的意思。遗憾的是,我还没有足够的声誉发表评论。

不是主题: AND gebruikt ='0'和meerdere = $ postdata - &gt;这是非常不安全的。我可以在postdata中添加任何内容,并从您的数据库中获取远远超出您想要的内容。

答案 1 :(得分:0)

更改此行

$query = "SELECT * FROM wifi WHERE vervaldatum >= CURDATE() AND gebruikt = '0' AND meerdere = $postdata LIMIT 1;";

$query = "SELECT * FROM wifi WHERE vervaldatum >= CURDATE() AND gebruikt = '0' AND meerdere = ".$postdata." LIMIT 1;";

不确定这是否会解决它。

答案 2 :(得分:0)

当您提交复选框时,它会返回其值,以防:

<input type="checkbox" name="vehicle" value="Bike">

使用表单中定义的方法提交后,它将返回Bike。

完整示例:

<form action="/action_page.php" method="post">
  <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br>
  <input type="submit" value="Submit">
</form>

如果选中该复选框,则行为将为:

$_POST['vehicle'] == "Bike"

现在,出席您的问题,您的复选框必须是:

<input type="checkbox" name="postdata" value="1"> checkbox text <br>

这只是为了严格和教育目的。 现在要解决您的问题,并按照示例,在PHP上,如果您只想要1而不是关于复选框的值,您可以:

if(!isset($_POST['postdata'])) $postdata = 0;
else $postdata = 1;

与您的代码存在差异:

//check if the value of an input with name="postdata" has been sent
if(isset($_POST["postdata"])){
    //if true, you assign the checkbox value to a var called $postdata
    $postdata = $_POST["postdata"];
  //if not, you assign a String 0 to $postData.
} else {$postdata='0';} 

**编辑** 正如@DomenikReitzner指出的那样,您将1或0值分配给名为postdata of self的属性,而不是在postdata上写入值(这是您要发送的var)。所以,在你的ajax代码中:

self.postdata = 1;
// or
self.postdata = 0;

应该是:

postdata = 1;
// or
postdata = 0;

但最好的选择是他发布的最后一个:

const postdata = document.getElementById("togBtn").checked ? 1 : 0;

请记住,对于mysql数据库引擎并不是相同的&#34; 1&#34;超过1,或&#34; 0&#34;超过0并且可能导致问题(您在数据库中将其作为字符串或整数进行威胁?如果您已在其上声明为布尔值,则应使用true / false而不是1/0)。

有各种错误,阅读答案,在纸上写下笔记,并重构它,了解你在做什么。不只是复制粘贴和检查。

希望它对你有所帮助。

答案 3 :(得分:0)

重写

if(document.getElementById("togBtn").checked == true){
    var self = this;
    self.postdata = 1;
}
else{
    var self = this;
    self.postdata = 0;
}

let postdata = 0;
if(document.getElementById("togBtn").checked == true){
    postdata = 1;
}

const postdata = document.getElementById("togBtn").checked ? 1 : 0;

然后您可以在$ .ajax请求中使用该变量