【问题标题】:delete link not deleting any record in mysql database删除链接不删除mysql数据库中的任何记录
【发布时间】:2013-11-12 20:07:12
【问题描述】:

我正在尝试将删除链接添加到页面上显示的每一行记录。到目前为止,我已经做到了这一点,但无法弄清楚如何使链接工作,以便在单击删除链接时,只会从数据库中删除该行数据。我对 php/mysql 还很陌生,所以请原谅我的问题。到目前为止,我有以下代码..

<?php
require("common.php");

if(empty($_SESSION['user'])) 
{ 
header("Location: index.php"); 

die("Redirecting to index.php");
}

$result = $db->prepare("SELECT * FROM compliance_requirement");
$result->execute();

?>


<div class="compTable">
<table >
<tr>
<th>Compliance Name</th><th>Compliance Goal</th><th>Compliance Description</th>  <th>Options</th>
</tr>

<?php while($row = $result->fetch(PDO::FETCH_ASSOC)){ ?>
<tr>

<td style='width: 200px;'><?php echo $row['ComplianceName']; ?></td>
<td style='width: 150px;'><?php echo $row['ComplianceGoal']; ?></td>
<td style='width: 400px;'><?php echo $row['ComplianceDescription']; ?></td>

<td style ='width: 250px;' ><?php echo '<a href="delete.php?action=delete&id=delete'.$row['ComplianceName'].'">Delete</a>';?>   

</td>
</tr>
<?php } 
?> 
</table>
</div>

.. 然后在我的 delete.php 文件中,我有以下代码:

<?php
require ('common.php');

if( isset($_GET['delete']) )
{
$id = $_GET['delete'];
$sql= $db->prepare("DELETE FROM compliance_requirement WHERE ComplianceName='$id'");
$sql->execute();
echo "<meta http-equiv='refresh' content='0;url=compliance.php'>";
}
?>

当点击删除链接时,它只是出现一个空白屏幕。任何帮助深表感谢!谢谢

【问题讨论】:

  • 您是否确认错误报告已开启?
  • 请看一下SQL注入,为什么你这样做的方式很危险。
  • 您正在查看是否设置了$_GET['del']。但这不是您的 HTML 传递的参数。只有设置了该参数,您的代码才会执行​​某些操作 - 如果缺少该参数,则不会执行任何代码。
  • 将 '$id' 更改为占位符 (?) 然后通过执行传递 $id -> execute(array($id));否则可以用于sql注入
  • 不会解决您手头的问题,但您需要解决这些&lt;div class="compTable"&lt;table &gt; --- 仅此一项就会玩一些讨厌的把戏。 做: &lt;div class="compTable"&gt;&lt;table&gt;

标签: php html mysql sql pdo


【解决方案1】:

我发现在构建动态链接时最好先创建 url(您可以在测试期间回显它)。这避免了引号的混淆。然后该网址很容易在链接中使用。

<?php 
   while($row = $result->fetch(PDO::FETCH_ASSOC)){ 
     $url = "delete.php?action=delete&id=".$row['ComplianceName'];
     //echo $url;
?>
<tr>
  <td style='width: 200px;'><?php echo $row['ComplianceName']; ?></td>
  <td style='width: 150px;'><?php echo $row['ComplianceGoal']; ?></td>
  <td style='width: 400px;'><?php echo $row['ComplianceDescription']; ?></td>
  <td style ='width: 250px;' ><?php echo '<a href ='.$url.'>' ?> Delete </a>

链接示例

<td style ='width: 250px;' ><a href =delete.php?action=delete&id=name1> Delete </a>

【讨论】:

  • 感谢您的帮助。你知道我怎样才能修改 delete.php 代码,以便它实际删除和更新选定的行吗?
【解决方案2】:

您的 a href 标签应该是 [Missed quotes]

<?php echo '<a href="delete.php?action=delete&id='.$row['ComplianceName'].'">Delete</a>';?>  
<?php echo '<a href="delete.php?edit='.$row['ComplianceID'].'">Edit</a>';?> 
<?php echo '<a href="delete.php?invite='.$row['id'].'">Invite Obstacle</a>';?> 

【讨论】:

  • 还要注意语句中的 " 双引号。echo "value: $foo" vs echo 'value: $foo'; 只有第一个有效。@saint 熟悉 Firebug 等工具?
  • 这仍然行不通。要么使用大括号,如&amp;id={$row['ComplianceName']}",要么删除单引号:&amp;id=$row[ComplianceName]"。 :)
  • 感谢您的评论。我进行了建议的更改,但仍然出现空白页和消息:localhost/delete.php?action=delete&id={$row[ComplianceName]。在本地主机中。难道它根本没有连接到我的delete.php?谢谢
  • @ficuscr.. 不,我以前没有使用过萤火虫。现在刚用谷歌搜索。你会推荐什么??
  • @saint 是的!那个或用于 Chrome (F12) 的开发者工具。一旦你开始使用它,你会想知道没有它你是如何生活的。例如,在这里,检查您生成的 id/name 标记比查看页面源代码更容易。还有像 Xhr 帖子这样的东西更容易检查。确实有很多有用的功能。
猜你喜欢
  • 2010-10-04
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2010-10-14
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多