2014-09-29 3 views
3

질문은 매우 기본적인 나는 많은 비슷한 질문 stackoverflow 발견하지만 그들 중 누구도 나를 위해 제대로 작동합니다.PHP를 사용하여 테이블의 특정 행을 삭제

나는이 같은 데이터 뭔가 표시하는 테이블을 디자인했다 :

ID name Delete 
1 abc  Delete 
2 def  Delete 

위의 디스플레이에 사용되는 코드가 delete.php에 대한

<?php 
$con=mysqli_connect("abc","abc","abc","abc"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$result = mysqli_query($con,"SELECT * FROM student"); 
echo "<table class='table table-striped table-bordered table-hover'> 
<thead> 
<tr> 
<th>ID</th> 
<th>name</th> 
<th>delete</th> 
</tr> 
</thead>"; 
while($row = mysqli_fetch_array($result)) 
{ 
echo "<tbody data-link='row' class='rowlink'>"; 
echo "<tr>"; 
echo "<td>" . $row['id'] . "</td>"; 
echo "<td>" . $row['name'] . "</td>"; 
echo "<td><a href='delete.php'>Delete</a></td>"; 
echo "</tr>"; 
echo "</tbody>";  
} 
echo "</table>"; 
mysqli_close($con); 
?> 

코드입니다

<?php 
$con=mysqli_connect("abc","abc","abc","abc"); 
// Check connection 
if (mysqli_connect_errno()) { 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
mysqli_query($con,"DELETE FROM student WHERE id='$id'"); 
mysqli_close($con); 
header("Location: index.php"); 
?> 

데이타베이스보기는

Id name 
1 abc 
2 cdf 

문제는 데이터를 삭제하지 않고 또한 사람에 GET 매개 변수를 추가 내게

+0

삭제 코드에'$ id'를 정의하지 않았습니다. * 또는 가지고 계시지 않습니까? * 표시되지 않았습니다. –

+0

또한 정수를 따옴표로 묶어서 함수 반환을 확인하지 못했습니다. – Sammitch

+1

삭제 스크립트를 간단한 GET으로 만드는 것은 확실히 엉덩이를 걷어차 고 갈비뼈 전체를 밟을 것입니다. 절대로 브라우저에서 페이지의 모든 링크를 프리 페치하기로 결정할 때 어떤 일이 일어나는지 생각해보십시오. "죄송합니다." –

답변

5

변경이 라인 :

echo "<td><a href='delete.php'>Delete</a></td>"; 

그런 delete.php에 대한

echo "<td><a href=\"delete.php?id=".$row['id']."\">Delete</a></td>"; 

에 (와 같은 원래 주석에 언급, $id가 정의되지 않았다).

<?php 
$con=mysqli_connect("abc","abc","abc","abc"); 
// Check connection 
if (mysqli_connect_errno()) { 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$id = $_GET['id']; // $id is now defined 

// or assuming your column is indeed an int 
// $id = (int)$_GET['id']; 

mysqli_query($con,"DELETE FROM student WHERE id='".$id."'"); 
mysqli_close($con); 
header("Location: index.php"); 
?> 

그것은 작동합니다.

하지만, 안전을 위해, 당신은 훨씬 안전 mysqli with prepared statements, 또는 PDO with prepared statements, 그들은을 사용하여 조사한다. 아래 예를 포함 시켰습니다. 여기


는 준비된 명령문의 예는 다음과 같습니다

<?php 
$DB_HOST = "xxx"; 
$DB_NAME = "xxx"; 
$DB_USER = "xxx"; 
$DB_PASS = "xxx"; 

$con = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 
if($con->connect_errno > 0) { 
    die('Connection failed [' . $con->connect_error . ']'); 
} 

$id = (int)$_GET['id']; 

$update = $con->prepare("DELETE FROM student WHERE id = ?"); 
$update->bind_param('i', $id); 
$update->execute(); 
$update->close(); 
+1

고마워요 완벽하게 작동했습니다 – Sam

+0

@ 샘 당신은 샘을 대단히 영접했습니다. –

0

을 도울 수 있다면이 분야에 새로운 오전

가, 감사 드리겠습니다 오류를 보여주는되지 않는 것입니다 귀하의 링크 : 다음

echo "<td><a href='delete.php?id='".$row['id']."'>Delete</a></td>"; 

delete.php 쿼리에서 그것을 잡을 :

$id = $_GET['id']; 
mysqli_query($con,"DELETE FROM student WHERE id='".$id."'"); 
+1

데이터베이스에서 데이터를 수정할 때'GET'을 사용하는 것은 결코 좋은 생각이 아닙니다. 예를 들어 사전 가져 오기 브라우저 확장을 사용하면 데이터베이스가 자동으로 지워집니다. – jeroen

+0

나는 이것을 시도했지만 결과를 반환하지 않는다. – Sam

+0

왜 좋은 생각이 아닌가? $ id를 intval ($ id)로 정리하면 안전합니다. – Carca

-1

당신은 아마 페이지를 행이 서버에 아약스 요청을 사용하여이 작업을 수행 할 수 있습니다 삭제 될 때마다 새로 고침 싶지 않다 훨씬 더 빨리. 아래 링크에서 전체 코드를 얻을 수 있습니다 : delete individual row from databse using ajax

관련 문제