出于某种原因,JavaScript / PHP不会从MySQL中删除我的数据!以下是问题的概述。
我有一个数组以一种很好的格式显示我所有的MySQL条目,并带有一个按钮,可以单独删除每个条目的条目。它看起来像这样:
<?php
include("login.php");
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("<br/><h1>Unable to connect to MySQL, please contact support at support@michalkopanski.com</h1>");
//select a database to work with
$selected = mysql_select_db($dbname, $dbhandle)
or die("Could not select database.");
//execute the SQL query and return records
if (!$result = mysql_query("SELECT `id`, `url` FROM `videos`"))
echo 'mysql error: '.mysql_error();
//fetch tha data from the database
while ($row = mysql_fetch_array($result)) {
?>
<div class="video"><a class="<?php echo $row{'id'}; ?>" href="http://www.youtube.com/watch?v=<?php echo $row{'url'}; ?>">http://www.youtube.com/watch?v=<?php echo $row{'url'}; ?></a><a class="del" href="javascript:confirmation(<? echo $row['id']; ?>)">delete</a></div>
<?php }
//close the connection
mysql_close($dbhandle);
?>
删除按钮的href为javascript:confirmation(<? echo $row['id']; ?>)
,因此一旦点击删除,它就会运行:
<script type="text/javascript">
<!--
function confirmation(ID) {
var answer = confirm("Are you sure you want to delete this video?")
if (answer){
alert("Entry Deleted")
window.location = "delete.php?id="+ID;
}
else{
alert("No action taken")
}
}
//-->
</script>
JavaScript理论上应该将'ID'传递到页面delete.php。该页面看起来像这样(我认为这就是问题所在):
<?php
include ("login.php");
mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
mysql_select_db ($dbname)
or die("Unable to connect to database");
mysql_query("DELETE FROM `videos` WHERE `videos`.`id` ='.$id.'");
echo ("Video has been deleted.");
?>
如果那里的任何人都知道答案,我将不胜感激。我也接受了建议(对于那些不确定的人)。
谢谢!
答案 0 :(得分:14)
在delete.php
脚本中,您正在使用以下行:
mysql_query("DELETE FROM `videos` WHERE `videos`.`id` ='.$id.'");
$id
变量不存在:您必须从$_GET
变量初始化它,如下所示:
$id = $_GET['id'];
(这是因为您的页面是使用HTTP GET请求调用的 - 即参数在URL中传递)
此外,您的查询感觉很奇怪:相反:
mysql_query("DELETE FROM `videos` WHERE `videos`.`id` = '$id' ");
即删除'.
':你已经在一个字符串中了,所以没有什么可以连接(PHP中的dot operator用于连接字符串)
注意:
register_globals
$id
!
video.id
是字符串,则表示使用mysql_real_escape_string
intval
以确保实际获得整数。
所以,最后,我会说你应该使用这样的东西:
$id = $_GET['id'];
$escaped_id = mysql_real_escape_string($id);
$query = "DELETE FROM `videos` WHERE `videos`.`id` = '$escaped_id'";
// Here, if needed, you can output the $query, for debugging purposes
mysql_query($query);
希望这有帮助!
答案 1 :(得分:0)
你试图非常奇怪地划分你的查询字符串......这就是你想要的:
mysql_query('DELETE FROM `videos` WHERE `videos`.`id` ='.$id);
但请确保在查询之前清理/验证$id
!
编辑:正如Pascal所说,您需要指定$id = $_GET['id'];
。我忽略了这一点。
答案 2 :(得分:0)
在你的delete.php中,你永远不会设置$ id。
你需要检查$ _REQUEST ['id'](或其他全局变量)中的值,并且只有它是一个整数,将$ id设置为该值。
编辑:哦,你还需要删除查询中$ id之前和之后的句点。您应该打印出您的查询,这样您就可以看到您发送给sql server的内容了。此外,您可以获取SQL服务器的错误消息。答案 3 :(得分:0)
您在字符串中添加额外的点。 使用
mysql_query("DELETE FROM `videos` WHERE `videos`.`id` ='$id'");
而不是
mysql_query("DELETE FROM `videos` WHERE `videos`.`id` ='.$id.'");
另外,请检查如何获得$id
的价值。
答案 4 :(得分:0)
谢谢大家。我使用Pascal MARTIN's回答,它表明我错过了请求($_GET
)从珍贵页面获取'id',并且我的一些查询不正确。
这是工作副本:
<?php
include ("login.php");
$id = $_GET['id'];
mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
mysql_select_db ($dbname)
or die("Unable to connect to database");
mysql_query("DELETE FROM `videos` WHERE `videos`.`id` = $id ");
echo ("Video ".$id." has been deleted.");
?>
再次感谢!