欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于php输出值的问题

程序员文章站 2024-02-03 18:29:46
...
我做了个简单的html登陆表单,点击提交按钮,异步提交验证。php文件连接数据库验证用户名密码,对则echo一个字符串‘true’,错了则无输出值。返给html后,做判断,再做响应动作。可我测试时发现,不管输错输对,页面均是输对的动作。php部分是正确的,可以根据表单提交数据输出响应的值,我觉得bug在客户端部分,怎么改都不对,望各位大神帮帮忙。以下是客户端脚本:


回复讨论(解决方案)

输错时,控制台输出data是什么?

输错时,无输出。这是我php代码部分:
$name_login=$_POST['name_login'];
$psw_login=$_POST['psw_login'];
$url = "127.0.0.1";
//账号
$user = "root";
//密码
$password = "";
//连接
$con = mysql_connect($url,$user,$password);
if (!$con){
die('Could not connect: ' . mysql_error());
}
//设置编码机
mysql_query("set names utf8");
//连接数据库
mysql_select_db("yang");
$sql = "select * from plane where username='$name_login'";
$result=mysql_query($sql,$con);
$re=mysql_fetch_assoc($result);
if($re) {
if($re['psw']==$psw_login) {
echo "true";
}
}
?>

输错时,控制台输出data是什么?


输错时,无输出。这是我php代码部分:
$name_login=$_POST['name_login'];
$psw_login=$_POST['psw_login'];
$url = "127.0.0.1";
//账号
$user = "root";
//密码
$password = "";
//连接
$con = mysql_connect($url,$user,$password);
if (!$con){
die('Could not connect: ' . mysql_error());
}
//设置编码机
mysql_query("set names utf8");
//连接数据库
mysql_select_db("yang");
$sql = "select * from plane where username='$name_login'";
$result=mysql_query($sql,$con);
$re=mysql_fetch_assoc($result);
if($re) {
if($re['psw']==$psw_login) {
echo "true";
}
}
?>

我是说输错时
console.log(data+' '+typeof data);
console.log(data=='true');
这两句输出什么?

我是说输错时
console.log(data+' '+typeof data);
console.log(data=='true');
这两句输出什么?


test.html:38 string
test.html:39 false

看看你的表单

看看你的表单


谢大神帮我分析,以下是html内容




Document























用户名
密 码





看看你的表单

这个js脚本是我改成了直接使用jq的ajax()方法异步提交,想看看是不是ajaxsubmit插件出了问题。结果还是一样,客户端根本不识别php返回来的字符串。

这样测试

$(function() { //最好这样包起来,以防 jq 加载太慢  $('#btn').click(function () {    $.ajax({	      url:'plane/login.php',      type:'post',      data:{         'name_login':'fengjie',         'psw_login':'123123',      },	      success:function(data) {         alert(data); //直接查看返回的数据,如果 php 有问题,一样能看到      }    })  })})

这样测试

$(function() { //最好这样包起来,以防 jq 加载太慢  $('#btn').click(function () {    $.ajax({	      url:'plane/login.php',      type:'post',      data:{         'name_login':'fengjie',         'psw_login':'123123',      },	      success:function(data) {         alert(data); //直接查看返回的数据,如果 php 有问题,一样能看到      }    })  })})

测试了,如果用户名密码写对了,弹窗提示‘true’,若果错的,弹窗为空。我现在的问题是,如果php返回’true‘,js脚本这边的判断句data==‘true’的结果是false,怎么可能是false???php返回的就是字符串类型的‘true’啊!

alert(data.length); //看一下返回数据的长度

alert(data.length); //看一下返回数据的长度


输对了,长度是5,输错了长度是1。奇怪了,返回空的怎么还有长度?

因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charCodeAt(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 BOM 头

看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了

因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charCodeAt(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 BOM 头

看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了


我测试了,输对了内码显示是116,输错了内码显示9。怎么还不一样呢?


因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charCodeAt(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 BOM 头

看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了


我测试了,输对了内码显示是116,输错了内码显示9。怎么还不一样呢?
如果输对了,charcodeat(4)就是9,这个跟输错时,charcodeat(0)相同,看来确实我以为php返回为空,其实是返回了一个编码为9的字符。



因为长度不同,所以 dada == 'true' 不会成立
你可以进一步看一下多出来的字符的内码是多少
alert(data.charCodeAt(0));
如果小于等于 32,就表示你的程序多输出了 空格、制表符、回车、换行
如果大于 255,就表示你的程序文件有 BOM 头

看来,经过这一折腾,你已经具有处理 ajax 隐性问题的能力了


我测试了,输对了内码显示是116,输错了内码显示9。怎么还不一样呢?
如果输对了,charcodeat(4)就是9,这个跟输错时,charcodeat(0)相同,看来确实我以为php返回为空,其实是返回了一个编码为9的字符。
我php那边无论输出‘true’还是‘false’甚至无输出时,js脚本这边接收的data字符串的最后都自动加了编码为9的字符,好奇怪!

你把程序文件的 bom 头去掉就行了

你把程序文件的 bom 头去掉就行了


谢大神,我用了trim,整个程序就正常了。但这样治标不治本,我还没弄清这个bom头是怎么加进去的,网上有说是编辑器的原因,我用的editplus,看来得换个编辑器试试。

保存文件时选择 utf-8 无 bom

保存文件时选择 utf-8 无 bom


我看了editplus的首选项,默认保存就是utf-8无bom

那还要看 标记外是否有空格、空行之类的

那还要看 标记外是否有空格、空行之类的


我查了php文件,果然是标记外有个制表符,哎,刚学php,埋了太多雷啊,膜拜大神!