![](/img/trans.png)
[英]PHP MySQL keep selected option from dropdown menu when menu is select from database
[英]Update MySQL Database based on option selected from an HTML dropdown menu
我正在为Pokemon Go开发一个网站,作为该网站的一部分,我正在制作一个自定义CMS,允许我插入/更改数据以在各种网页上显示。 我希望能够根据在下拉菜单中选择的老板将Raid Boss切换为“不活动”。
以下是下拉菜单所在表单的HTML代码。 基本上,我在Raid Bosses的数据库中查询当前处于活动状态或“ 1”的所有老板,并将它们附加到选项列表中:
<h5 style="text-decoration: underline;">Set Active Raid Boss to Inactive</h5>
<form class = "form-group" method = "post">
<select>
<option disabled selected value> -- select an option -- </option>
<?php
$prep_stmt = $conn->prepare("SELECT * FROM raids WHERE isActive = 1");
$prep_stmt->execute();
$row = $prep_stmt->fetchAll();
$count = $prep_stmt->rowCount();
for($x = 0; $x < $count; $x++) {
echo "<option name ='".$row[$x]['name']."' value='".$row[$x]['name']."'>". $row[$x]['name']. "</option>";
}
?>
</select>
<input name = "ToggleToInactiveRaid" type = "submit" value="Submit"/>
</form>
以下是单击按钮时$ _POST请求的PHP代码:
if(isset($_POST['ToggleToInActiveRaid'])){
$raids = $conn->prepare("SELECT * FROM raids WHERE isActive = 1");
$raids->execute();
$raidList = $raids->fetchAll();
$count = $raids->rowCount();
for($i = 0; $i < $count; $i++){
if ($raidList[$i]['name'] == $_POST['name']){
$stmt = $conn->prepare("UPDATE raids SET isActive = 0 WHERE raids.name = ".$_POST['name']);
$stmt->execute();
}
}
}
出于某种原因,从未检测到POST请求。 我知道这一点是因为我在表单部分中回显了一个虚拟变量,该变量只有在POST请求if块中更新了它的值时才会显示,并且该变量从未转储到页面上。 我在CMS页面上还有其他形式,单击相应按钮时将在其中执行PHP代码。 但这给我带来了很多麻烦,我真的不知道为什么。 如果有人可以帮助我,那就太好了。 谢谢!
A)您没有给选择框起一个名字。 因此它不会显示在$_POST
-array中。 将<select>
更改为<select name="name">
B)(假设isActive
只能是0
或1
),您不必遍历数据库中的所有行即可仅停用其中一个。 只需使用(用准备好的语句修复)
$stmt = $conn->prepare("UPDATE raids SET isActive = 0 WHERE raids.name = :name");
$stmt->execute(array(':name' => $_POST['name']));
无论是否使用SELECT * FROM raids WHERE isActive = 1; for(...)
情况下,它都将执行相同的操作SELECT * FROM raids WHERE isActive = 1; for(...)
SELECT * FROM raids WHERE isActive = 1; for(...)
。 在这两种情况下,该名称都将存在于raids-table中(并更新为0
),或者不存在(且不会更新任何内容)。 跳过SELECT, for(...)
只会使您的代码更高效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.