-3

ちょっと私はJavascriptに問題があります-ここに私のphpコードを渡すPHP変数:

<li id="' . $todo1 . '" class="items">' . $todo1 . '<button onclick="ajaxdelete(' . $todo1 . ')">Delete</button></li>

そしてここにjavascript関数があります

 function ajaxdelete(x){
var hr = new XMLHttpRequest();
var url = "ajaxtododelete.php";
var vars = "todo="+x;
hr.open("POST", url, true);

hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onreadystatechange = function() {
if(hr.readyState == 4 && hr.status == 200) {
var return_data = hr.responseText;
document.getElementById("status").innerHTML = return_data;
}
 }
 hr.send(vars); // Actually execute the request

} 

そして彼女の私のajaxファイル:

<?php
session_start();
include_once "connect_to_mysql.php";
$todo = $_POST['todo'];
print "$todo";

$sql = mysql_query("DELETE FROM todo WHERE todo='$todo'");
?>

したがって、'$ todo1'の値(これは私が欲しいものです)を出力する代わりに、オブジェクトHTMLLIElementを出力します。これを回避する方法はありますか?

4

1 に答える 1

1

まず、アプリケーションに SQL インジェクション用の大きな穴があります。次に、識別子を引用符で囲む必要があるため、要素自体への参照ではなく、関数呼び出しで id の値を渡します。3 番目に、おそらくこれにはフレームワークを使用し、目立たないようにハンドラーを適用する必要があります。

'<li id="' . $todo1 . '" class="items">' . $todo1 . '<button onclick="ajaxdelete(\'' . $todo1 . '\')">Delete</button></li>'

より良い(jQueryを使用)

'<li id="' . $todo1 . '" class="items">' . $todo1 . '<button>Delete</button></li>'


<script type="text/javascript">
     $(function() {
           $('.items').on('click', function() {
               var $li = $(this).closest('li');
                   id = $li.attr('id');
               $.post( "ajaxtodelete.php", { "todo" : id }, function() {
                       $li.remove();
               });
           });
     });
</script>

また、PHP を修正して、誰かがブラウザー デバッガーを使用して ID を変更し、データベース全体を削除する SQL コマンドに ID を変更したり、より悪質な目的でその内容を取得したりした場合に備えて、文字列連結ではなくパラメーター化されたクエリを使用するようにします。 .

于 2012-04-15T14:13:19.877 に答える