3

我已将 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
} 
?>

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

4

5 回答 5

4

您必须在删除链接中传递变量。您必须<?php echo $contact['name']; ?>在隐藏字段中传递名称值或将此值传递给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>
于 2013-06-17T10:11:48.167 回答
2

使用 javascript

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

并在 delete.php

$id=$_GET['id'];

并将 $id 放入您的 sql 语句中。

于 2013-06-17T10:04:11.477 回答
0

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

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

你需要在属性中有一些东西( <?php echo $contact['name']; ?>) 。value

顺便说一句,不要使用不推荐使用mysql_*的功能,使用PDOmysqli_*代替。

于 2013-06-17T10:04:10.723 回答
0
<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']; ?>">
于 2013-06-17T10:10:24.127 回答
0

起初,你不能这样写代码,代码没有防止SQL 注入的保护。

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");

?>
于 2013-06-17T10:12:58.080 回答