PDO获取textarea输入值更新MySQL列失败问题求助
问题分析与解决方案
你的问题核心在于页面加载时就直接执行了UPDATE操作,此时表单还没提交,$_POST['whatupdate']根本不存在,所以数据库被更新为空值。另外你的代码还有SQL注入风险,这也是需要修正的关键问题。
具体问题拆解:
- 你的PHP代码没有判断表单是否被提交,只要页面加载就会执行UPDATE逻辑,此时
$_POST数组里没有whatupdate的对应值,导致$what为空字符串。 - 直接把变量拼进SQL语句,存在严重的SQL注入漏洞,这是生产环境绝对不能出现的操作。
修改后的完整代码:
<div class="container"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="text-align: center; margin-top: 70px;"> <form method="post" action="../index.php"> <textarea style="width: 100%; height: 100px;" name="whatupdate"></textarea><br><br> <input type="submit" class="btn btn-outline-danger" name="subsub"> </form> <?php require '../database.php'; // 先判断表单是否被提交(通过检查提交按钮的name是否存在于POST中) if(isset($_POST['subsub'])){ // 安全获取textarea输入值,同时去除首尾空格 $what = isset($_POST['whatupdate']) ? trim($_POST['whatupdate']) : ''; if(!empty($what)){ $db = Database::connect(); // 开启PDO异常模式,方便调试数据库操作错误 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 使用PDO参数绑定,彻底避免SQL注入风险 $statement = $db->prepare("UPDATE updator SET marquee = :what WHERE id=0;"); $statement->bindParam(':what', $what); $statement->execute(); echo "内容更新成功!"; } else { echo "请输入要更新的内容!"; } } ?> </div> </div> </div>
关键改动说明:
- 添加表单提交判断:通过
isset($_POST['subsub'])确认用户确实点击了提交按钮,只有此时才执行数据库更新逻辑。 - 安全处理输入值:用
isset()和trim()处理POST参数,避免Undefined index错误,同时过滤掉无意义的空输入。 - PDO参数绑定:用
:what占位符代替直接拼接变量,这是PDO操作数据库的标准安全写法,彻底杜绝SQL注入。 - 开启异常模式:帮助你在开发阶段快速定位数据库操作的错误,方便调试。
这样修改后,只有当你输入内容并点击提交按钮时,才会执行UPDATE操作,既能正确获取textarea的输入值,又保证了代码的安全性。
内容的提问来源于stack exchange,提问作者dl3c01n
相关产品推荐
相关产品推荐

