0

mysql の 2 つの異なるテーブルから抽出されたデータを表示するテーブルがあります。テーブルには、各行に削除ボタンがあり、押すと、行を削除する削除クエリを実行し、データベースからすべての関連データを送信します。

ただし、どの削除ボタンをクリックしても、削除されるのは常にテーブルの最後の行であり、削除ボタンがある行ではありません。

私のテーブル:

-------------------------------------------
|Username|Password|Branch Name|Branch Info|
----------------------------------------------------
|Sub1    |Pass1   |branch1    |1st branch |DELETE  |
----------------------------------------------------
|Sub2    |Pass2   |branch2    |2nd branch |DELETE  |<---this button is pressed
----------------------------------------------------
|Sub3    |Pass3   |branch3    |3rd branch |DELETE  |
----------------------------------------------------
|Sub4    |Pass4   |branch4    |4th branch |DELETE  |
----------------------------------------------------
|Sub5    |Pass5   |branch5    |5th branch |DELETE  |<---this row is deleted.
----------------------------------------------------

私のコード:

<?PHP
session_start();

if(@$_SESSION['Auth']!=="Yes" AND @$_SESSION['Type']!=="Admin")
{
echo"You are not authorised to view this page.Please click <a href='Login.php'>here</a> to login.";
exit();
}
?>

<?PHP

if(@$_POST['deluser']=="Delete")
{
include("cxn.inc");
print_r($_POST);
$id="$_POST[id]";
echo"$id";
if(empty($_POST["id"]))
echo"yep";
$deluser="DELETE FROM SubUsers WHERE SubUsers.id='$id'";
$delquery=mysqli_query($cxn,$deluser) or die (mysqli_error($cxn));
$delsuccess="Deletion successful";
}
>

<html>
<head><link rel="stylesheet" type="text/css" href="style.css" /></head>
<body>


<?PHP
include("cxn.inc");
//include("AdminNav.php");
$viewuser="SELECT SubUsers.Id,Username,Password,Name,Info FROM SubUsers,Branch WHERE SubUsers.id=Branch.id AND SubUsers.Userid='$_SESSION[UserId]'";
$runuser=mysqli_query($cxn,$viewuser) or die(mysqli_error($cxn));
$rows=array();
while($row=mysqli_fetch_assoc($runuser))
$rows[]=$row;
echo"<form action='$_SERVER[PHP_SELF]' name='DelUser' method='POST' >";
echo"<table border='1'>";
echo"<tr>";
echo"<td>";
echo"Username";
echo"</td>";
echo"<td>";
echo"Password";
echo"</td>";
echo"<td>";
echo"Branch Name";
echo"</td>";
echo"<td>";
echo"Branch Info";
echo"</td>";
echo"</tr>";
foreach($rows as $row)
{
$id=$row['Id'];
echo"$id";
echo"<tr>";
echo"<td>";
echo"$row[Username]";
echo"</td>";
echo"<td>";
echo"$row[Password]";
echo"</td>";
echo"<td>";
echo"$row[Name]";
echo"</td>";
echo"<td>";
echo"$row[Info]";
echo"</td>";
echo"<td>";
echo"<input type='hidden' name='id' value='$id' >";
echo"<input type='Submit' name='deluser' value='Delete' >";
echo"</td>";
echo"</tr>";
}
echo"<tr>";
echo"<td colspan='5'>";
if(isset($delsuccess))
{echo"$delsuccess";}

echo"</td>";
echo"</tr>";
echo"</table>";
echo"</form>";
?>
</body>
</html>

この線

echo "$id";

foreach ループの下では、各行が画面に出力されるため、各行の ID が正しく返されます。

DELETE ボタンを押すと、行が

print_r($_POST);

すべての変数を $_POST に出力し、結果が得られます

Array ( [id] => x [deluser] => Delete ) 

ここで、x はテーブルの最後の行の ID です (例: テーブルに 5 行ある場合、x=5)

質問 DELETE ボタンが最後の行の ID のみを渡し続け、それが存在する行の ID を渡さないのはなぜですか?また、削除ボタンが押されたときに、削除ボタンの横の行は削除されますか?

私は過去 2 時間これを見てきましたが、どこが間違っているのかまだわかりません。削除ボタンが押されたときに行が削除されているため、コードは明らかに機能していますが、間違った行が削除されているだけです。

どんな助けでも大歓迎です。ありがとう

4

5 に答える 5

1

送信ボタンは、最も近い入力だけでなく、フォーム全体を送信します。したがって、テーブルからすべてのIDと押されたボタンの値を送信しています。すべての非表示の入力には何らかの名前があるため、変数 in$_POSTは上書きされ、最後の値と等しくなります。

行ごとに個別のフォームを作成して、1つだけidが送信されるようにするか(HTMLが大きくなる可能性があります)、非表示の入力をやめて、削除ボタンの名前を変更して目的のIDを含める必要があります。

echo "<input type='submit' name='deluser[$id]' value='Delete'>";

これにより、投稿は次のようになります。

$_POST['deluser'] = array(7 => 'Delete');

押されたボタンの値のみが送信されます。この ID には、php で簡単にアクセスできます。

if (isset($_POST['deluser'])) {
    $id_to_delete = key($_POST['deluser']);
}

非常に IE のバージョンのユーザーを気にしない場合はbutton、submit の代わりに element を使用できます。

echo "<button type='submit' name='deluser' value='$id'>Delete</button>";

これにより、 id は で簡単にアクセスできるようになります$_POST['deluser']

于 2013-06-16T10:19:03.803 に答える
1

フォームを閉じることはないため、ID に割り当てられた最後の値が使用されます。

各削除ボタンは個別のフォームである必要があります

また、エコーは複数の行を使用できることに注意してください

//Remove start of form from here.
echo"<table border='1'>";
echo"<tr>";
echo"<td>";
echo"Username";
echo"</td>";
echo"<td>";
echo"Password";
echo"</td>";
echo"<td>";
echo"Branch Name";
echo"</td>";
echo"<td>";
echo"Branch Info";
echo"</td>";
echo"</tr>";
foreach($rows as $row)
{
$id=$row['Id'];
echo"$id";
echo"<tr>";
echo"<td>";
echo"$row[Username]";
echo"</td>";
echo"<td>";
echo"$row[Password]";
echo"</td>";
echo"<td>";
echo"$row[Name]";
echo"</td>";
echo"<td>";
echo"$row[Info]";
echo"</td>";
echo"<td>";
    //form isnt needed till here.
    echo"<form action='$_SERVER[PHP_SELF]' name='DelUser' method='POST' >";
echo"<input type='hidden' name='id' value='$id' >";
    //Line below has changed.
echo"<input type='Submit' name='deluser' value='Delete' ></form>";
echo"</td>";
echo"</tr>";
}
echo"<tr>";
echo"<td colspan='5'>";
于 2013-06-16T10:11:20.210 に答える
0

すべてのIDに対して1つのフォームがあります

<?PHP
include("cxn.inc");
//include("AdminNav.php");

?>


<table border='1'>
<tr>
<td>Username</td>
<td>Password</td>
<td>Branch Name</td>
<td>Branch Info</td>
</tr>


<?php
$viewuser="SELECT SubUsers.Id,Username,Password,Name,Info FROM SubUsers,Branch WHERE SubUsers.id=Branch.id AND SubUsers.Userid='$_SESSION[UserId]'";
$runuser=mysqli_query($cxn,$viewuser) or die(mysqli_error($cxn));
while($row=mysqli_fetch_assoc($runuser)){
$id=$row['Id'];

echo"<form action='$_SERVER[PHP_SELF]' name='DelUser' method='POST' >";
echo"<tr>";
echo"<td>";
echo"$row[Username]";
echo"</td>";
echo"<td>";
echo"$row[Password]";
echo"</td>";
echo"<td>";
echo"$row[Name]";
echo"</td>";
echo"<td>";
echo"$row[Info]";
echo"</td>";
echo"<td>";
echo"<input type='hidden' name='id' value='$id' >";
echo"<input type='Submit' name='deluser' value='Delete' >";
echo"</td>";
echo"</tr>";
echo"</form>";
echo"<tr>";
echo"<td colspan='5'>";
if(isset($delsuccess))
{echo"$delsuccess";}
echo"</td>";
echo"</tr>";
}
?>
</table>
于 2013-06-16T10:34:33.200 に答える
0

選択した ID に従って削除を試みてください。これにより、問題が解決されます。たとえば、sub2 を削除する場合、db に id があります。例えば:-

<form name="form3" id="form3" action="delete_xyz.php" method="get" onsubmit="return check();">
      <input type="image" src="../images/delete.png" type="submit" id="submit" value="Delete"  title="Deletes Selected Product" style="cursor:pointer" />
      <input type="hidden" name="delete" id="delete"  value="<?php echo $row['Complain_id']; ?>"/>
</form>
于 2016-04-27T05:38:51.237 に答える
0

私が正しく理解していれば、隠しフィールドIDにn(nはレコード数)の宣言があります。これはおそらく最後のものだけを取ります。したがって、これを機能させるには、正しい非表示フィールドが選択されていることを確認する必要があります。

これを、ID が組み込まれた作成フィールドの削除機能に追加します。

于 2013-06-16T10:08:11.527 に答える