PHP无法删除MS Access表行

时间:2014-12-18 18:01:03

标签: php sql

我有一个简单的MS Access数据库来插入单列行。这是页面:

<!DOCTYPE html>
<html>
<head>
    <title>Bell Sistemas - Site de Atividades Teste em PHP</title>
</head>
<?php
    include "session.php";
    include "header.php";
    include "connectSQL.php";

echo "<br><form action='' method='POST'><table align='center'>
<tr><th align='left'>Atividade: <br><input type='text' name='activity'></th></tr>
<tr><th align='left'><input type='submit' name='Cadastrar2' value='Cadastrar'></th></tr></table></form>";

$activity = $_POST['activity'];

if(isset($_POST['Cadastrar2'])) {
    if($activity==''){
        echo "O campo está vazio.";
    }
    else{
        $sql = "Insert Into Atividades(Atividade) VALUES('$activity')";
        $result = $db->query($sql);
        echo "Atividade inserida.";
    //header("Location: ./menu.php"); /* Redirect browser */
    //exit();
    }}
?>

<?php
$sql  = "SELECT CdAtividade, Atividade FROM Atividades ORDER BY Atividade";

$result = $db->query($sql);
echo "\n<hr>";
echo "<table align='center'><tr><th align='left'>Atividade</th></tr>";
while ($row = $result->fetch()) {
    echo "<tr><td align='left' width='250'>".$row['Atividade']."</td><td width='75'>Editar</td><td><a href='delete_atividade.php?CdAtividade=".$row['CdAtividade']."'>Excluir</a></td></tr>";
}
echo "</table>";
?>
<?php
include "footer.php";
include "tableConfig.php";
?>

</body>
    </html>

我像这样配置了delete_atividade.php:

<?php
 // connect to the database
 include "session.php";
 include "connectSQL.php";

 // get id value
 $cdatividade = $row['CdAtividade'];

 // delete the entry
 $sql  = "DELETE FROM Atividades WHERE CdAtividade='$cdatividade'";
 $result = $db->query($sql);

 // redirect back to the view page
 if($result){
 header("Location: atividades.php");
 }
 else
 // if id isn't set, or isn't valid, redirect back to view page
 {
 header("Location: atividades.php");
 }

?>

但是,当我点击删除一行时,它不会删除它。我忘记了什么吗?

我感谢任何可以帮助我的人。

1 个答案:

答案 0 :(得分:0)

我不确定这是最终解决方案,但对于初学者来说:

$cdatividade = $row['CdAtividade'];

此文件中不存在$row变量。你传递的是查询字符串,所以它应该是:

$cdatividade = $_GET['CdAtividade'];

另外,一般来说,对于数值,没有必要用引号括起来,所以你当前的删除语句是:

$sql  = "DELETE FROM Atividades WHERE CdAtividade='$cdatividade'";

......可以改写为:

$sql  = "DELETE FROM Atividades WHERE CdAtividade=$cdatividade";

最后,值得注意的是, Marc B 认为您当前的查询容易受到以下SQL注入攻击:

http://yourdomain.com/delete_atividade.php?CdAtividade=0;DROP TABLE Atividade;

将导致您的SQL看起来像这样:

DELETE FROM Atividades WHERE CdAtividade=0;DROP TABLE Atividades;

执行时,你的桌子会掉线,这没什么好玩的。