關於php輸出值的問題

來源:互聯網
上載者:User
我做了個簡單的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,埋了太多雷啊,膜拜大神!
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.