SQL查询无返回结果排查:网站表单提交无响应问题求助
表单提交无响应问题排查
数据库表结构
USERS表
| userID | Object1 | Object2 |
|---|---|---|
| 1 | 1abc | 123a |
| 2 | 2def | 123b |
POSTS表
| ID | Object2 |
|---|---|
| 12 | 123a |
| 43 | 123b |
问题场景
我正在调试网站表单,表单接收手动输入的密钥,提交后执行PHP函数,预期逻辑是:获取输入的Object1,关联到对应的Object2,检查Posts表中该Object2对应的未删除条目,返回结果1或0。但点击提交后表单无任何反应,既无结果也无错误提示。在phpMyAdmin中测试查询时,把users.Object1=$request->'Object1'替换为users.Object1='1abc'能得到正确结果“12”,但嵌入网站PHP文件后就失效。
关联代码
PHP处理函数
public function claim(Request $request){ $post = "SELECT posts.id FROM posts INNER JOIN users ON users.Object2=posts.Object2 WHERE posts.is_deleted='No' && users.Object1=$request->'Object1'"; $result = mysql_query($post); if($result->num_rows > 0) { return 1; } else{ return 0; } }
AJAX提交代码
$.ajax({ url: "http://*********", type: 'POST', data: {key}, success: function(response){ console.log(response) if(response == 1){ $('.message').text('Success') $('.message').removeClass('text-danger') $('.message').addClass('text-success') $('#pdf').show(); $('#button').hide();
问题修复步骤
1. 修正PHP语法与SQL注入风险
- 原代码中
$request->'Object1'是错误语法,Laravel中正确获取请求参数的方式是$request->input('Object1')或$request->Object1。 - 直接拼接SQL会导致语法错误和注入风险,必须用参数绑定重构查询,同时废弃已淘汰的
mysql_query函数,改用Laravel DB门面:public function claim(Request $request){ $object1 = $request->input('Object1'); $result = DB::select("SELECT posts.id FROM posts INNER JOIN users ON users.Object2=posts.Object2 WHERE posts.is_deleted='No' AND users.Object1 = ?", [$object1]); return count($result) > 0 ? 1 : 0; }
2. 修复AJAX数据传递与错误处理
- 原AJAX中
data: {key}参数不明确,需指定对应表单字段名,比如输入框name为Object1则写成:data: { Object1: $('input[name="Object1"]').val() }, - 补充错误回调,方便排查请求失败原因:
$.ajax({ url: "http://*********", type: 'POST', data: { Object1: $('input[name="Object1"]').val() }, success: function(response){ console.log(response); if(response == 1){ $('.message').text('Success'); $('.message').removeClass('text-danger').addClass('text-success'); $('#pdf').show(); $('#button').hide(); } else { $('.message').text('Failed'); $('.message').removeClass('text-success').addClass('text-danger'); } }, error: function(xhr, status, error){ console.error('请求错误:', error); $('.message').text('请求失败,请检查网络或联系管理员'); $('.message').removeClass('text-success').addClass('text-danger'); } });
3. 处理Laravel CSRF验证
- POST路由需要CSRF令牌,在AJAX请求中添加头部:
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, - 同时在HTML头部插入CSRF元标签:
<meta name="csrf-token" content="{{ csrf_token() }}">
4. 确保响应格式纯净
- 避免PHP方法输出多余内容,可明确返回纯文本或JSON:
return response()->json(count($result) > 0 ? 1 : 0);
内容的提问来源于stack exchange,提问作者Justin Herb
相关产品推荐
相关产品推荐

