2013-07-16 4 views
0

여기 아마추어 질문에 대해 유감스럽게 생각합니다.하지만 내 인생에서 왜 데이터베이스에 업데이트를 제출하지 않는지 이유를 디버깅 할 수없는 양식을 만들었습니다.내 양식이 데이터베이스를 업데이트하지 않는 이유는 무엇입니까?

예는 여기에 있습니다 : www.dominicharrison.co.uk/projects/Portfolio/admin

코드 :

<?php 
require_once('../_inc/glob.php'); 

$query = mysql_query("SELECT * FROM `pages`"); 

echo "<table border=\"1\"><tr><td>ID</td><td>Name</td><td>Location</td><td>Edit</td><td>Delete</td></tr>"; 

while($array = mysql_fetch_assoc($query)) { 

    echo "<tr><td>" . $array['id'] . "</td><td>" . $array['name'] . "</td><td>" . $array['location']; 
    echo "</td><td><a href=\"?editid={$array['id']}\">Edit</a></td>"; 
    echo "<td><a href=\"?delete={$array['id']}\">Delete</a></td></tr>"; 

} 

echo "</table>"; 

// Defines the edit and delete functions 

$edit = mysql_real_escape_string($_GET['editid']); 
$delete = mysql_real_escape_string($_GET['delete']); 

// Edit function! 

$query2 = mysql_query("SELECT * FROM `pages` WHERE `id` = '{$edit}'"); 
$array2 = mysql_fetch_assoc($query2); 

if($edit != "") { 
    ?> 
    <p> 
    <form method="POST" action=""> 
    <input name="name" value="<?php echo $array2['name']; ?>" type="text"><br /> 
    <input name="location" value="<?php echo $array2['location']; ?>" type="text"><br /> 
    <input type="submit" value="Edit!"> 
    </form></p> 

    <?php 
    if($_POST['submit']) 
    { 
     $name = mysql_real_escape_string($_POST['name']); 
     $location = mysql_real_escape_string($_POST['location']); 

     mysql_query("UPDATE `pages` SET id = '{$edit}', name = '{$name}', location = '{$location}' WHERE id = '{$edit}'"); 
    } 

} 
+0

쿼리가 성공하는지 확인하십시오. 그렇지 않은 경우 mysql_error()에 유용한 오류 메시지가 표시됩니다. 또한 mysqli_ 또는 PDO를 사용하여보다 안전한 코드를 작성하는 데 도움이 될 것입니다. – andrewsi

+0

답례로 이상한 질문 일 수도 있습니다. 정확히 어디에 제출합니까? – dmaij

+0

@dmaij - 작업을 비워두면 양식이 자체 URL로 다시 제출됩니다. – andrewsi

답변

0

양식이 ID를 제출하지 않는, 그래서 당신의 SQL은 할 수 없습니다 WHERE id= 절의 내용과 일치해야합니다.

1). 양식에 숨겨진 필드를 추가하여 $ _GET 배열에서 가져 오는 editID를 제출하십시오.

<form method="POST" action=""> 
    <input type="hidden" name="id" value="<?php echo $edit; ?>" /> 
    <input name="name" value="<?php echo $array2['name']; ?>" type="text"><br /> 
    <input name="location" value="<?php echo $array2['location']; ?>" type="text"><br /> 
    <input type="submit" value="Edit!"> 
</form> 

2). 제출 로직에서 수정 ID를 캡처하십시오.

if($_POST['submit']) 
    { 
     $name = mysql_real_escape_string($_POST['name']); 
     $location = mysql_real_escape_string($_POST['location']); 
     $edit = mysql_real_escape_string($_POST['id']); 

     mysql_query("UPDATE `pages` SET id = '{$edit}', name = '{$name}', location = '{$location}' WHERE id = '{$edit}'"); 
    } 
+0

그 일을 해 봤는데도 여전히 나에게 아무것도주지 않고 있습니다. – futureslay

1

$ _POST [ 'submit']이 (가) 없습니다.

var_dump($_POST); 

제출 버튼에 이름을 추가하십시오. 이렇게하면 누락 된 게시물 변수가 만들어집니다.

<input type="submit" name="submit" value="Edit!"> 

테이블이 업데이트됩니다. 그러나 업데이트를 호출하기 전에 select를 오래 호출 할 때 페이지를 새로 고쳐야합니다. 같은 페이지에 양식 게시물 이후

+0

제출 버튼에 누락 된 "이름"속성을 지적하십시오. 문제의 원인은 무엇입니까? – Luceos

2

, 이것은 ... 무슨 일

$edit = mysql_real_escape_string($_GET['editid']); // THIS IS NULL FOR POSTS 

... 

if($edit != "") { // THIS WON'T BE TRUE FOR POSTS 

따라서, 그것은 스크립트의 당신의 POST 과정에 도착하지 않습니다. 스크립트 재구성 - POST 처리 코드가 맨 위에 있어야합니다 (이 스크립트를 계속 사용하는 경우 ....하지 말아야 함).

+0

또한 @Rob Adams 대답을 참조하십시오. 해당 이름의 입력이 없으므로 제출이 절대 게시되지 않습니다. – Luceos

관련 문제