2011-04-12 6 views
1

각 행의 테이블에서 링크를 삭제하고 있습니다. 해당 링크를 클릭하면 해당 ID를 사용하여 해당 행을 삭제하는 페이지로 ID를 전달합니다. 내가 보여주는 밖으로에만 delete_row.php을 보여줄 수 = 내 URL의 내 마지막 부분이 delete_row.php처럼 보인다? ID? ID = 5PHP URL 링크 재 작성

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script language="javascript" type="text/javascript"> 
    function redirect(URL) 
    { 
     document.location="delete_row.php"; 
     return false; 
    } 
</script> 
</head> 

<body> 
<?php 
$con = mysql_connect("localhost","root","root"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("test", $con); 

$result = mysql_query("SELECT * FROM users"); 
?> 
<table border="1"> 
<th>Name</th> 
<th>Age</th> 
<th>&nbsp;</th> 
<?php 
while($row = mysql_fetch_array($result)) 
    {?> 
    <tr> 
    <td><?php echo $row['name'];?></td> 
    <td><?php echo $row['age'];?></td> 
    <td><a href="javascript:" onclick="return redirect('delete_row.php?id=<?php echo $row['id']; ?>');">Delete</a></td> 
    </tr> 
    <?php } ?> 
</table> 
<?php 
mysql_close($con); 
?> 
</body> 
</html> 

이 파일 이름 delete_row와 PHP 부분입니다. PHP

<?php 
$con = mysql_connect("localhost","root","root"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db("test", $con); 
if(isset($_REQUEST['id'])) 
$id = $_REQUEST['id']; 
mysql_query("DELETE FROM users WHERE id='$id'"); 
mysql_close($con); 
?> 

내가 공지 사항입니다 무엇입니까 오류 : 정의되지 않은 변수 : C에서 ID :

+0

[부작용이있는 요청에는 GET을 사용하지 마십시오] (http://tools.ietf.org/html/rfc2616#section-9.1.1). – Gumbo

+0

대신 GET을 시도해 볼 수 있습니다 – jimy

+0

실제 질문은 "왜 이걸하고 싶니?"라고 가정합니다. – briantyler

답변

0

라인 (13)에 \ MYXAMPP \의 delete_row.php 윌 당신을 위해이 일?

<a href="delete_row.php" onclick="this.href = this.href + '?id=5'">Delete</a> 

는 또한이 작업을 수행 할 수 :

<script language="javascript" type="text/javascript"> 
    function redirect(URL) 
    { 
     if(confirm('Are you sure you wish to delete this item?')) 
      document.location=URL; 
     return false; 
    } 
</script> 
<a href="javascript:" onclick="return redirect('delete_row.php?id=5');">Delete</a> 
+0

@Craig : 삭제 링크를 클릭했을 때 여전히 나는 이것을 가지고 있습니다 http : //localhost/delete_row.php? id = 5 – sanjeev

+0

두 번째 해결책이 도움이 될 수 있습니다. onclick이 URL에 해당 함수를 호출하여 여러 행이 모두 동일한 함수를 호출 할 수 있으므로 스크립트를 한 번만 작성하면됩니다. –

+0

@Craig : Itz가 삭제 버튼을 클릭했을 때 그 ID를 다시 표시합니다. – sanjeev

0

어떻게 페이지는 어떤 행을 삭제 알 수 있습니까? 일종의 식별자를 보내야합니다. 다시 말하면 숨겨진 ID를 얻은 후에 삭제하면 다음과 같이 리디렉션 할 수 있습니다.

header ('Location : urlOfPageWithoutQueryString');

+0

Craig의 대답은 영리합니다. 물론 JS가 필요합니다. 당신은 당신이 JS를 요구할 것인지 여부를 결정해야합니다. 또는 태그를 사용하여 JS로 지원되는 링크를 추가 할 수 있습니다. –

0

"삭제"버튼이 제출 버튼 인 작은 양식을 사용할 수 있습니다. 메소드를 "게시"로 설정하십시오. 예 :

당신의 PHP 파일에서
<form action="delete_row.php" method="post"> 
    <input type="hidden" name="row" value="5"> 
    <input type="submit" value="Delete"> 
</form> 

, 당신은 다음 GET 값보다는 POST 값을 사용할 수 있습니다. 이것은 더 정확합니다. GET 작업은 멱등 (즉, 요청 된 정보를 반환하는 것 외에는 효과가 없어야 함)이어야합니다.

0

당신은 모든 행동의 이런 종류의 GET 사용하지 말아야 GET is considered as being a safe method 등 :

[...] 대회는 GET과 HEAD 방법이 작업 을 복용의 중요성이 안된다고 설립되었습니다 검색 이외. 이러한 방법은 "안전"하다고 간주되어야합니다. 안전한 방법 이유에서 그렇다

<form action="delete_row.php" method="post"> 
    <input type="hidden" name="id" value="5"> 
    <input type="submit" value="Delete row"> 
</form> 

GET 대신 POST도에 대한이 취약하지 않습니다 사용 : 당신이 ID에 대한 숨겨진 양식 컨트롤을 사용할 수있는

대신 POST 양식을 사용하여 Cross-Site Request Forgery attacks. 이 시점에서 소위 CSRF 토큰을 사용하여 CSRF 공격의 성공 가능성을 줄이는 것에 대해서도 고려해야합니다.