对象 HTML 被输出而不是期望值


object HTMLLIElement getting outputted instead of expected value

嘿,我在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'");
?>

因此,它不是输出"$todo 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命令,这将删除整个数据库 - 或检索其内容用于更邪恶的目的。