ホームページ >バックエンド開発 >PHPチュートリアル >php+Ajax がユーザー名を検証するときにコーディングの問題が発生しました
PHP Ajax MySQL テスト
コードをテストしているときにこの問題が発生しました。<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>;
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; } }}
<?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>"; }}?>
問題のスクリーンショット:
心配しないで、答えてください~
phpファイルとブラウザのエンコーディングを統一します。
mysql_query("set names utf8"); //クエリの前にこの文を追加します
Saonian、コードを変更してください。コードがない方が良いです。
ポイントを与えるのを忘れないでください (⊙o⊙)
リズ、あなたが使用した Ajax はフォームを使用して送信されたものではありません。つまり、あなたの値はアドレス バーを通じて送信されました。
アドレスバーを使って漢字を送信すると文字化けした記憶があります。
xmlHttp.open("GET","for.php?id="+f,true);
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%'