2013-06-16 2 views
0

У меня есть таблица, которая отображает данные, взятые из двух разных таблиц в mysql. В таблице есть кнопка удаления в каждой строке, которая при нажатии будет отправлять запрос на удаление, который удаляет строка и все связанные с ней данные из базы данных.Кнопка удаления не возвращает правильные значения для удаления запроса

Однако, независимо от того, какая кнопка удаления я нажимаю, всегда последняя строка в таблице, которая будет удалена, а не строка, которая кнопка удаления находится в

Мой стол.

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

линия

эхо "$ ID";

в пределах цикла foreach успешно возвращает идентификатор каждой строки правильно, поскольку каждая строка выводится на экран.

При нажатии на кнопку Удалить, линия

print_r($_POST); 

выводит все переменные в $ _POST, что дает результат

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

где х идентификатор последней строки в таблице (Например, если есть 5 строк в таблице, х = 5)

ВОПРОС Почему кнопка DELETE продолжает передавать идентификатор только последней строки, а не идентификатор строки, в которой она включена? Также, как и что мне нужно сделать, чтобы сделать так, чтобы при нажатии кнопки удаления только строка рядом с кнопкой удаления удалена?

Я смотрел на это в течение последних 2 часов и до сих пор не могу понять, где я ошибаюсь; очевидно, что код работает, поскольку строки удаляются при нажатии кнопки удаления, но это просто, что строки WRONG удаляются.

Любая помощь была бы принята с благодарностью. Thanks

+0

где остальная часть HTML (кнопки) –

+0

@Gunr Jesra что вы имеете в виду? –

ответ

1

Вы никогда не закрываете форму, поэтому используется последнее значение, присвоенное идентификатору.

Каждая кнопка Delete должна быть отдельной, образуют

Также обратите внимание, что эхо может использовать несколько строк

//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'>"; 
+0

Спасибо за помощь Тоби, сейчас она работает. Просто быстрый вопрос: почему каждая кнопка удаления должна быть отдельной формы? Вернее, почему каждая кнопка отправки должна быть в отдельной форме? у меня создалось впечатление, что у меня может быть несколько кнопок отправки в форме на PHP, поскольку у меня есть форма регистрации, которая имеет несколько полей ввода, хотя и только одна кнопка отправки. –

+0

@ Ken Я объяснил это в своем ответе –

+0

Так работают HTML-формы. Вы можете абсолютно иметь несколько кнопок отправки и несколько значений ID, но все они будут отправлены, поэтому вам нужно будет связать вашу форму отправки, на которую щелкнут ваш идентификатор, вам нужны уникальные идентификаторы. Намного легче иметь отдельные формы. –

0

Если я правильно понял, вы будете иметь n (n число записей) декларации на скрытом поле id. Вероятно, это займет только последний. Поэтому, чтобы добиться этой работы, вам нужно убедиться, что выбрано правильное скрытое поле.

Либо добавьте это в функцию удаления, создайте поля с введенным идентификатором.

1

кнопку Отправить посылает всю форму, а не только ближайший вход. Таким образом, вы отправляете каждый идентификатор из своего стола и значение нажатой кнопки.Поскольку каждый скрытый ввод имеет какое-то имя, переменная в $_POST перезаписывается и равна последнему значению.

Вы должны либо сделать отдельные формы для каждой строки, чтобы убедиться, что только лишь один id будет посылать (что может сделать ваш HTML больше) или уйти от скрытого ввода и изменить удаление имени кнопки включить нужный ID:

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

с этим, ваше сообщение будет выглядеть следующим образом:

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

только значение от нажатой кнопки будет отправить. Вы можете легко получить доступ к этому идентификатору в PHP:

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

Если вы не обеспокоены пользователями с самой версией IE, вы можете использовать button элемент вместо представить:

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

С этим, идентификатором будет доступный просто $_POST['deluser'].

0

вы иметь одну форму для всех идентификаторов

<?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> 
0

Try для удаления в соответствии с выбранным идентификатором, который будет решить вашу проблему. Например, если вы хотите удалить sub2, он будет иметь id в db. Например: -

<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> 
Смежные вопросы