【问题标题】:How to add a delete button to a PHP form that will delete a row from a MySQL table将删除按钮添加到 PHP 结果表
【发布时间】:2021-09-15 15:07:42
【问题描述】:

我已将 MySQL 表的结果输出到 HTML 表。在最后一列中,我想添加一个删除选项,该选项调用另一个表单并删除用户。我似乎无法让它工作。

这是我的结果页面代码:

<?php

    $contacts = mysql_query("
        SELECT * FROM contacts ORDER BY ID ASC") or die( mysql_error() );

    // If results
    if( mysql_num_rows( $contacts ) > 0 )
    ?>

    <table id="contact-list">
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Telephone</th>
                <th>Address</th>
  <th>Delete</th>
            </tr>
        </thead>
        <tbody>

        <?php while( $contact = mysql_fetch_array( $contacts ) ) : ?>



            <tr>
                <td class="contact-name"><?php echo $contact['name']; ?></td>
                <td class="contact-email"><?php echo $contact['email']; ?></td>
                <td class="contact-telephone"><?php echo $contact['telephone']; ?></td>
                <td class="contact-address"><?php echo $contact['address']; ?></td>
                <td class="contact-delete"><form action='delete.php' method="post">
<input type="hidden" name="name" value="">
<input type="submit" name="submit" value="Delete">
</form></td>                
            </tr>

        <?php endwhile; ?>

        </tbody>
    </table>

而且,这是我的 delete.php 脚本

<?php

//Define the query
$query = "DELETE FROM contacts WHERE name={$_POST['name']} LIMIT 1";

//sends the query to delete the entry
mysql_query ($query);

if (mysql_affected_rows() == 1) { 
//if it updated
?>

            <strong>Contact Has Been Deleted</strong><br /><br />

<?php
 } else { 
//if it failed
?>

            <strong>Deletion Failed</strong><br /><br />


<?php
} 
?>

很确定我只是错过了一些东西,但我不知道那是什么:(

【问题讨论】:

标签: php mysql html-table sql-delete


【解决方案1】:

您必须在删除链接中传递变量。您必须在隐藏字段中传递 &lt;?php echo $contact['name']; ?&gt; 名称值或在 URL 中传递此值

替换

<td class="contact-delete">
      <form action='delete.php' method="post">
      <input type="hidden" name="name" value="">
      <input type="submit" name="submit" value="Delete">
      </form>
</td>

<td class="contact-delete">
    <form action='delete.php?name="<?php echo $contact['name']; ?>"' method="post">
        <input type="hidden" name="name" value="<?php echo $contact['name']; ?>">
        <input type="submit" name="submit" value="Delete">
    </form>
</td>

【讨论】:

  • 哦,但是我加入了其他 cmets 并将 'name' 更改为 'id' :)
  • 为什么表单动作变了?添加隐藏的输入标签还不够吗? (当 PHP 在同一页面上时,我使用了它)。将其发送到另一个页面时会有所不同吗? @devang-rathod
【解决方案2】:

使用 JavaScript

<input name="Submit2" type="button" class="button" onclick="javascript:location.href='delete.php?id=<?php echo $your_id;?>';" value="&laquo; Back" />

在delet.php中

$id=$_GET['id'];

并把 $id 放在你的 sql 语句中。

【讨论】:

    【解决方案3】:

    您在此行中缺少传递名称:

    <input type="hidden" name="name" value="">
    

    您需要在 value 属性中包含一些内容 (&lt;?php echo $contact['name']; ?&gt;)。

    顺便说一句,不要使用已弃用的 mysql_* 函数,请改用 PDOmysqli_*

    【讨论】:

      【解决方案4】:
      <input type="hidden" name="name" value="">
      

      您缺少一个值,该值将在您的删除文件中被这一行拾取。

      $query = "DELETE FROM contacts WHERE name={$_POST['name']} LIMIT 1";
      

      现在它没有收到任何东西,这就是它不起作用的原因。

      所以给它添加一个值,它就会起作用。示例:

      <input type="hidden" name="name" value="<?php echo $contact['name']; ?>">
      

      【讨论】:

        【解决方案5】:

        一开始你不能这样写代码,代码对SQL injection没有保护。

        1) 尝试使用主 ID 而不是使用名称(如果 2 人具有相同的名称会怎样?)。

        因此,您可以创建一个隐藏字段来了解您正在与什么人打交道。

        <input type="hidden" name="contact_id" value="<?php $contact['contact_id']; ?>">
        

        2)清理变量以避免攻击:

        <?php $contact_id = isset($_POST['contact_id'])?intval($_POST['contact_id']):0;
        
        // proceed with the query
        if($contact_id>0) { $query = "DELETE FROM contacts WHERE contact_id = '$contact_id'";
        
        }
        
        // redirect to the main table with header("location: main.php");
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-26
          • 2023-01-20
          • 1970-01-01
          • 2022-11-18
          • 1970-01-01
          • 2017-08-17
          • 1970-01-01
          • 2018-01-27
          相关资源
          最近更新 更多