嗨,我似乎无法弄清楚这一点。我有一个表,我想在这里添加一个删除功能是我的代码
<?php
$delete = "delete";
$user = $_SESSION['hlbank_user']['user_id'];
$sql = "SELECT * FROM tbl_complains where user_id='".$user."' ORDER BY create_date asc ";
$result = dbQuery($sql);
while($row = dbFetchAssoc($result)){
if($row['eng_id']==0){
$engid= 'N/A';
}else{
$sqls = "SELECT * FROM tbl_engineer where eid='".$row['eng_id']."'";
$results = dbQuery($sqls);
$rows = dbFetchAssoc($results);
$engid= $rows['ename'];
}
echo '<tr class="row1" style="height:25px;">
<td align="center">'.$row['acc_no'].'</td>
<td align="center">'.$row['comp_name'].'</td>
<td align="center">'.$row['comp_desc'].'</td>
<td align="center">'.$row['status'].'</td>
<td align="center">'.'<a href='delete.php?id=".$row['user_id']."'>'.'Delete'.'</a>'.'</td>';
//The problem is in this line. When ever i try putting a href the whole table will not show.
echo '</tr>';
}
?>
这是我的delete.php
<?php
if(isset($_GET['user_id'])) {
$id = $_GET['user_id'];
$con = new mysqli('localhost', 'root', '', 'db_hlbank');
$sql = 'DELETE FROM tbl_complains WHERE user_id = ?';
$delete = $con->prepare($sql);
$delete->bind_param('i', $id);
$delete->execute();
if($delete->affected_rows > 0) {
header('Location: index.php');
}
}
?>
另一个问题: 有没有办法在不调用delete.php的情况下集成它?
非常感谢!
答案 0 :(得分:2)
这应该有效:
echo '<tr class="row1" style="height:25px;">
<td align="center">'.$row['acc_no'].'</td>
<td align="center">'.$row['comp_name'].'</td>
<td align="center">'.$row['comp_desc'].'</td>
<td align="center">'.$row['status'].'</td>
<td align="center">'.'<a href="delete.php?id='.$row['user_id'].'">'.'Delete'.'</a>'.'</td>';
答案 1 :(得分:1)
你缺少引号。
'<td align="center"><a href="delete.php?id='.$row['user_id'].'">Delete</a></td>';
如果您需要能够从一个页面删除多个用户,我建议您使用delete.php。但是,您可以使用jQuery AJAX
来处理请求,而无需重新加载页面。
答案 2 :(得分:1)
一些不必要的引号+点。如下所示: -
<td align="center"><a href="delete.php?id='.$row['user_id'].'">Delete</a></td>';
所以代码将是: -
echo '<tr class="row1" style="height:25px;">
<td align="center">'.$row['acc_no'].'</td>
<td align="center">'.$row['comp_name'].'</td>
<td align="center">'.$row['comp_desc'].'</td>
<td align="center">'.$row['status'].'</td>
<td align="center"><a href="delete.php?id='.$row['user_id'].'">Delete</a></td>';
echo '</tr>';
答案 3 :(得分:1)
引号存在问题
替换
<td align="center">'.'<a href='delete.php?id=".$row['user_id']."'>'.'Delete'.'</a>'.'</td>';
用
<td align="center">'.'<a href="delete.php?id='.$row['user_id'].'">Delete</a></td>';
这肯定会奏效。
答案 4 :(得分:1)
To avoid getting into a mess with quotes in future,you can write something like:
<?php foreach($results as $result): ?>
//say you have stored the results in $results as an associative array after executing a query
<tr> //looping an entire row
<td align=""><?=$result['name']?></td>
<td align=""><?=$result['email']?></td>
.
.
.
<td align=""><a href="delete.php?id=<?=$result['id']?>">Delete</a></td>
</tr> //end of row
<?php endforeach; ?> //end of loop
答案 5 :(得分:0)
更改此行
<td align="center">'.'<a href='delete.php?id=".$row['user_id']."'>'.'Delete'.'</a>'.'</td>';
到
<td align="center"><a href="delete.php?id='.$row['user_id'].'">Delete</a></td>';
答案 6 :(得分:0)
如果您查看帖子中代码的语法高亮显示,您应该能够发现错误。
那说你应该阅读一些内容,以便大大提高代码的质量。
首先是SQL中的JOIN
在这种情况下,您希望在tbl_engineer
表上对您已设置的外键关系执行INNER JOIN。这将使查询看起来像这样:
SELECT [fields] FROM companies AS c
INNER JOIN engineers AS e ON e.id = c.engineer_id
ORDER BY c.date
这将有助于您大大减少运行的查询数量。从1 + x,其中x是记录数,到1.如果您有几千条记录,则脚本的资源消耗会迅速增加。
第二件事是你在这里遇到了一些安全问题。即通过会话数据进行SQL注入,因为此处没有使用预处理语句;并且通过表格进行XSS攻击,因为您尚未使用htmlspecialchars()
来阻止用户将HTML注入您的来源。
第三件事是您应该在die()
重定向后始终使用header()
。否则PHP脚本将继续运行,并在重定向后执行大部分/全部代码。
第四个问题是,你的缩进可以用一些清理工作。确保一致且正确地缩进。这将有助于您和其他人稍后阅读您的代码,并减少发生错误的可能性。
此外,如果没有“delete.php”页面,则无法将删除“合并”到脚本中。这是因为HTTP通信的工作原理,因为您需要在服务器上有一个接收和处理用户请求的页面。
您最接近的是将删除代码移动到从数据库中提取数据的脚本中。如果这样做,那么您需要在URL中添加第二个参数,以告诉您的脚本运行该代码分支。