0

重複の可能性:
「すべての引用符の前にスラッシュ」の問題

localhost のようにローカル コンピューターではコードが動作するという奇妙な状況がありますが、Web サーバーで公開すると動作が異なります。

ユーザーがチェックボックスを選択できるように、チェックボックスが付いた学生のリストがあり、削除ボタンをクリックすると、それらはリストから削除され、別のテーブルに挿入されます。

注: StudentID には、KNC/2012/sem1/BSC/125 のようにスラッシュが付きます

今、私の JavaScript 関数は ajax リクエストを作成し、配列を通過して foreach ループを使用してそれらを挿入する私の php ファイルに値をパラメーターとして送信します。

JavaScript コード:

function flagRemovedStudents(iar){
displayBox = document.getElementById("studentBox");
elements = document.getElementsByName('stids[]');  
data = [];
for (i = 0; i < elements.length; i++){
 if (elements[i].checked){
    data.push('stids[]='+encodeURIComponent(elements[i].value));
 }
 }
 params = "iars="+encodeURIComponent(iar)+"&fl="+encodeURIComponent(1)+"&"+data.join('&');
 alert(params); // just to check what values are being passed to php script
 if (window.XMLHttpRequest)
 {
 xmlhttp=new XMLHttpRequest();
 }
else
 {
 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
xmlhttp.onreadystatechange=function()
 {
if (xmlhttp.readyState==4 && xmlhttp.status==200)
 {
result = xmlhttp.responseText;  
alert(result);
displayBox.className = "dimBox";
setTimeout(function(){showStudentsAfterRemoval(iar);},200); 
}
 }
xmlhttp.open("POST","remst.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(params);
} 

今私のphpは次のように動作します:

 $session = $_SESSION['sess'];
 $iarsid = mysql_real_escape_string($_POST['iars']);
 $studentid = $_POST['stids'];
 $num = 0;

 foreach ($studentid as $value ) {
$val = mysql_real_escape_string($value);
$q1 = "insert into removedstudents(sessionid,iarsid,studentid)     values('$session','$iarsid','$value')";
$r1 = mysql_query($q1) or die(mysql_error());
if(mysql_affected_rows() > 0){
$num = $num + 1;
}
  }
echo $num." student(s) have been removed from the responsibility.";

問題は、Web サーバーに学生 ID が挿入され、KNC\/2012\/sem1\/BSC\/125それが私のさらなるクエリに影響を与えていることです。

驚くべき部分は、ローカルホスト、つまり開発環境で必要な形式で挿入されていることですが、同じコードをWebサーバーに配置すると、どういうわけか奇妙な動作をします。助けてください。

4

1 に答える 1

0

mysql_real_escape_string設計によりこれを行います(ドキュメントを参照)。

この特定のケースでは、正規表現を使用して php で ID の形式を検証し、データベースでエスケープしない方がよい場合があります。明らかに、これを行うことによってセキュリティ ホールを開けないように十分に注意する必要があります。

mysql_* 関数も現在非推奨であるため、代わりに mysqli_* を使用することも検討する必要があります。

于 2013-01-13T13:08:20.540 に答える