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" />

そしてdelet.phpで

$id=$_GET['id'];

SQLステートメントに $id を入れます。

于 2013-06-17T10:04:11.477 に答える
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 に答える
0

この行で name を渡せません:

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

属性に何か ( <?php echo $contact['name']; ?>)が必要です。value

mysql_*ところで、非推奨の関数を使用しないでください。代わりにPDOまたはを使用してください。mysqli_*

于 2013-06-17T10:04:10.723 に答える