如何在单击链接时删除数据库条目

时间:2012-07-03 04:06:05

标签: php

我想扩展我的PHP技能,所以我阅读了关于tutorialzine的教程。我理解教程中提供的说明。但是当谈到扩展它时,我似乎缺乏联系。我的主要目标是在单击标签时删除选定的注释。但是我不知道如何选择分配给音符的id,以便能够将其传递给我的删除功能。

来源:http://tutorialzine.com/2010/01/sticky-notes-ajax-php-jquery/

感谢您的帮助。

<?php
error_reporting(E_ALL^E_NOTICE);
require 'connect.php';
mysql_query("DELETE FROM notes WHERE id>3 AND dt<SUBTIME(NOW(),'0 1:0:0')");
$query = mysql_query("SELECT * FROM notes ORDER BY id DESC");

$notes = '';
$left='';
$top='';
$zindex='';

while($row=mysql_fetch_assoc($query)){
    list($left,$top,$zindex) = explode('x',$row['xyz']);
    $notes.= '
        <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:'.$zindex.'">
            '.htmlspecialchars($row['text']).'
            <div class="author">'.htmlspecialchars($row['name']).'</div>
            <span class="data">'.$row['id'].'</span>
            <a id="remove_note" href="javascript:;" onclick="deleteNote('<? echo $row['id']; ?>');">&nbsp;</a>
        </div>';
}
function deleteNote(id){
    $sql="DELETE FROM notes WHERE id='$rows['id']'";
    $result=mysql_query($sql) or die("Error when tryin to delete note.");
}
?>

更新:

我一直在玩这个以及Andrew和sachleen提供的答案。因为你已经提到了整个SQL注入问题,所以计划开始使用AJAX替代方案。但是我仍然遇到将id传递给remove.php文件的问题。我认为这与$ notes如何从数据库创建信息有关。

我说这是因为我得到:解析错误:语法错误,第24行/home/avonamyd/public_html/projects_php/sticky_notes/demo.php中的意外T_STRING

只有当我从sachleen中包含代码时才会这样。但是当我更新它以说明单引号时,我有以下代码。 id存在并传递给remove.php文件,但我仍然收到错误。这是我使用我的代码或你提供的代码。

        $notes.= '
        <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:'.$zindex.'">
            '.htmlspecialchars($row['text']).'
            <div class="author">'.htmlspecialchars($row['name']).'</div>
            <span class="data">'.$row['id'].'</span>
            <a id="remove_note" target="_blank" href="remove.php?id='.$row['id'].'">&nbsp;</a>
        </div>';

以下是我目前在remove.php文件中的内容:

<?php
include 'connect.php';
$_GET['id'];
function deleteNote($id){
    $sql="DELETE FROM notes WHERE id='$id'";
}
    $result=mysql_query($sql) or die("Error when tryin to delete note.");

&GT?;

更新

我在remove.php中添加了额外的回显线,这就是我想出的。

<?php
include 'connect.php';
$_GET['id'];
echo  $id; --doesnt show
function deleteNote($id){
    echo "hello"; --doesnt show
    $sql="SELECT FROM notes WHERE id='$id'";
}
echo  'hello2'; --shows
$result=mysql_query($sql) or die("Error when tryin to delete note.");

&GT;

更新 感谢大家对这个项目的帮助我终于得到了一些概念,在经过一些修补之后点击了我的脑袋。我将发布下面的功能代码给其他任何偶然发现此代码的人。 = d 大家好!

demo.php

    error_reporting(E_ALL^E_NOTICE);
require 'connect.php';
mysql_query("DELETE FROM notes WHERE id>3 AND dt<SUBTIME(NOW(),'0 1:0:0')");
$query = mysql_query("SELECT * FROM notes ORDER BY id DESC");

$notes = '';
$left='';
$top='';
$zindex='';

while($row=mysql_fetch_assoc($query)){
    list($left,$top,$zindex) = explode('x',$row['xyz']);
    $id = $row['id'];
    $notes.= '
        <div class="note '.$row['color'].'" style="left:'.$left.'px;top:'.$top.'px;z-index:'.$zindex.'">
            '.htmlspecialchars($row['text']).'
            <div class="author">'.htmlspecialchars($row['name']).'</div>
            <span class="data">'.$row['id'].'</span>
            <a id="remove_note" target="_blank" href="remove.php?id='.$row['id'].'">&nbsp;</a>
        </div>';
}

remove.php

<?php
include 'connect.php';
$id = intval($_GET['id']);
$sql="DELETE FROM notes WHERE id=$id";
$result = mysql_query($sql) or die("Unable to delete database entry.");

&GT;

3 个答案:

答案 0 :(得分:3)

你不能onclick PHP函数。您正在将JavaScript与PHP混合使用。我会这样做:

<a id="remove_note" href="remove.php?id=<?php echo $row['id']; ?>">Remove</a>

然后在remove.php上使用$_GET['id']获取ID并将其传递到DELETE查询。

答案 1 :(得分:3)

看起来您正在尝试混合使用JavaScript和PHP。单击链接时无法调用deleteNote()函数,因为它是PHP函数。有几种方法可以调用PHP脚本来删除注释:

使用以下内容:

<?php
// ...
$id_to_delete = $_GET['id'];
if( isset($id_to_delete) ) {
    $sql="DELETE FROM notes WHERE id='$id_to_delete'";
    $result=mysql_query($sql) or die("Error when tryin to delete note.");
}
$query = mysql_query("SELECT * FROM notes ORDER BY id DESC");

//...

while($row=mysql_fetch_assoc($query)){
   //...
   echo '<a id="remove_note" href="CURRENT_SCRIPT_URL?id=' . $id_to_delete . '">X</a>';
   //...
}
?>

或者您可以创建第二个脚本,根据您传递给它的数据从数据库中删除一行并使用ajax(我建议使用jQuery for ajax功能)使用项目的id调用该脚本删除。

请记住,任何人都可以使用GET参数调用您的脚本并从数据库中删除记录(或者更糟糕的是,执行SQL注入攻击),因此请确保您有某种安全措施,除非您想要所有的记录消失了!

答案 2 :(得分:1)

你有两个选择。

1)制作<a href="another_php_script.php?delete=true">(或类似),然后运行删除脚本。 (然后标题回到您所在的同一页面。)

这是因为你无法运行onClick php函数,你必须重定向到另一页。

2)您可以使用onclick函数调用AJAX脚本,并从您正在使用的页面执行删除PHP脚本 - 无需重定向。

选项1是简单的选项,选项2是更好的选择。