【问题标题】:Button to delete table entry用于删除表格条目的按钮
【发布时间】:2017-12-11 20:10:30
【问题描述】:

我想要一个按钮来删除它旁边的表格条目。但我来不及了。我似乎在这里输入错误是我的尝试:

<td><a href="delete-quote.php?id=<?php echo $row['id'];?>"><button class="btn-danger-dark">Delete</button></a></td>

但它似乎不起作用。我只收到 ELSE 错误消息

我尝试了一些小的更改,但没有任何影响。我很确定这是我缺少的一些小东西。

我的 delete-quote.php 代码:

<?php

$id = $_GET['id'];
//Connect DB
// on success delete : redirect the page to original page
$dbname = "siyakhat_ibroker";
$conn = mysqli_connect("localhost", "siyakhat_root", "*****", $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

// sql to delete a record
$sql = "DELETE FROM prerequest WHERE id = $id"; 

if (mysqli_query($conn, $sql)) {
mysqli_close($conn);
header('Location: manage-quotes.php'); 
exit;
} else {
echo "Error deleting record";
}
?>

更新

我的 dbconnect.php

<?php

$mysql_hostname ="localhost";
$mysql_user ="siyakhat_root";
$mysql_password ="****";
$mysql_database ="siyakhat_ibroker";
$prefix = "";
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");
mysql_select_db($mysql_database, $bd) or die("Could not select database");

?>

【问题讨论】:

  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的mysqli API 的产物,不应在新代码中使用。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 您还需要避免使用 GET 进行删除请求。一些浏览器插件可以预取这样的链接,从而导致意外结果,例如删除整个数据库。
  • 为什么你的&lt;a&gt;里面有一个&lt;button&gt;
  • 尝试将 ?id=* 作为获取参数传入 url 查询字符串。

标签: php html mysql mysqli


【解决方案1】:

您是否尝试过创建数据库连接?

dbCon.php

define('HOST','localhost');
define('USER','root');
define('PASS','your_pass_here');
define('DB','siyakhat_ibroker');
$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect to the DB');

那么你的 delete-quote.php 应该是这样的:

 include(dbCon.php);
 $id = $_GET['id'];
 $action = $_GET['action'];
 $tableName = 'prerequest';
if($action=='delete'){
    //deleting row
    $sql = "DELETE FROM $tableName WHERE id='$id'";
    $r = mysqli_query($con,$sql);

    if($r){
        $status="success";
    //assuming this file is in your root folder
    header('Location: manage-quotes.php');
    }else{
        $status="error ".mysqli_error($con) . ": " . mysqli_error($con);
    }
    echo $status;

}mysqli_close($con);

然后调用它:delete-quote.php?id=1&action=delete

我建议您使用 Ajax 调用等动态用法,而不是按钮中的静态用法,方法是使用 jQuery 创建 onClick 事件并使用 ajax 调用动态删除行。

希望它有效。 干杯

【讨论】:

  • 您是否启用了 sqli 扩展?你可以试试 并检查您是否已启用它?请分享您的错误日志。
  • 我已经用 mysqli_error 更新了脚本来查看错误
  • 我想我可能做错了按钮。 &lt;a href="delete-quote.php?id=1&amp;action=delete&gt;"&gt;&lt;button class="btn-danger-dark"&gt;Delete&lt;/button&gt;&lt;/a&gt;
  • 是的,你有一个未关闭的 > 删除后.....请使用这个
  • 谢谢您,先生,请查看我的 dbconnection.php 上方,看看这是否导致您的 delete-quote.php 出现问题
【解决方案2】:

从 delete-quote.php 替换给定的“$sql”:

$sql = "DELETE FROM prerequest WHERE id = '".$id."'"; 

【讨论】:

    【解决方案3】:

    只需使用此解决方案

    <?php
    
     $servername = "localhost";
     $username = "siyakhat_root";
     $password = "";
     $dbname = "siyakhat_ibroker";
    
    
     $id = isset($_GET['id']) ? $_GET['id'] : '';
    
    
     // Create connection
     $conn = new mysqli($servername, $username, $password, $dbname);
     // Check connection
     if ($conn->connect_error) {
       die("Connection failed: " . $conn->connect_error);
      }
    
      // sql to delete a record
        $sql = "DELETE FROM prerequest WHERE id = $id";
    
       if ($conn->query($sql)) {
           mysqli_close($conn);
           header('Location: manage-quotes.php');
          exit;
        } else {
            echo "Error deleting record";
        }
      ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多