当我点击一个复选框时,我正在尝试更改查询的一部分(该部分为'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();
}
});
}
答案 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请求中使用该变量