2016-09-19 50 views
1

嗨,我似乎无法弄清楚这一点。我有一个表,我想在这里补充删除功能是我的代码href不工作我的回声php

<?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'); 
} 
} 

?> 

另一个问题: 是否有这个不调用删除整合的方式。 PHP的?

非常感谢!

+2

问题在报价中。 –

+0

'Delete';' –

+0

嗨SIr @anant!感谢您的评论,所有的东西都能正常工作! –

回答

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>'; 
1

你缺少名言。

'<td align="center"><a href="delete.php?id='.$row['user_id'].'">Delete</a></td>'; 

如果你需要能够从一个页面删除多个用户,我建议你使用delete.php。但是,您可以使用jQuery AJAX来处理请求,而无需重新加载页面。

+0

很好的复制和粘贴 –

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>'; 
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

有问题与报价

更换

<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>'; 

这肯定会起作用。

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注入源代码。

第三件事是,您应该总是在header()重定向后使用die()。否则PHP脚本将继续运行,并在重定向后执行大部分/全部代码。

第四个小问题是,您的缩进可能会进行一些清理。确保你缩进一致,并妥善。这将帮助您和其他人稍后阅读您的代码,并减少发生错误的可能性。

另外,如果没有“delete.php”页面,您不能“删除”到脚本中。这是因为HTTP通信的工作原理,因为您需要在接收并处理用户请求的服务器上拥有一个页面。
您可以最接近的是将删除代码移入从数据库中提取数据的脚本。如果你这样做,那么你需要在URL中添加第二个参数来告诉你的脚本运行该代码分支。

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