搜索
首页后端开发php教程关于php输出值的问题

我做了个简单的html登陆表单,点击提交按钮,异步提交验证。php文件连接数据库验证用户名密码,对则echo一个字符串‘true’,错了则无输出值。返给html后,做判断,再做响应动作。可我测试时发现,不管输错输对,页面均是输对的动作。php部分是正确的,可以根据表单提交数据输出响应的值,我觉得bug在客户端部分,怎么改都不对,望各位大神帮帮忙。以下是客户端脚本:
 <script> <br /> $('#btn').click(function () { <br /> $('#form2').ajaxSubmit({ <br /> success:function(data) { <br /> console.log(data+' '+typeof data); <br /> console.log(data=='true'); <br /> if (data) { <br /> alert('登陆成功!'); <br /> }else { <br /> $('#tip5').html('用户名或密码错误,请重新输入!') <br /> } <br /> }, <br /> <br /> }) <br /> }) <br /> </script>


回复讨论(解决方案)

输错时,控制台输出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内容
nbsp;html>

 
  
  Document
  <script></script>
  <script></script>
 
 



















用户名
密 码


 
 <script> <br /> $('#btn').click(function () { <br /> $.ajax({ <br /> url:'plane/login.php', <br /> type:'post', <br /> data:{ <br /> 'name_login':'fengjie', <br /> 'psw_login':'123123', <br /> <br /> }, <br /> success:function(data) { <br /> console.log(data+' '+typeof data); <br /> console.log(data=='true'); <br /> if (data) { <br /> alert('登陆成功!'); <br /> }else { <br /> $('#tip5').html('用户名或密码错误,请重新输入!') <br /> } <br /> }, <br /> <br /> }) <br /> }) <br /> </script>

看看你的表单

这个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,埋了太多雷啊,膜拜大神!
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP电子邮件:分步发送指南PHP电子邮件:分步发送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

如何通过PHP发送电子邮件:示例和代码如何通过PHP发送电子邮件:示例和代码May 09, 2025 am 12:13 AM

发送电子邮件的最佳方法是使用PHPMailer库。1)使用mail()函数简单但不可靠,可能导致邮件进入垃圾邮件或无法送达。2)PHPMailer提供更好的控制和可靠性,支持HTML邮件、附件和SMTP认证。3)确保正确配置SMTP设置并使用加密(如STARTTLS或SSL/TLS)以增强安全性。4)对于大量邮件,考虑使用邮件队列系统来优化性能。

高级PHP电子邮件:自定义标题和功能高级PHP电子邮件:自定义标题和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP发送电子邮件的指南使用PHP和SMTP发送电子邮件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP发送邮件可以通过PHPMailer库实现。1)安装并配置PHPMailer,2)设置SMTP服务器细节,3)定义邮件内容,4)发送邮件并处理错误。使用此方法可以确保邮件的可靠性和安全性。

使用PHP发送电子邮件的最佳方法是什么?使用PHP发送电子邮件的最佳方法是什么?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依赖注入的最佳实践PHP中依赖注入的最佳实践May 08, 2025 am 12:21 AM

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

PHP性能调整技巧和技巧PHP性能调整技巧和技巧May 08, 2025 am 12:20 AM

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化

PHP电子邮件安全性:发送电子邮件的最佳实践PHP电子邮件安全性:发送电子邮件的最佳实践May 08, 2025 am 12:16 AM

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具