【问题标题】:PHP + MySql: a particular DELETE functionPHP + MySql:一个特殊的 DELETE 函数
【发布时间】:2014-01-26 18:09:37
【问题描述】:

我有一张包含所有产品信息的表格。

产品表

product_id
产品名称
img1
img2
img3

我创建了一个页面来更新产品信息。我的问题是如何管理图像。在变量 img1、img2 和 img3 中,我保存了图像的路径。现在我想通过 update.php 页面中的链接删除该记录。

我尝试过这样的事情:

<a href="delete_img.php?id=<?php echo $img1; ?>&product_id=<?php echo $product_id; ?>">

delete_img.php 页面是:

<?php
include '../asset/inc/auth.inc.php';
include '../asset/inc/db.inc.php';

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or 
    die ('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));

    $img1 = (isset($_GET['img1'])) ? $_GET['img1'] : 0;
    $product_id = (isset($_GET['product_id'])) ? $_GET['product_id'] : 0;

    $query = 'UPDATE product SET img1=NULL WHERE product_id = ' . $product_id;
    // invio la query
    $result = mysql_query($query);

if (!$result) {
    die("Errore nella query $query: " . mysql_error());
}

// close
mysql_close();

header('Refresh: 0; URL=update_immobile.php?id=' . $immobile_id . '');
?>

它工作正常,但仅适用于单个变量 img1。对于第二张图片,如果我想删除它,我需要另一个 delete_img.php 脚本(delete_img2.php)等等。

问题:如何优化这个“功能”?

【问题讨论】:

  • 将您的数据以标准化形式存储,每行每个产品一张图片,在单独的表中ProductImages
  • 如果您继续使用此脚本,我会为每张图片使用 3 个链接。单击链接后,我将转到 delete_IMG.php 脚本。在这个脚本中,我会做一个 if then 语句。所以如果1删除图片之一。

标签: php mysql image


【解决方案1】:

您可以通过多种不同的方式优化此功能。 $imgid 中可能是存储图像的 ID(1、2 或 3),因此 HTML 代码如下所示:

<a href="delete_img.php?id=<?=$imgid?>&product_id=<?php echo $product_id; ?>">

提交此信息后,您可以轻松地在 PHP 代码中更改 MySQL 查询。

switch($_GET["id"]) {
    case 1:
    case 2:
    case 3:
         $field = "img" . $_GET["id"] ;
         break ;
    default:
         $field = "" ;
}

if($table!="") {
    $query = "UPDATE product SET $field=NULL WHERE product_id = $product_id";
    $result = mysql_query($query);
}

如果您要再创建两个表,则更合适的是:

  1. 存储图片+路径的表格
  2. 将图像链接到产品的中间表

这样,一个产品可以存储多于三张图片,并且多个产品可以有相同的图片。此外,每张图片都有一个唯一的 ID 以将其删除(这将使您的问题更容易解决)。

【讨论】:

  • 感谢@efux,但我不是高级开发人员,这可能会使我的应用程序复杂化。最好的问候
【解决方案2】:

这应该适用于您拥有的尽可能多的图像列(未经测试,但您明白了):

<?php
include '../asset/inc/auth.inc.php';
include '../asset/inc/db.inc.php';

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or 
    die ('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));

    $img = (isset($_GET['img1']) && in_array(key($_GET['img1'], array('img1', 'img2', 'img3')))) ? key($_GET['img1']) : 0;
    $product_id = (isset($_GET['product_id'])) ? (int)$_GET['product_id'] : 0;

    if ($img !== 0) {
        $query = 'UPDATE product SET ' . $img . '=NULL WHERE product_id = ' . $product_id;
        // invio la query
        $result = mysql_query($query);
    }

if (!$result) {
    die("Errore nella query $query: " . mysql_error());
}

// close
mysql_close();

header('Refresh: 0; URL=update_immobile.php?id=' . $immobile_id . '');
?>

一些注意事项:
* 不要忘记验证用户输入(我对代码做了一些小调整)
* 在发送重定向标头后始终使用exitdie,否则任何人都可以访问您的管理区域而无需用户名/密码

【讨论】:

  • 您好@machineaddict,感谢您的建议。不幸的是,该功能不起作用。
  • @user3037382:从这个答案你应该已经采取了这个想法。当然脚本可能不起作用,我没有测试过。
  • 是的,多亏了你的建议,我用类似的脚本解决了。
【解决方案3】:
$img1 = (isset($_GET['img1'])) ? $_GET['img1'] : 0;
$img2 = (isset($_GET['img2'])) ? $_GET['img2'] : 0;
$img3 = (isset($_GET['img3'])) ? $_GET['img3'] : 0;

$query = 'UPDATE product SET if($img1==0) img1=NULL' ;
$query .= 'if($img2==0) ,img2=NULL' ;
$query .= 'if($img3==0) ,img3=NULL' ;
$query .= 'WHERE product_id = ' . $product_id'

$result = mysql_query($query);

It is simply concatenation of query with if condition.

【讨论】:

  • 它只是一种处理相同不正确代码的方法。他可以使用这样的查询连接进行单个查询并更新表
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多