0

我得到了这段代码来在我的网页上显示一个表格。表的内容与数据库链接。所以我从数据库中的 html 表中获取表。在每个(html)行的末尾,我得到一个图像(icon-delete.png)。这将获取$row[0](这是我的 PKID 所在的位置,因此它始终是唯一的数字并且它是自动上升的。现在我想用 PHP 代码清除单击 icon-delete.png 按钮的单个行。行也必须从数据库中删除。这是我此时的代码:

$con = mysql_connect('localhost', 'root', '');
if ($con) {
    mysql_select_db('bieren', $con);
    $result = mysql_query('SELECT * FROM brouwers');
    echo '<form action="" method="post">';
    echo '<table border="0" cellspacing=0>';    
    echo '<tr class="heads">
        <th>brouwernr</th>
        <th>brouwernaam</th>
        <th>adres</th>
        <th>postcode</th>
        <th>gemeente</th>
        <th>omzet</th>
    </tr>';

    $counter = 0;
    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        if($counter % 2 == 0){
            echo '<tr class="even">';
        } else{
            echo '<tr class="oneven">';
        }

        for($i = 0; $i <=6; $i++){
            $counter ++;
            echo '<td>';
            echo $row[$i];
            echo'</td>';
        }

        echo '<td> <input type="image" src="icon-delete.png" name="delete" value ="'.$row[0].'" /> </td>';
        echo '</tr>';
    }   
} else {
    echo 'Connectie niet geslaagd. Reden: ' . mysql_error() . '. Probeer opnieuw.';
}
echo '</table>';
echo '</form>';

if(isset($_POST))
{
    $con = mysql_connect('localhost', 'root', '');

    if ($con) {
        mysql_select_db('bieren', $con);
        $result = mysql_query('DELETE FROM brouwers 
                  WHERE brouwers.brouwernr = "'.$row[0].'"');}
}

我的代码的最后一条规则是:WHEREbrouwers.brouwernr = $row[0]但这不是要删除的正确行。我还将在 html 中显示我现在得到的图像,以便您了解它必须做什么:

网页视图

4

1 回答 1

4

我相信您最初问题的答案是您需要使用 $_POST['delete'] 作为要删除的行的 ID,@vlcekmi3 似乎已经很好地回答了这个问题。

但是,我相信我可以为您原来的问题增加一些额外的价值,并希望能说服您改变主意,使用旧的 ext/mysql 扩展(现在已弃用并且长期以来一直不鼓励使用)。我注意到您说您现在不想使用 PDO。我认为这种想法有问题的是,现在是停止使用旧的 mysql API 并开始使用更新的 API,例如PDOMySQLi的最佳时机。与其尝试给您不使用旧 API 的理由,我将尝试为您提供一些您应该使用较新 API 的理由。

  1. 您当前使用的 API(函数)已经使用mysql_*将近 15 年。我们大多数人都没有那么旧的汽车。您是否像重视您的交通方式一样重视您的代码?该扩展是在 MySQL 版本 3.x 期间引入的,并且从那时起一直向后兼容该版本的 MySQL。由于这种无关紧要的向后兼容性限制,API 在支持数据库的所有新功能方面仍然缺乏支持,而其中大部分功能对于当今 Web 上的现代应用程序开发来说是无价的。
  2. API 不再接受来自 MySQL 社区的任何维护或支持。这意味着您不应该期望此扩展中的任何内容多年来都会发生变化。这包括错误修复、潜在的安全补丁以及多年来 MySQL 中的任何更改可能会破坏您的扩展。这不是一件好事(你把自己置于危险之中)。PDO 和 MySLQi 都可以保护您的代码免受这些风险的影响,并且还提供了额外的便利,因为如果出现任何问题(发现任何错误),您可以期望扩展能够迅速得到修复。
  3. 较新的 API 为您提供无法在 ext/mysql 中使用的功能,例如:
    • 准备好的语句(在许多常见情况下可能提供更快的性能)
    • 参数化查询(帮助您避免常见的人为错误,例如您刚刚在此处遇到的转义问题)
    • 异步查询(另一个性能优势)
    • 存储过程(一个优秀的工具,它提供了常规 SQL 查询所无法做到的优势)
    • 多查询功能
    • 交易支持(用于财务数据等关键任务应用程序)
    • SSL 支持(当您在网络上有多个数据库服务器时)
    • 运行与 MySQL 服务器交互的命令的能力,这是旧 API 无法做到的。
  4. 较新的 API 使您的代码更易于阅读和使用。您可以使用这些 API 抽象出大部分计算逻辑的 SQL 逻辑,并避免 ext/mysql 给您带来不必要的复杂性。
  5. PDO 是一个与数据库无关的 API,这意味着您只需在 PHP 中学习相同的一组函数即可与 PHP 可以支持的任何数据库进行交互。如果将来您必须在任何给定时间使用新数据库,您将不必重新学习新界面。这样可以节省您处理 PHP 代码的时间和精力。

在查看了我为您列出的一些好处之后;我挑战你看看现在不切换的好处并告诉我它们是否超过了转换的好处。我非常有信心您将无法得出这个结论,因为我什至想不出将您进一步推迟到更新的 API 的移动有什么好处。这个旧的 API 促进了不良做法,您今天在得到答案时才意识到其中之一,而且这些不良做法在多年使用 ext/mysql 的过程中已经根深蒂固。甚至我也意识到在过去 8 年左右的时间里,我从 ext/mysql 中养成了多少坏习惯。但是当我真正看到优点和缺点时(而且我在过去的两年里一直在这样做),我得出的结论是优点远远大于缺点。

作为一个简单的例子,让我们看看如果您要使用 PDO,您的代码将变得多么漂亮更易于阅读更易于调试。

/* This creates a new PDO object that holds the connection to your database */
$db = new PDO('mysql:dbname=bieren;host=localhost;charset=UTF-8', 'root', '');

/* This puts PDO into Exception Mode making it easier for you to catch errors */
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); // turn off emulation

/* Create your HTML table */
echo "<table>";

// Look how easy it is to loop over the results
foreach($db->query('SELECT * FROM brouwers', PDO::FETCH_NUM) as $i => $row) {
    echo ($i % 2 ? '<tr class="oneven">' : '<tr class="even">');
    foreach ($row as $column) {
        echo "<td>$column</td>";
    }
    echo "</tr>\n";
}

echo "</table>";

看看代码看起来多么漂亮和简洁,它实际上更容易阅读!你会同意吗?

于 2012-12-09T11:57:13.197 回答