gpt4 book ai didi

PHP 不会从 MySQL 中删除

转载 作者:可可西里 更新时间:2023-11-01 07:46:49 25 4
gpt4 key购买 nike

出于某种原因,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.");
?>

如果有人知道这个问题的答案,我将不胜感激。我也乐于接受建议(对于那些不确定的人)。

谢谢!

最佳答案

在您的 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
    • 有关详细信息,请参阅 Using Register Globals
    • 但请注意,此“功能”已被弃用,绝对不应使用!
      • 它会导致安全风险
      • 并且应该在 PHP 6 中消失——这将是一个很好的变化,即使它会破坏一些旧的应用程序
  • 你的代码有一个很大的SQL injection漏洞:在查询中使用它之前,您应该清理/过滤/转义 $id !
    • 如果你的video.id是一个字符串,这意味着使用mysql_real_escape_string
      • 如果您使用 mysqli 或 PDO 扩展,您还可以查看准备好的语句
    • 对于整数,您可以调用 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);

关于PHP 不会从 MySQL 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com