1

我对 PHP 相当陌生,并且正在制作一个基本的 CRUD 样式管理系统。我有一个更新页面,它显示新闻表中的数据,并用它填充表单。当前图片 ?(reference) 被拉出并显示在表单上。但是,如果用户想要更改图片,他们可以按“删除”按钮,然后我编写了一些 PHP 来显示上传按钮,将数据库中的图像值设置为 null 并隐藏删除按钮,允许用户上传新图片。

删除按钮仅从数据库中删除图片的引用(路径),它不会删除实际图片。

这是显示图像和删除按钮的 HTML 控件。它还显示了删除按钮的工作原理:

 <td align="right">Image 1:</td>
 <td align="left"><img src="uploads/newsimages/<?php echo $row["Image"]; ?>" width="230" border="0">&nbsp;<a href="UpdateNews.php?change=imagex&cid=<?php echo $row["NewsID"]; ?>">delete</a></td>

如您所见,单击它会设置 change=imagex 和 cid= 当前新闻 id。

然后我写了一个 if 语句,但它似乎不仅仅在单击删除按钮时才被激活。因为我总是收到“cid”未定义的错误。如下:

<?php
if (isset($_GET['change'] = "image1") {
    $query = "UPDATE  Table_Name SET Image = '' WHERE NewsID =".$_GET['cid']." ";
}

?>

我很确定我缺乏 PHP 知识让我失望,我试图以错误的方式解决这个问题,因为但是我更改了 if 语句,它总是给我一个错误。首先它是cid未定义,所以我更改为id但我已经将它用于其他东西,另一个查询/函数。我希望一切都有意义,谁能告诉我我哪里出错了?

4

3 回答 3

4

您缺少括号 + 您必须单独指定:

if (isset($_GET['change'] = "image1") {

改成:

if (isset($_GET['change']) && $_GET['change'] == "image1") {
于 2012-09-06T18:58:34.563 回答
2

还有一些需要考虑的事情:

1) 不要在 mysql 查询中直接使用来自 $_GET 的未经处理的值

WHERE NewsID =".$_GET['cid']."

很容易通过一些时髦的 sql 注入来利用它(参见http://xkcd.com/327/)。

如果您使用 cid 的数值,则应将 $_GET 值转换为整数以防止 sql 注入:

$cid = (int)$_GET['cid];
$query = '(...)WHERE NewsID = '.$cid.' limit 1';

甚至更好:

$cid = (int)(array_key_exists('cid', $_GET) ? $_GET['cid'] : 0);
if ($cid) {
  $query = (...)
}

如果您需要在不同的地方进行这种清理,您应该考虑为其编写一个辅助函数以保持您的代码可读性。

2) 不要使用 GET 请求来更改服务器上的数据

想象一个 google bot 浏览您的网站并跟踪您用来删除图像的所有链接。其他场景涉及用户的浏览器预取插件(例如 Fasterfox)。此外,GET 请求可能会被代理和浏览器缓存,这样如果您单击链接,请求就不会到达服务器。

HTTP 规范附带了许多请求方法,最重要的是:

  • GET从服务器获取内容
  • PUT在服务器上存储新信息
  • POST更新服务器上的现有信息

要更新您的新闻记录(通过删除图像),适当的方法是POST. 要发送 POST 请求,您可以使用<form method="POST">标签。

于 2012-09-06T19:44:02.463 回答
0

试试这个

<?php
if (isset($_GET['change']) && $_GET['change'] == "image1") {
    $query = "UPDATE  Table_Name SET Image = '' WHERE NewsID =".$_GET['cid']." ";
}

?>
于 2012-09-06T18:58:26.390 回答