2012-07-01 3 views
0

나는 프로그래밍 경험이 있지만 PHP에는 익숙하지 않다. 이 튜토리얼에서 내가했던 예제에 문제가있다. 나는 그것의 수백만 번을 봤다, googled, ect 요법. 나는 왜 내 코드가 작동하지 않는지 전혀 모른다.PHP MySQL에서 삭제할 때

목적은 기본적으로 PHP에서 SQL에서 삽입 및 삭제를 테스트하고 레코드 추가 및 레코드 삭제 버튼을 사용하는 것입니다. 레코드 추가 버튼은 완벽하게 작동하지만 페이지를 다시로드하는 것 외에는 삭제하지 마십시오. 코드를 heres ...

<?php // sqltest.php 

require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database, $db_server) 
    or die("Unable to select database: " . mysql_error()); 

if (isset($_POST['author']) && 
    isset($_POST['title']) && 
    isset($_POST['type'])  && 
    isset($_POST['year'])  && 
    isset($_POST['isbn'])) 
{ 
    $author = get_post('author'); 
    $title = get_post('title'); 
    $type = get_post('type'); 
    $year = get_post('year'); 
    $isbn = get_post('isbn'); 

    if (isset($_POST['delete']) && $isbn != "") 
    { 
     echo "worked!!!!!!!!!!!!!!"; 
     $query = "DELETE FROM classics WHERE isbn='$isbn'"; 
     $result = mysql_query($query) or die(mysql_error()); 
     if(mysql_affected_rows($result) > 0) echo 'user deleted'; 

     //if (!mysql_query($query, $db_server)) 
     //echo "DELETE failed: $query" . mysql_error(); 
    } 
    else 
    { 
     echo "nooooooooooooooooooo"; 
     $query = "INSERT INTO classics VALUES" . 
     "('$author', '$title', '$type', '$year', '$isbn')"; 
     if (!mysql_query($query, $db_server)) 
     { 
      echo "INSERT failed: $query" . mysql_error(); 
     } 
    } 
} 

echo <<<_END 
<form action="sqltest.php" method="post"><pre> 
Author <input type="text" name="author" /> 
Title <input type="text" name="title" /> 
Type <input type="text" name="type" /> 
Year <input type="text" name="year" /> 
ISBN <input type="text" name="isbn" /> 
<input type='submit' value='ADD RECORD' /> 
</pre></form> 
_END; 



$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

$rows = mysql_num_rows($result); 

for ($j = 0 ; $j < $rows ; ++$j) 
{ 
     $row = mysql_fetch_row($result); 

echo <<<_END 
<pre> 
Author $row[0] 
Title $row[1] 
Type $row[2] 
Year $row[3] 
ISBN $row[4] 
<form action="sqltest.php" method="post"> 
<input type="hidden" name="delete" value="yes" /> 
<input type="hidden" name='isbn' value="$row[4]" /> 
<input type='submit' value='DELETE RECORD' /> 
</form> 
</pre> 
_END; 
} 

mysql_close($db_server); 

function get_post($var) 
{ 
    return mysql_real_escape_string($_POST[$var]); 
} 

?> 

나는 이것을 여러 번 보았지만, 왜 이것이 작동하지 않을지 전혀 모른다. 이 버튼이 작동하지 않는 for 루프입니까? 참고, echo "worked !!!"가 표시됩니다. 그리고 다른 에코 "noooooooo"; 그 버튼이 테스트되었는지 여부를 테스트하는 것이었지만 인쇄물은 없었습니다. 아마 버튼 코드 자체에서 뭔가를 놓친 것일까 요? 또한 오류가 인쇄되지 않으며 내 편집자 (및 나 자신)가 구문 오류를 놓쳤습니다 (해당되는 경우).

DB를 닫기 전에 삭제 버튼의 코드가 끝납니다.

미리 도움을 주셔서 감사합니다.

+0

'$ _POST'에'var_dump()'를 수행하고 기대하고있는 값을 얻고 있는지 확인하십시오. –

+0

@JohnConde 이걸 눈치 채 셨습니다. 여기 당신에게 멍청한 놈이 되서 미안하지만 그 일을 어떻게 할 것인가? 새로운 내용 = ( 입력 해 주셔서 감사합니다. – TheNoob

+0

은 코드에서이 모양에 대한 답변을 찾았습니다. http://stackoverflow.com/questions/14077539/php-cant-add-content-text-book-example 그것이 작동하지 않는 이유는 delete에 대한 if/else 문이 다른 if 문 내에 중첩되어 있기 때문입니다 .작동하지 않을 경우 –

답변

-2

delete이라는 양식 필드가 없으므로 삭제 코드 경로를 사용할 수 없습니다.

제출 단추의 값을 사용하여 수행 할 작업을 결정하는 것이 좋습니다. 이 경우 제출 버튼에 name 속성이 누락되어 있습니다. 양식이 없으면 값을 제출할 수 없습니다.

<input type="submit" name="submit" value="DELETE RECORD" /> 

을 다음

if (isset($_POST['submit']) && ($_POST['submit'] == 'DELETE RECORD')) { 
    ... 
} 
+0

그의 양식에 삭제 필드가 있습니다. – Rawkode

+0

@rawkode : d' oh ... 코드의 벽에서 충분히 스크롤하지 않았습니다. –

+0

입력 해 주셔서 감사합니다. 동일한 결과를 시도했습니다. 정말 고맙습니다. 다시 고마워요. – TheNoob

2

귀하의 문제는 첫 번째 if 블록이 : 당신은 아마 싶습니다.

당신은 게시 변수 authortitletypeyearisbn의 존재를 확인하고 있습니다. 삭제 된 코드에서 보낸 유일한 변수는 deleteisbn입니다. 따라서 첫 번째 if 블록은 완전히 삭제됩니다 (삭제 코드 포함).

첫 번째 ifif(isset($_POST)) { // a form has been posted으로 수정해야합니다. 그렇다면 그것은 작동합니다.

또 다른 방법은 그것을 할 수 있습니다 :

if(isset($_POST['delete']) && isset($_POST['isbn']) && !empty($_POST['isbn'])){ 
    //delete code here 
} 

if(isset($_POST['author']) && isset($_POST['title']) && isset....){ 
    // insert code here 
} 

편집 : 다시 코드 :

<?php // sqltest.php 

// I don't know what's in here, so I've left it 
require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database, $db_server) 
    or die("Unable to select database: " . mysql_error()); 

if (isset($_POST)) 
{ 

    if (isset($_POST['delete']) && !empty($_POST['isbn'])) 
    { 
     echo "Deleting"; 
     $query = "DELETE FROM classics WHERE isbn='".mysql_real_escape_string($_POST['isbn'])."'"; 
     $result = mysql_query($query) or die(mysql_error()); 
     if(mysql_affected_rows($result) > 0) echo 'user deleted'; 
    } 
    else 
    { 
     echo "Inserting"; 
     $query = "INSERT INTO classics VALUES ('".mysql_real_escape_string($_POST['author'])."', '".mysql_real_escape_string($_POST['title'])."', '".mysql_real_escape_string($_POST['type'])."', '".mysql_real_escape_string($_POST['year'])."', '".mysql_real_escape_string($_POST['isbn'])."')"; 
     if (!mysql_query($query)) 
     { 
      echo "INSERT failed: $query" . mysql_error(); 
     } 
    } 
} 

// you don't need echo's here... just html 
?> 

<form action="sqltest.php" method="post"> 
    <pre> 
     Author <input type="text" name="author" /> 
     Title <input type="text" name="title" /> 
     Type <input type="text" name="type" /> 
     Year <input type="text" name="year" /> 
     ISBN <input type="text" name="isbn" /> 
     <input type='submit' value='ADD RECORD' /> 
    </pre> 
</form> 

<?php 

$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

// a better way to do this: 
while($row = mysql_fetch_array($result)){ 
?> 

<pre> 
    Author <?php echo $row[0]; ?> 
    Title <?php echo $row[1]; ?> 
    Type <?php echo $row[2]; ?> 
    Year <?php echo $row[3]; ?> 
    ISBN <?php echo $row[4]; ?> 
    <form action="sqltest.php" method="post"> 
     <input type="hidden" name="delete" value="yes" /> 
     <input type="hidden" name='isbn' value="<?php echo $row[4]; ?>" /> 
     <input type='submit' value='DELETE RECORD' /> 
    </form> 
</pre> 

<?php 
} 

mysql_close($db_server); 

?> 
+0

동일한 결과 =/그것의 설명대로 작동합니다. 고마워, 너의 의견을 많이 주셔서 고마워! – TheNoob

+0

나는 그것을 시험해 보았지만, 행을 인쇄했다. [1] 그리고 내가 h 그것은 같은 결과를 가지고 삭제합니다. =/나는 지금 당신이 게시 한 링크를 읽고 있습니다. 입력 해 주셔서 감사합니다 – TheNoob

+0

@ TheNoob 제 편집을 참조하십시오. a) 더 읽기 쉽도록 b) 코드를 다시 작성했습니다. b) 몇 가지 사항 (예 : db 행을 순환하는 더 좋고/더 쉬운 방법)을 교육하고 c) 희망 사항을 수정합니다. 살펴보고 작동하는지 확인하십시오. –

0

당신이 당신의 형태로 사용되는 방법을 확인합니다.이 같은 POST를하는지 확인하기 :

양식 action="yourpage.php" method="POST"

위 코드에서 대체 다음

$author = get_post('author'); 
    $title = get_post('title'); 
    $type = get_post('type'); 
    $year = get_post('year'); 
    $isbn = get_post('isbn'); 

마지막으로

$author = $_POST['author']; 
$title = $_POST['title']; 
$type = $_POST['type']; 
$year = $_POST['year']; 
$isbn = $_POST['isbn']; 

으로 확인 할 필요가 없습니다 다시 isset() 메서드에서 수행 한 것처럼 $isbn이 null이 아닌 경우 다시 입력하십시오. 그래서 아래의 경우에 $isbn!=""을 제거 :

if (isset($_POST['delete']) && $isbn != "") 
    { 
} 

가된다 :

if (isset($_POST['delete'])) 
    { 
} 

당신은 사용자가 삭제 버튼 덜 중요하다 클릭 한 경우 확인, 테스트입니다. 따라서 잠시 동안 제거하고 나중에 삭제 단추를 클릭 한 후 해당 코드에 액세스 할 수 있다고 확신하기 때문에 나중에 추가 할 수도 있습니다.

관련 문제