嘿我在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绕过这个?
答案 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命令 - 或检索其内容更邪恶的目的。