PHP表单提交分类问题:提交ID而非名称的错误排查
问题分析与解决方案
咱们直接来看问题的根源,你提交表单时拿到的是分类ID而非名称,再加上代码里还有几个容易忽略的小错误,我一步步给你拆解:
1. 核心逻辑:Option的Value设置是关键
你在循环生成下拉选项时,写了这么一行:
echo"<option value='".$id."'>".$name."</option>";
这里value属性赋值的是分类ID($id),所以表单提交后,后端$_POST['category']接收到的自然就是ID值。
如果想直接提交分类名称,只需要把value改成$name就行:
echo"<option value='".$name."'>".$name."</option>";
不过这里多嘴提一句:从数据库设计的合理性来说,更推荐提交ID——分类名称可能会被修改,但ID是唯一且稳定的。如果你的需求是把分类名称存入software表,更稳妥的做法是提交ID后,后端通过ID查询对应的分类名称,再插入software表,这样能保证数据一致性。
2. 表单里的冗余&语法错误
你的select标签里有一行多余的错误代码:
<option value="<?php echo $category">
这里有两个问题:
- PHP代码缺了闭合分号,应该写成
echo $category; - 这个option标签没有闭合,而且是完全多余的,会导致下拉框出现一个空(或错误值)的选项,直接删掉这一行就行。
3. Input标签的Name重复问题
你有三个input的name都写成了title:
<input placeholder="Title" name="title" value="<?php echo $title; ?>" type="text"> <input placeholder="Title" name="title" value="<?php echo $link; ?>" type="text"> <input placeholder="Title" name="title" value="<?php echo $description; ?>" type="text">
这会导致后端接收数据时,前两个input的值被最后一个覆盖,必须把name改成对应的字段名:
<input placeholder="Title" name="title" value="<?php echo $title; ?>" type="text"> <input placeholder="Link" name="link" value="<?php echo $link; ?>" type="text"> <input placeholder="Description" name="description" value="<?php echo $description; ?>" type="text">
修正后的完整表单代码
<form name="post" id="form" action="" method="post" enctype="multipart/form-data"> <select name="category" id="category"> <?php $categoryqu = "SELECT * FROM categories"; $results = mysql_query($categoryqu); while($row = mysql_fetch_assoc($results)){ $id = $row['cid']; $name = $row['name']; // 这里如果要提交名称就把value改成$name,提交ID就保留$id echo "<option value='".$id."'>".$name."</option>"; } ?> </select> <input placeholder="Title" name="title" value="<?php echo $title; ?>" type="text"> <input placeholder="Link" name="link" value="<?php echo $link; ?>" type="text"> <input placeholder="Description" name="description" value="<?php echo $description; ?>" type="text"> <!-- 别忘了加提交按钮,不然没法提交表单 --> <input type="submit" value="提交"> </form>
额外提醒:废弃的mysql扩展
你现在用的mysql_query这类函数是PHP已经废弃的扩展,后续版本可能会不支持,建议换成mysqli或者PDO。比如用mysqli的写法(假设已经用mysqli连接了数据库):
$categoryqu = "SELECT * FROM categories"; $results = mysqli_query($conn, $categoryqu); while($row = mysqli_fetch_assoc($results)){ $id = $row['cid']; $name = $row['name']; echo "<option value='".$id."'>".$name."</option>"; }
内容的提问来源于stack exchange,提问作者user3244304
相关产品推荐
相关产品推荐

