我想扩展我的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']; ?>');"> </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'].'"> </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'].'"> </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;
答案 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是更好的选择。