我使用php / mysql和protype.js从表中删除记录。问题是数据库中的记录不会被删除。
的index.php:
<a href="javascript: deleteId('<?php echo $studentVo->id?>')">Delete</a></td>
脚本
function deleteId(id)
{
alert("ID : "+id);
new Ajax.Request('delete.php?action=Delete&id='+id,{method:'post'});
$(id).remove(); // because <tr id='".$row[id]."'> :)
}
delete.php
<?php
/* Database connection */
include('configuration.php');
echo "hello,...";
if(isset($_POST['id'])){
$ID = $_POST['id'];
$sql = 'DELETE FROM student where id="'.$ID.'"';
mysql_query($sql);
}
else { echo '0'; }
?>
alert("ID : "+id);
工作正常,但之后的代码不是。
答案 0 :(得分:9)
您正在使用来自JS的GET请求:
{method:'get'}
您的PHP代码使用他认为以POST形式到达的数据:
$ID = $_POST['id'];
你应该在两边使用相同的方法。
(正在修改/删除数据时,您应该使用POST)
作为旁注,您应该明确地逃避/保护/检查您在SQL查询中使用的数据,以避免SQL注入,例如,当您使用整数时使用intval;如果您正在使用字符串,则使用mysql_real_escape_string。
另一种方法是停止使用旧的mysql
扩展程序,并开始使用mysli或PDO,这意味着您可以使用预准备语句(mysqli,{{ 3}})
在评论后编辑:您现在已经在POST中发出请求,需要更改参数的传递方式:它们不应再在URL中传递。
我认为这样的事情应该有效:
var myAjax = new Ajax.Request(
'delete.php',
{
method: 'post',
parameters: {action: id}
});
或者你也可以使用这样的东西,自己构建参数字符串:
var myAjax = new Ajax.Request(
'delete.php',
{
method: 'post',
parameters: 'action=' + id
});
(未经测试,因此您可能需要更改一些内容;-))
有关更多信息,请查看pdo和Ajax.Request
: - )
答案 1 :(得分:0)
您的ajax请求似乎正在使用GET,但您的删除脚本正在尝试通过POST检索ID。尝试将{method:'get'}
设置为{method:'post'}
。
答案 2 :(得分:0)
像这样更改delete.php:
<?php
/* Database connection */
include('configuration.php');
echo "hello,...";
if(isset($_GET['id'])){
$ID = $_GET['id'];
$sql = 'DELETE FROM student where id="'.$ID.'"';
mysql_query($sql);
}
else { echo '0'; }
?>
或者你冷却使用$ _REQUEST而不是$ _GET(或第一个例子中的$ _POST),因为它聚合$ _GET和$ _POST数组。