ホームページ  >  記事  >  バックエンド開発  >  phpの出力値についての質問です。

phpの出力値についての質問です。

WBOY
WBOYオリジナル
2016-06-20 12:29:521165ブラウズ

簡単な HTML ログイン フォームを作成し、送信ボタンをクリックして、検証のために非同期で送信しました。 php ファイルはデータベースに接続してユーザー名とパスワードを検証します。それが正しい場合は文字列「true」がエコーされ、間違っている場合は出力値はありません。 HTMLを返した後、判断して応答アクションを実行します。しかし、テストしてみると、入力が間違っているか正しいかに関係なく、ページは依然として正しいことがわかりました。 php部分は正しく、フォーム送信データに基づいてレスポンス値を出力することはできますが、クライアント部分にバグがあると思われ、どう修正しても修正できません。 。以下はクライアント スクリプトです:
4ec11beb6c39d0703d1751d203c17053
$('#btn').click(function () {
$('#form2')。 ajaxSubmit ({
success:function(data) {
console.log(data+' '+typeof data);
console.log(data=='true');
if (データ) {
alter('ログイン成功!');
}else {
$('#tip5').html('ユーザー名またはパスワードが間違っています。再入力してください!')
}
},

})
})
2cacc6d41bbb37262a98f745aa00fbf0


ディスカッションへの返信(解決策)

入力エラー時のコンソール出力データは何ですか?

入力が間違っていると出力されません。これは私の php コードの一部です:
080bcdb8910dff4dd1e2b7cfa6e28811

エラーが発生した場合のコンソール出力データとは?

間違えると何も出力されません。これは私の php コードの一部です:
a03a51e5958336ac31e0a0134cc65ba5

つまり、間違った場合です console.log(data+' ' +typeof data);

console.log(data=='true');
これらの 2 つの文は何を出力しますか?

つまり、間違った場合です。

console.log(data+' '+typeof data);

console.log(data=='true'); 2 つの文 出力は何ですか?

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


フォームを見てください

フォームを見てください


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

6cf9a575e463c819cbb258aaf30ca23b

b2386ffb911b14667cb8f0f91ea547a7ドキュメント6e916e0f7d1e588d4f442bf645aedb2f
fec2bac8d52f5bac3bca341b4e171f332cacc6d41bbb37262a98f745aa00fbf0
56e37905c339be4d98223f27b60398472cacc6d41bbb37262a98f745aa00fbf0
9c3bca370b5104690d9ef395f2c5f8d1
372fdf6570a7ad8069750448a2826895
c5cc0624fe7c5533c7cc9fb8675b59a8
65f93eb409fb294935c6ba8d66f63fb6

b6c5a531a458a2e790c1fd6421739d1c用户名b90dd5946f0946207856a8a37f441edf
b6c5a531a458a2e790c1fd6421739d1c320b9c8545c2a6966a3bb884170c134e0c6dc11e160d3b678d68754cc175188ab90dd5946f0946207856a8a37f441edf
fd273fcf5bcad3dfdad3c41bd81ad3e5

b6c5a531a458a2e790c1fd6421739d1c密解b90dd5946f0946207856a8a37f441edf
b6c5a531a458a2e790c1fd6421739d1cce00c7797347a04245011eecb408d9330c6dc11e160d3b678d68754cc175188ab90dd5946f0946207856a8a37f441edf
fd273fcf5bcad3dfdad3c41bd81ad3e5

3ed4859cd4ffe800d1191ffbf5131e38b90dd5946f0946207856a8a37f441edf
fd273fcf5bcad3dfdad3c41bd81ad3e5

ccac915b852807eef541e781ebbde635b90dd5946f0946207856a8a37f441edf
fd273fcf5bcad3dfdad3c41bd81ad3e5

b6c5a531a458a2e790c1fd6421739d1cc7dc5f4475b4c5654d38827abb4fda41b90dd5946f0946207856a8a37f441edf
fd273fcf5bcad3dfdad3c41bd81ad3e5
271cb3d2ff227ca6331ee41e81293d65
f5a47148e367a6035fd7a2faa965022e
36cc49f0c466276486e50c850b7e4956
4ec11beb6c39d0703d1751d203c17053
$('#btn').click(function () {
$.ajax({
url:'plane/login.php',
type:'post',
data:{
'name_login':'fengjie',
'psw_login':'123123',

},
success:function(data) {
console.log( data+' '+typeof data);
console.log(data=='true');
if (data) {
}else {
$('#tip5').html('用户名または密码错误,请重新输入!')
}
},

})
})
fa53fefa8eafc7c836ea46f2cc284f0d
73a6ac4ed44ffec12cee46588e518a5e

看守の表

この js スクリプトは、jq の ajax() メソッドを直接使用するように変更したものです。

このような検査

$(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」を示し、結果は無効で、値は空になります。 'の結果は false,怎么可能性は false???php 返される就是文字列型の 'true'啊!
アラート(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 の隠れた問題に対処できるようです

Iテストしたところ、正しく入力すると内部コードは 116 と表示され、内部コードが間違って入力すると 9 が表示されます。それでも違うのはなぜですか?
正しく入力した場合、charcodeat(4) は 9 になります。これは、間違って入力した場合の charcodeat(0) と同じです。確かに、php は空を返すと思っていたようですが、実際にはコード化された文字が返されました。 9として。
私の php 側が「true」、「false」を出力するとき、あるいは何も出力しないときでも、js スクリプトが受け取るデータ文字列の末尾に 9 というコード化された文字が自動的に追加されます。
プログラム ファイルから BOM ヘッダーを削除するだけです

プログラム ファイルから BOM ヘッダーを削除するだけです

ありがとうございます。trim を使用しました。プログラムは次のようになります。普通。しかし、これは根本的な原因ではなく、症状を解決するものであり、BOM ヘッダーがどのように追加されたのかがわかりません。私が使用しているエディターが原因であると言う人もいるので、別のエディターを試す必要があると思います。
ファイルを保存する場合は、

utf-8 without bom

ファイルを保存する場合は、

utf-8 without bom

editplus の環境設定を見てみると、デフォルトの保存は BOM なしの utf-8 です。
それから、4d268e2d9f00c071ccc84514f054f805 タグ

そして、bb9bd6d87db7f8730c53cb084e6b4d2d タグ

の外側にスペースや空白行があるかどうかにも依存します。案の定、7e03a0c69f50421056697103b83422a0 タグの外側にはスペースや空白行などが含まれています。私は PHP を学んだばかりですが、たくさんの間違いを犯してしまいました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。