PHP在线订餐系统菜品提交未入库且管理页不显示问题求助
问题原因
代码存在3个核心错误导致数据无法写入、写入后也无法展示:
- 新增菜品的INSERT SQL语法错误
在manage_dish.php的插入语句里多了2个多余的逗号:
原错误代码:
mysqli_query($con,"insert into dish(category_id,dish,dish_detail,status,added_on,) values('$category_id','$dish','$dish_detail',1,'$added_on,')");
字段列表added_on后面多了逗号,值列表'$added_on'后面也多了逗号,SQL语法错误直接导致插入操作执行失败。
2. 分类选择的必填校验失效
你把下拉框的required属性错误写到了</option>结束标签里,导致就算用户不选分类也能提交表单,插入的category_id为空。而菜品管理页用的是内连接查询dish,category where dish.category_id=category.id,空的category_id无法匹配到分类表数据,就算插入成功也不会在列表里展示。
3. 没有加SQL执行错误校验,插入失败后直接跳转到列表页,看不到报错信息无法定位问题。
修复方案
- 修复INSERT语句的语法错误,删除多余的逗号:
// 修正后的插入语句 mysqli_query($con,"insert into dish(category_id,dish,dish_detail,status,added_on) values('$category_id','$dish','$dish_detail',1,'$added_on')");
- 修正分类下拉框的必填属性位置,把required放到select标签上,同时补充编辑状态下分类自动选中的逻辑:
<!-- 修正后的下拉框代码 --> <select class="form-control" name="category_id" required> <option value="">Select Category</option> <?php while($row_category=mysqli_fetch_assoc($res_category)){ $selected = $row_category['id']==$category_id ? 'selected' : ''; echo "<option value='".$row_category['id']."' $selected>".$row_category['category']."</option>"; } ?> </select>
- 给SQL执行添加错误校验,方便后续定位问题:
可以在所有mysqli_query执行后加错误判断,比如:
$res = mysqli_query($con,$sql); if(!$res){ die("SQL执行错误:".mysqli_error($con)); }
- 修复编辑状态下菜品详情不回填的问题,给textarea加上默认值:
<textarea name="dish_detail" class="form-control" placeholder="Dish Details" required><?php echo $dish_detail?></textarea>
修复后提交表单即可正常写入数据,列表页也能正常展示新增菜品。
内容的提问来源于stack exchange,提问作者jepa
相关产品推荐
相关产品推荐

