ホームページ > バックエンド開発 > PHPチュートリアル > php+Ajax がユーザー名を検証するときにコーディングの問題が発生しました

php+Ajax がユーザー名を検証するときにコーディングの問題が発生しました

WBOY
リリース: 2016-06-23 14:12:59
オリジナル
856 人が閲覧しました

PHP Ajax MySQL テスト

コードをテストしているときにこの問題が発生しました。
コードは次のとおりです:
Index.php
<script type="text/javascript" src="ajax.js"></script>  <form name="myform" action="" method="post" enctype="text/plain">  用户名:  <input type="text" name="user" value="" onblur="funphp100('php100')"/>  <div id="php100"></div>  </form>
ログイン後にコピー
;
ajax.js
var xmlHttp;function S_xmlhttprequest() {	if(window.ActiveXObject) {		xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');	} else if(window.XMLHttpRequest) {		xmlHttp = new XMLHttpRequest();	}}function funphp100(name) {   var f=document.myform.user.value;	S_xmlhttprequest();	xmlHttp.open("GET","for.php?id="+f,true);	xmlHttp.onreadystatechange = byphp;	xmlHttp.send(null);}function byphp() {  	if(xmlHttp.readyState == 1) {		 document.getElementById('php100').innerHTML = "<img src='loading.gif'>";	}    	if(xmlHttp.readyState == 4 ){		if(xmlHttp.status == 200) {          var byphp100 =  xmlHttp.responseText;          document.getElementById('php100').innerHTML = byphp100;		}	}}
ログイン後にコピー

for.php
<?phpif(@$_GET[id]){	sleep(1); $conn=mysql_connect('localhost','root',''); mysql_select_db('test',$conn); echo $sql="SELECT * FROM `user` where `user`='$_GET[id]'"; $q=mysql_query($sql); if(is_array(mysql_fetch_row($q))){ 	echo "<font color=red>用户名已经存在</font>"; }else {   echo "<font color=green>可以使用</font>"; }}?>
ログイン後にコピー

ローカル環境と BAE 環境の両方でテストしました。
データベース内に既に「Qianju」というユーザーが存在しますが、このユーザーは使用できるというメッセージが表示され、正常に漢字を送信できない現象が発生しています。エンコードの問題のようです。
、答えてください~


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

問題のスクリーンショット:

心配しないで、答えてください~

phpファイルとブラウザのエンコーディングを統一します。
mysql_query("set names utf8"); //クエリの前にこの文を追加します

Saonian、コードを変更してください。コードがない方が良いです。
ポイントを与えるのを忘れないでください (⊙o⊙)

リズ、あなたが使用した Ajax はフォームを使用して送信されたものではありません。つまり、あなたの値はアドレス バーを通じて送信されました。
アドレスバーを使って漢字を送信すると文字化けした記憶があります。

xmlHttp.open("GET","for.php?id="+f,true);
encodeURI(f);

f=encodeURI(f); の前に

を追加できます。それを試してみてください!

AJAX アプリケーションを実行する場合、Web サイトのデフォルトの文字セットとして utf-8 を使用するのが最善です
XMLHttpRequest コンポーネントは常に utf-8 エンコーディングでデータを送信するため

もちろん、その後 gbk を使用することも可能ですすべて、漢字の utf-8 と比較して、ストレージと送信量を 1/3 節約するため
ただし、いくつかの点に注意する必要があります
1. JS 側で送信されるデータは utf-8 の URL にエンコードされる必要がありますencodeURIComponent を使用したエンコード
2. PHP 側は、受け取ったデータを iconv を使用して変換する必要があります gbk の場合
3. PHP 側でデータを返す前に、header('Content-type: text/html;charset=GBK'); がある必要があります。返されたデータが gbk

header ("charset=utf-8" ); であることを宣言するには、これを for.php ページに追加してください。

データベースには mysql_query("set names utf8"); も必要です。

それはおそらくデータベースのエンコーディングの問題です:

show variables like 'char%'
ログイン後にコピー

正しく推測した場合、それは GBK であるはずです
f=encodeURI(f); 以上、5 階が正しいです。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート