2014-10-31 6 views
2

운영자가 제품을 삭제하려고 할 때마다 MYSQL 데이터베이스에서 제품 목록을 가져오고 각 제품에 대해 삭제 버튼을 사용하고 있습니다.PHP Mysql delete 쿼리가 제대로 작동하지 않습니다.

문제는 목록의 모든 제품에서 삭제 버튼을 누를 때마다 첫 번째 요소가 삭제된다는 것입니다.

아래 코드에 어떤 문제가 있습니까?

Products 페이지 :

<?php 
$link=mysqli_connect("localhost","root","","smartcart"); 
$prod="select * from products"; 
$rw=mysqli_query($link,$prod) or die(mysqli_errno()."in query $prod"); 
$count=1; 

while($row=mysqli_fetch_assoc($rw)) 
{ 
    echo "<tr>"; 
    echo "<td>".$count."</td>"; 
    echo "<td>".$row['prod_id']."</td>"; 
    echo "<td>".$row['prod_name']."</td>"; 
    echo "<td>".$row['prod_price']."</td>"; 
    echo "<td><form action='delete_prod.php' id='delete' method='get'>"; 
    echo "<input type='hidden' name='prod_id' value='".$row['prod_id']."' />"; 
    echo "<button type='submit' form = 'delete' class='btn btn-default' name='delete'>Delete</button>"; 
    echo "</form></td>"; 
    $count=$count+1;       
} 

mysqli_free_result($rw); 
?> 

delete_prod.php :

<?php 
if(isset($_GET['delete'])) 
{ 
    include "connection.php"; 
    $prod_id=$_REQUEST['prod_id']; 
     $del="delete from products where prod_id=$prod_id"; 
    if (mysqli_query($link,$del)) 
    { 
     echo "Successfully deleted"; 
     unset($_POST['delete']); 
    } 
    else 
    { 
     echo "Delete operation Failed"; 
    } 
    header('location:show_db.php'); 
} 
?> 

는 내가 정말 간단한 점을 놓치고 있다고 생각하지만, 그것은 무엇을 얻을 수 없습니다입니다.

+0

난 정말이 인터넷에서 코드가 아닙니다 희망 -이 일이 기다리고 보안 사고입니다! '$ _GET','$ _POST' 또는'$ _REQUEST'의 입력을 직접 사용하지 마십시오! 그것이 확실하다고해도, 먼저 청소하십시오. – hexblot

+0

delete_prod.php에 $ _REQUEST [ 'prod_id']가 표시됩니까? 그리고 당신에게 오류가 있습니까? –

+0

로컬 컴퓨터에서 사용하기로되어 있습니다. 인터넷에서 절대로. – user3736335

답변

3

id="delete"을 설정했기 때문에 가능했을 가능성이 큽니다. 일반적으로 id 속성 값은 중복되지 않습니다.

echo "<td><form action='delete_prod.php' id='delete' method='get'>"; 
echo "<button type='submit' form = 'delete' class='btn btn-default' name='delete'>Delete</button>"; 

제출 버튼은 첫 번째 ID를 가져와 첫 번째 숨겨진 입력을받습니다.

또는이처럼 버튼을 고안하고 마커로 봉사 할 수 있었다 :

각 양식을 인쇄 할 필요! 그냥 테이블을 포장 :

echo "<form action='delete_prod.php' id='delete' method='get'>"; 

echo '<table>'; 
while($row = mysqli_fetch_assoc($result)) { 
    $prod_id = $row['prod_id']; 
    echo "<tr>"; 
     echo "<td>".$count."</td>"; 
     echo "<td>".$row['prod_id']."</td>"; 
     echo "<td>".$row['prod_name']."</td>"; 
     echo "<td>".$row['prod_price']."</td>"; 
     echo "<td>"; 
     // each id is assigned to each button, so that when its submitted you get the designated id, the one that you clicked 
     echo "<button type='submit' value='$prod_id' class='btn btn-default' name='delete'>Delete</button>"; 
     echo "</td>"; 
    echo '</tr>'; 
} 

echo '</table>'; 
echo '</form>'; 

를 그리고 PHP 처리에 :

if(isset($_GET['delete'])) // as usual 
{ 
    include "connection.php"; 
    $prod_id = $_GET['delete']; // get the id 
    // USE PREPARED STATEMENTS!!! 
    $del="DELETE FROM products WHERE prod_id = ?"; 
    $delete = $link->prepare($del); 
    $delete->bind_param('i', $prod_id); 
    $delete->execute(); 
    // don't echo anything else, because you're going to use header 
    if($delete->affected_rows > 0) { 
     header('location:show_db.php'); 
    } else { 
     echo 'Sorry delete did not push thru!'; 
    } 
} 
+0

아직 양식에 표를 배치하지 않았습니다. 'button '에서'form ='id '를 제거하면 효과가있었습니다. 또한, 나는 아직 당신이 제안한 객체 지향 양식에 익숙하지 않지만, 확실히 시도해 볼 것입니다. 'form ='id ''이 오류를 일으키는 이유를 설명해 주시겠습니까? – user3736335

+0

그리고'$ _GET [ 'prod_id']'는'$ _GET [ 'delete']'이어야합니다. 왜냐하면 ow에 이름이'delete' 인 버튼에 값을 할당했기 때문에? – user3736335

+0

@ user3736335 예, 잘못 입력 한 것입니다. 잘못된 인덱싱을 수정했습니다. – Ghost

0

확인 prod_id이 테이블에서 제대로 여부를 증가 자동입니다. 또 다른 한가지는 양식에 루프가 있기 때문에 모든 양식의 ID가 중복됩니다. 따라서 첫 번째 양식을 제출할 때마다 첫 번째 제품 만 기록에서 삭제됩니다.

 if(isset($_GET['delete'])) 
{ 
    include "connection.php"; 
    $prod_id=$_REQUEST['prod_id']; 
     $del="delete from products where prod_id=$prod_id"; 
    if (mysqli_query($link,$del)) 
    { 
     echo "Successfully deleted"; 
     unset($_GET['delete']); 
    } 
    else 
    { 
     echo "Delete operation Failed"; 
    } 
    header('location:show_db.php'); 
} 

이 시도 delete_prod.php

에서

삭제 작업 코드에 대한
+0

첫 번째 양식이 아니라 버튼이 클릭 된 양식을 제출할 것입니다. – user3736335

+0

'페이지 소스보기'를 사용하면 각 양식의 ID가 동일하다는 것을 알 수 있습니다. 마지막 폼을 클릭하고 있지만 id가 먼저 일치하는 폼을 호출합니다. –

+0

이 코드를 사용해보십시오 - echo "

"; echo ""; echo ""; "
"; –

0
$link=mysqli_connect("localhost","root","","smartcart"); 
    $prod="select * from products"; 
    $rw=mysqli_query($link,$prod) or die(mysqli_errno()."in query $prod"); 
    $count=1; 
    while($row=mysqli_fetch_assoc($rw)) 
    { 
     echo "<tr>"; 
     echo "<td>".$count."</td>"; 
     echo "<td>".$row['prod_id']."</td>"; 
     echo "<td>".$row['prod_name']."</td>"; 
     echo "<td>".$row['prod_price']."</td>"; 
     echo "<td><form action='delete_prod.php' method='get'>"; 
     echo "<input type='hidden' name='prod_id' value='".$row['prod_id']."' />"; 
     echo "<input type='submit' value='Delete' class='btn btn-default' name='delete'/>"; 
     echo "</form></td>"; 
     $count=$count+1;       
    } 

...

관련 문제