对象HTMLLIElement输出而不是预期值

时间:2012-04-15 14:05:06

标签: php javascript

嘿我在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.Any绕过这个?

1 个答案:

答案 0 :(得分:1)

首先,您的SQL注入应用程序中存在一个主要漏洞。其次,您需要引用标识符,以便在函数调用中传递id的值,而不是对元素本身的引用。第三,你可能应该使用一个框架并且不引人注意地应用处理程序。

'<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并将id更改为将丢弃整个数据库的SQL命令 - 或检索其内容更邪恶的目的。