无法更新数据库TEXT类型字段:textarea修改后点击更新无效果
问题排查与修正方案
让我帮你梳理下代码里的问题,你现在的更新逻辑没触发,主要是几个细节错误导致的,咱们一步步来修正:
1. 按钮名称大小写不匹配
你的HTML按钮name属性是Update(首字母大写),但PHP里判断的是$_POST['update'](全小写)——大小写敏感导致永远进不了更新分支。
修正:把按钮的name改成小写:
<button type="submit" name="update">Update</button>
2. 变量拼写/引用错误
- SQL语句里的
$animalDesription少了一个字母c,和你获取的变量$animalDescription不匹配; - WHERE子句里用了未定义的
$id,实际你获取的ID变量是$animalId。
3. 预处理语句使用错误(存在SQL注入风险)
你虽然调用了prepare(),但还是直接把变量拼进SQL字符串,完全没发挥预处理的安全作用,正确做法是用占位符绑定参数。
4. 错误信息不准确且不详细
执行失败时你提示"Failed to connect",但这是SQL执行失败而非数据库连接失败,应该输出具体错误信息方便排查。
修正后的完整代码
HTML部分(仅修正按钮和小细节)
<form action="index.php" method="post"> <div class="search"> <label for="animalId">Search for Id</label><br> <input type="text" name="animalId" value="<?php echo $animalId; ?>"> </div> <div class="animal_description"> <label for="animalDescription">Animal's description:</label><br> <!-- 统一id和label的for属性值,语义化更规范 --> <textarea name="animalDescription" id="animalDescription" cols="30" rows="10"><?php echo $animalDescription; ?></textarea> </div> <button type="submit" name="update">Update</button> </form>
PHP部分(核心逻辑修正)
// 先初始化错误数组,避免未定义报错 $ERRORS = []; //if the update button is clicked if (isset($_POST['update'])) { //getting variable $animalId = $_POST['animalId']; $animalDescription = $_POST['animalDescription']; //checking if any empty field(修正拼写requiered为required) if(empty($animalId)){ $ERRORS['animal-id'] = "The id field is required"; } else { // 使用占位符的安全预处理语句 $idQuery = "UPDATE animals SET description = :description WHERE id_num = :id"; $stmt = $conn->prepare($idQuery); // 绑定参数,避免SQL注入 $stmt->bindParam(':description', $animalDescription); $stmt->bindParam(':id', $animalId); if ($stmt->execute()) { $ERRORS['final-message'] = "Successfully updated the database"; } else { // 获取具体错误信息,方便排查 $errorInfo = $stmt->errorInfo(); $ERRORS['final-message'] = "Failed to update: " . $errorInfo[2]; } } }
现在点击更新按钮应该就能正常执行数据库更新操作了,如果还是有问题,可以看$ERRORS['final-message']里的具体错误提示进一步排查。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

