我得到了这段代码,可以在网页上显示表格。该表的内容与数据库链接。因此,我从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].'"');}
}
我的代码的最后一条规则说:WHERE
brouwers.brouwernr = $row[0]
,但这不是要删除的正确行。我还将在html中显示我现在所获得的图像,以便您可以了解它的作用:
最佳答案
我相信,您原来的问题的答案是,您需要使用$ _POST ['delete']作为要删除的行的ID,@ vlcekmi3似乎已经很好地解决了这一问题。
但是,我相信我可以为您的原始问题增加一些附加值,并希望说服您改变对使用旧ext / mysql扩展(现在已弃用并且长期以来不鼓励使用)的想法。我注意到您表示您现在不想使用PDO。我的想法错了,现在是时候停止使用旧的mysql API并开始使用更新的API,例如PDO或MySQLi,是完美的时机。我将尝试为您提供一些为什么应该使用较新的API的理由,而不是尝试给您不使用旧API的理由。
您当前使用的API(mysql_*
函数)已经使用了15年。我们大多数人都不拥有那么老的汽车。您是否像对待运输方式一样重视代码?该扩展是在MySQL 3.x版本中引入的,此后一直与该版本的MySQL向后兼容。由于这种无关紧要的向后兼容性限制,API仍然缺乏支持数据库的所有较新功能的功能,并且对于当今网络上的现代应用程序开发而言,许多功能都是无价的。
该API不再从MySQL社区获得任何维护或支持。这意味着您不应期望此扩展中的任何内容在过去的几年中会发生变化。其中包括错误修复,潜在的安全补丁,以及MySQL的任何更改都可能破坏您多年来的扩展。那不是一件好事(您将自己置于危险之中)。 PDO和MySLQi都使您的代码免受这些风险的侵害,并且还提供了更多的便利,因为如果出现任何问题(发现任何错误),您可以期望扩展得到迅速修复。
较新的API为您提供了无法在ext / mysql中使用的功能,例如:
准备好的语句(在许多常见情况下可以提供更快的性能)
参数化查询(可帮助您避免常见的人为错误,例如您在此处遇到的转义问题)
异步查询(另一个性能优势)
存储过程(一种出色的工具,具有常规SQL查询无法提供的优势)
多种查询功能
交易支持(用于关键任务应用,例如财务数据)
SSL支持(当您在网络上有多个数据库服务器时)
运行与MySQL服务器接口的命令的能力,而旧API则无法做到。
较新的API使您的代码更易于阅读和使用。您可以使用这些API抽象化您的SQL逻辑中的大部分计算逻辑,并避免ext / mysql造成不必要的复杂性。
PDO是与数据库无关的API,这意味着您只需学习一次PHP中的相同功能集即可与PHP支持的任何数据库进行交互。如果将来您必须在任何给定的时间使用新数据库,则无需重新学习新界面。这样可以节省您的时间和精力来处理PHP代码。
在查看了其中一些好处之后,我为您列出了这些好处;我向您挑战,让我们看看现在不进行切换的好处,并告诉我它们是否胜过切换的好处。我非常有信心您将无法得出这个结论,因为我什至没有想到将您的迁移推迟到新的API的任何好处。这个旧的API提倡不良行为,当您获得答案时,您今天才意识到其中的一种,而不仅仅是这些,因为多年使用ext / mysql时,这些不良行为已经根深蒂固。甚至我也意识到在过去的八年左右的时间里,我从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>";
只需看一下代码看起来更好又更简洁,它实际上更容易阅读!你同意吗?
关于php - 从数据库中删除具有图像和作为主键的值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13786073/