ホームページ >バックエンド開発 >PHPチュートリアル >JavaScript経由で文字列をPHPサーバーに送信する方法

JavaScript経由で文字列をPHPサーバーに送信する方法

WBOY
WBOYオリジナル
2016-06-23 14:40:121441ブラウズ

ログイン後に特定のユーザーが mysql クエリ コマンドを入力できるページがあります。
php サーバーはコマンドを受信すると、コマンド文字列を直接 mysql に渡して実行し、結果をページに表示します

最初は、編集可能なコントロールの内容が JavaScript でサーバーに直接送信されましたが、コマンド文字列内の「>」や「468ec35eb586871e6cd160b4f0256c0a5 の場合は問題ありません。
送信時に encodeURIComponent 関数を追加すると、select * from tablename が可能になります。ここで id>5 とすると結果は正常になります

この encodeURIComponent を使ってみたら、あ、これを見つけて試してみたのですが、PHP には対応するデコード関数がないので、 html_entity_decode を使ってみました

以下。は私のテストコードです:
クライアント

<!DOCTYPE html><html><head>	<title>测试</title>	<meta http-equiv="Content-Type" content="text/html"; charset="utf-8">	<script>		function handleStateChange(){			if(xmlHttp.readyState==4){				if(xmlHttp.status==200){					document.getElementById("md").innerHTML=xmlHttp.responseText;				}			}		}				function createXMLHttpRequest(){			try {				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");			} catch (e) {				try {					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");				} catch (oc) {					xmlHttp=null;				}			}			if (!xmlHttp && typeof XMLHttpRequest !="undefined"){				xmlHttp=new XMLHttpRequest();			}			return xmlHttp;		}				function sendstr(){			var xmlHttp=createXMLHttpRequest();			//var str="str="+document.getElementById("sqlstr").innerHTML;			//var str="str="+document.getElementById("sqlstr").value;			//var str="str="+encodeURIComponent(document.getElementById("sqlstr").value);			var str="str="+encodeURIComponent(document.getElementById("sqlstr").innerHTML);			var url="t2_1get.php";			xmlHttp.open("POST",url,true);			xmlHttp.onreadystatechange=handleStateChange;			xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");			xmlHttp.send(str);		}		</script>	</head><body><!--	<input type="text" id="sqlstr" />-->	<div id="sqlstr" contenteditable="true" style="border:1px solid #ccf;width:200px;height:20px;"></div>	<input type="submit" value="query" onclick="sendstr()"/>	<div id="md"></div></body></html>


サーバー
<!DOCTYPE html><html><head>	<title>测试get</title>	<meta http-equiv="Content-Type" content="text/html"; charset="utf-8"></head><body><?php	$mysqli=new mysqli("localhost","minhaouser","24994012499401",'test');	if ($mysqli->connect_error){		printf("连接失败:%s\n",$mysqli->connect_error);		exit();	}	$mysqli->query("set names 'utf8'");	//$sqlstr=$_POST['str'];	$sqlstr=html_entity_decode($_POST['str'],ENT_COMPAT,'UTF-8');	//$sqlstr=html_entity_decode($_POST['str']);	echo "sqlstr=".$sqlstr."<br />";	$res=$mysqli->query($sqlstr);	if (!$res){		echo $mysqli->error;		exit;	}	$finfo=$res->fetch_fields();	echo "<table border='1'><tr>";	foreach($finfo as $val){		echo "<td>".$val->name."</td>";	}	echo "</tr>";	while($row=$res->fetch_row()){		echo "<tr>";		for ($i=0;$i<$res->field_count;$i++){			echo "<td>".$row[$i]."</td>";		}		echo "</tr>";	}	echo "</table>";?></body></html>


カプセル化された jquery を直接使用して、ajax の機能要件を実装することをお勧めします

私は初心者であり、jquery を理解していません
それは私のプログラムです。 JavaScript は複雑ではないはずです

私は初心者なので jquery を理解していません

JavaScript を使い始めれば問題ありません。初心者... へー、勉強すれば 2 時間で取得できます

サーバーを
<?phpprint_r($_POST);exit;
に変更すると、実行後にわかります


同じコードですが、私のコードは次のようになります:



Apache と php のバージョンに問題がありますか? それとも設定に問題がありますか?
私の Apache は 2.2.4、

php は 5.2.3 です


テストコードを添付します:

<!DOCTYPE html><html><head>	<title>测试</title>	<meta http-equiv="Content-Type" content="text/html"; charset="utf-8">	<script>		function handleStateChange(){			if(xmlHttp.readyState==4){				if(xmlHttp.status==200){					document.getElementById("md").innerHTML=xmlHttp.responseText;				}			}		}				function createXMLHttpRequest(){			try {				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");			} catch (e) {				try {					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");				} catch (oc) {					xmlHttp=null;				}			}			if (!xmlHttp && typeof XMLHttpRequest !="undefined"){				xmlHttp=new XMLHttpRequest();			}			return xmlHttp;		}				function sendstr(){			var xmlHttp=createXMLHttpRequest();			var str="str="+document.getElementById("sqlstr").innerHTML;			var url="t2_1get.php";			xmlHttp.open("POST",url,true);			xmlHttp.onreadystatechange=handleStateChange;			xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");			xmlHttp.send(str);		}		</script>	</head><body>	<div id="sqlstr" contenteditable="true" style="border:1px solid #ccf;width:200px;height:20px;"></div>	<input type="submit" value="query" onclick="sendstr()"/>	<div id="md"></div></body></html>


t2_1get。 php:

<?php	print_r($_POST);	exit();?>


encodeURIComponent がクライアントに追加されると、次のようになります:






>'5'
が >' 5'

になる場合は、magic_quotes_gpc スイッチがオンになっていることを意味し、エスケープは自動的に実行されます

が必要です

if(get_magic_quotes_gpc()) {  $_POST['str'] = stripslashes($_POST['str']);}

ご協力いただきました xuzuning モデレーターに感謝します
以上です、ありがとうございます!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。