多个选项在插入 MySQL 表时注册不正确


multiple options registering incorrectly when inserted into mysql table

我有 2 个下拉菜单表单"类别"和"子类别"。 在"类别"中,我可以选择音乐和电影,在子类别中,我有"流行"和"摇滚"(f1)选项,在电影中,我有"喜剧"和"戏剧"(f2)选项。 问题是,使用我的代码,电影的子类别应注册如下(猫,子猫):电影戏剧= 2,5和电影喜剧= 2,6,但是当输入MySQL表时,它们都注册为2,0。 这是代码:

 <form action='submitsite.php' method='POST'>
 <table>
 <tr>
 <td>category(optional)</td>
 <td><select name='cat' id = "opts" onchange = "showForm()">
 <option value = "0">Select</option>
 <option value = "1">music </option>
 <option value = "2">film </option>
 </select> 
 <div id = "f1" style="display:none">
 <form name= "subcat">
 <select name='subcat' id = "opts" onchange = "showForm()">
 <option value = "0">Select</option>
 <option value = "3">pop</option>
 <option value = "4">rock </option>
 </select>
 </form>
 </div>
 <div id = "f2" style="display:none">
 <form name= "subcat">
 <select name='subcat' id = "opts" onchange = "showForm()">
 <option value = "0">Select</option>
 <option value = "5">comedy</option>
 <option value = "6">drama</option>
 </select>
 </form>
 </div>
 <script type = "text/javascript">
 function showForm()
{
 var selopt = document.getElementById("opts").value;
 if (selopt == 1) 
{
  document.getElementById("f1").style.display="block";
  document.getElementById("f2").style.display="none";
}
 if (selopt == 2) 
{
  document.getElementById("f2").style.display="block";
  document.getElementById("f1").style.display="none";
}

}

这是变量声明和 MySQL 查询:

$cat=$_POST['cat'];
$subcat=$_POST['subcat'];
$sql="INSERT INTO favorites VALUES('$cat','$subcat')";

这不是MySQL问题,我只是添加了该部分以提供更好的整体情况。

HTML 中不能有嵌套表单。标记无效,我猜您在提交时会出现意外行为。对此的解决方案是使用单个表单。有多种方法可以做到这一点,但这里有一个例子:

网页代码:

<form action='submitsite.php' method='POST'>
<table>
<tr>
<td>category(optional)</td>
<td><select name='cat' id = "opts" onchange = "showForm()">
<option value = "0">Select</option>
<option value = "1">music </option>
<option value = "2">film </option>
</select> 
<div id = "f1" style="display:none">
<select name='subcat1' id = "opts" onchange = "showForm()">
<option value = "0">Select</option>
<option value = "3">pop</option>
<option value = "4">rock </option>
</select>
</div>
<div id = "f2" style="display:none">
<select name='subcat2' id = "opts" onchange = "showForm()">
<option value = "0">Select</option>
<option value = "5">comedy</option>
<option value = "6">drama</option>
</select>
</div>
</form>
....

PHP代码:

$cat = $_POST['cat'];
$subcat = $_POST['subcat' . $cat];

请记住,所有用户提交的值都必须经过验证,然后才能进一步使用。在这种情况下,您将检查 is_numeric() ,检查它是否在您接受的值范围内,并可能转换为int