2013-06-16 4 views
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> 

라인

에코 "$ ID가";

foreach 루프에서 각 행이 화면에 출력 될 때 각 행의 id를 올바르게 반환합니다. 삭제 버튼을 눌렀을 때

라인

print_r($_POST); 

출력 결과를 제공 $ _POST, 모든 변수

Array ([id] => x [deluser] => Delete) 
X 테이블의 마지막 행의 ID이다

(표 5 행,이 경우 예 X = 5)

질문 012,DELETE 버튼은 마지막 행의 ID 만 전달하고 행의 ID는 전달하지 않는 이유는 무엇입니까? 또한 삭제 버튼을 누를 때 어떻게해야합니까? 삭제 버튼 옆의 행이 삭제 되었습니까?

나는 지난 2 시간 동안 이것을보고 있었고 아직도 내가 틀린 곳을 알아낼 수 없다. delete buton을 누를 때 행이 삭제됨에 따라 코드가 분명히 작동하지만, 잘못된 행이 삭제되는 것입니다.

도움을 주시면 감사하겠습니다. 감사합니다

+0

나머지는 html (버튼)입니다. –

+0

@Gunr Jesra 무엇을 의미합니까? –

답변

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

도와 주셔서 감사합니다. Toby, 지금 작동 중입니다. 그래도 간단한 질문이지만, 왜 각 삭제 버튼은 별도의 양식이어야합니까? 아니면 각 제출 버튼을 각각 별도의 양식으로 만들어야하는 이유는 무엇입니까? 나는 여러 입력 필드가있는 등록 양식을 가지고 있기 때문에 PHP의 폼에 여러 제출 버튼을 가질 수 있다는 인상을 받고있었습니다. –

+0

@Ken 나는 내 대답에 그것을 설명했다 –

+0

그건 HTML 양식 작동 방식이야. 절대적으로 여러 개의 제출 버튼과 여러 개의 ID 값을 가질 수 있지만 모두 제출되어 ID로 클릭 한 제출 양식을 링크해야하므로 고유 한 ID가 필요합니다. 별도의 양식을 사용하는 것이 훨씬 쉽습니다. –

0

내가 올바르게 이해하면 숨겨진 필드 ID에 n (n 레코드 수)의 선언이 생깁니다. 아마 마지막 걸릴 것입니다. 따라서이 작업을 수행하려면 올바른 숨김 필드가 선택되어 있는지 확인해야합니다.

이 기능을 삭제 기능에 추가합니다.이 필드는 ID가없는 번호로 작성됩니다.

1

을 사용할 수 있습니다 유의하시기 바랍니다 별도의 양식을

을 할 필요가있다. 그래서 당신은 테이블에있는 모든 이드와 누른 버튼의 가치를 보냅니다.모든 숨겨진 입력에는 이름이 있기 때문에 $_POST의 변수는 덮어 쓰여지고 마지막 값과 같습니다.

당신은 원하는 ID를 포함하는 (즉 당신의 HTML이 더 큰 만들 수 있습니다), 또는 숨겨진 입력에서 사직하고 삭제 버튼 이름을 변경 오직 하나의 id 확실 전송되어 있는지 확인하기 위해 각 행에 대해 별도의 양식을 하나 가지고 :

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

을 누르면 버튼에서 불과 값이 전송됩니다 :이

echo "<input type='submit' name='deluser[$id]' value='Delete'>"; 
이 게시물처럼 보일 것이다. 쉽게 PHP에서이 ID에 액세스 할 수 있습니다

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

당신은 매우 IE 버전과 사용자에 대한 관심이없는 경우, 귀하가 제출하는 대신 button 요소를 사용할 수 있습니다 :이

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

을, ID가 될 것입니다 간단히 $_POST['deluser']에 액세스 할 수 있습니다.

0

당신이 문제를 해결할 수 선택 ID에 따라 삭제할 수있는 모든 ID의

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

한번에 하나 개의 형태를 갖는다. 예를 들어, sub2를 삭제하려는 경우 ID는 db입니다. 예 : -

관련 문제