2017-01-27 2 views
1

학교에서 나는 동물을 판매하는 웹 사이트를 만들고 있습니다. 소유자가 사이트에서 동물을 추가, 편집 및 삭제할 수있는 관리자 페이지가 있어야합니다. 우리는 동물을 추가 할 수있게 만들었지 만 기존의 동물을 편집 할 수는 없습니다. 나는 또한 PHP에서 실제로 경험이 없다. 문이 실행되고 있는지 확인하기 위해 몇 가지 검사를 추가했습니다. 양식을 채우고 제출을 클릭하면 'donedone'이라고 표시되어 작동한다는 것을 의미하지만 표는 동일하게 유지됩니다. 누군가 내가 겪고있는 문제가 무엇인지 밝힐 수 있습니까? 내가 SO를 통해 뭔가를 물어 본 것은 이번이 처음입니다.(PHP) mysql 데이터베이스에서 오류는 발생하지 않지만 편집하지 않습니다.

edit1 : "animal_id = ': animal_id'대신"no animal no. 33 대신에 폼에 입력 한 값 대신 ': class'및 ': price'등의 값을 모두 바꿉니다. 따라서 양식 값을 'insert into'stmt에 바인딩 할 때 문제가 발생해야합니다.

데이터베이스 연결

<?php 

$server = 'localhost'; 
username = 'username'; 
$password = '*********'; 
$database = 'databasename'; 

$conn = new PDO("mysql:host=$server;dbname=$database;", $username, $password); 

?> 

이며, 이는 edit_animal 파일입니다

<?php 

session_start(); 

if(isset($_SESSION['user'])){ 
    header("Location: /"); 
} 

ini_set('display_errors', '0'); 
error_reporting(E_ALL | E_STRICT); 

require 'database.php'; 

$message = ''; 

if(!empty($_POST['animal_name']) && !empty($_POST['official_name']) && !empty($_POST['average_lifespan']) && !empty($_POST['length']) && !empty($_POST['class']) && !empty($_POST['housing']) && !empty($_POST['animal_price']) && !empty($_POST['diet']) && !empty($_POST['description'])): 

$sql = "UPDATE animal_test SET animal_name =':animal_name', animal_price = ':animal_price', official_name =':official_name', average_lifespan = ':average_lifespan' , length =':length' , class =':class', housing = ':housing', description=':description', diet =':diet' WHERE animal_id =':animal_id'"; 
    $stmt = $conn->prepare($sql); 

    $stmt->bindParam(':animal_id', $_POST['animal_id']); 
    $stmt->bindParam(':animal_name', $_POST['animal_name']); 
    $stmt->bindParam(':official_name', $_POST['official_name']); 
    $stmt->bindParam(':average_lifespan', $_POST['average_lifespan']); 
    $stmt->bindParam(':length', $_POST['length']); 
    $stmt->bindParam(':class', $_POST['class']); 
    $stmt->bindParam(':housing', $_POST['housing']); 
    $stmt->bindParam(':animal_price', $_POST['animal_price']); 
    $stmt->bindParam(':description', $_POST['description']); 
    $stmt->bindParam(':diet', $_POST['diet']); 
    $result = $stmt->execute(); 

    if (!$stmt) { 
    echo "Jammer"; 
    } 
    if($stmt){ 
    echo "done"; 
} 
if ($result) { 
    echo "done"; 
} 
    else{ 
    $message = 'Sorry there must have been an issue with editing your animale'; 

} 

endif; 

?> 

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Admin - Exotic Animal Shop</title> 
     <link rel="stylesheet" type="text/css" href="admin_page.css"> 
    </head> 
    <body>   

     <h2>Add a product</h2> 

     <form action="<?php echo $_SERVER['PHP_SELF']; ?>"method="POST"> 



      <div class=add_product_div> 

      <div id=animal_name_div> 
       <p>Animal name</p> 
       <input id=animal_name type="text" placeholder="Animal name" name="animal_name"> 
      </div> 

      <div id=animal_id_div> 
       <p>Animal ID</p> 
       <input id=animal_id type="number" placeholder="Animal ID" name="animal_id" min="0"> 
      </div> 

      <div id=price_div> 
       <p>Price</p> 
       <input id=animal_price type="number" placeholder="Price" name="animal_price" min="0"> 
      </div> 

      <div id=official_name_div> 
       <p>Official name</p> 
       <input id=official_name type="text" placeholder="Official name" name="official_name"> 
      </div> 

      <div id=current_age_div> 
       <p>Average lifespan</p> 
       <input id=average_lifespan type="text" placeholder="Average lifespan" name="average_lifespan"> 
      </div> 
      </div> 


      <div class=add_product_div> 

      <div id=length_div> 
       <p>Max length</p> 
       <input id=length type="text" placeholder="Max length" name="length"> 
      </div> 

      <div id=class_div> 
       <p>Class</p> 
       <input id=class type="text" placeholder="Class" name="class"> 
      </div> 

      <div id=housing_div> 
       <p>Housing</p> 
       <input id=housing type="text" placeholder="Housing" name="housing"> 
      </div> 

      <div id=animal_diet> 
       <p>Diet</p> 
       <input id=diet type="text" placeholder="Diet" name="diet"> 
      </div> 
      </div> 

      <div class=add_product_div> 
       <p>Description</p> 
       <textarea placeholder="Description" id="description" name="description" rows="20" cols="40"></textarea> 
      </div> 


      <div id=submit_div> 
       <input id=submit type="submit" value="Submit"> 
      </div> 

     </form> 
     <form action="upload.php" method="post" enctype="multipart/form-data"> 
      <p>Select image to upload</p> 
      <input type="file" name="userfile" id="userfile"> 
      <input type="submit" value="Upload Image" name="submit"> 
     </form> 
</body> 

+1

PDO는 기본적으로 예외를 발생시키지 않으므로 명시 적으로 구성해야합니다. –

+1

확실하지는 않지만'WHERE animal_id = ': animal_id''를 따옴표를 제거하면'WHERE animal_id = : animal_id'가됩니다 – marmeladze

+0

쿼리 ('$ sql')에 작은 따옴표를 추가 할 필요가 없습니다. 때때로 너무 많은 공간을 추가 한 것처럼 보입니다. 또한'value = : myvalue'로 준비하면 배열을 사용하여 실행할 수 있습니다. 이 어드바이스는 코드를 깨끗이하고 밝게 할 것이다. – AymDev

답변

0

귀하의 준비된 문은 교체 필드 주위에 " '"표시가 없어야합니다.

참조 : here 참조. 이 가깝다 뭔가

변경이 :

$sql = "UPDATE animal_test SET animal_name =:animal_name, 
    animal_price = :animal_price, official_name =:official_name, 
    average_lifespan = :average_lifespan , length =:length, 
    class =:class, housing = :housing, description=:description, 
    diet =:diet WHERE animal_id =:animal_id"; 

또 다른 해결책은 숫자 ("?") 및 bindParam 위치 자리 표시자를 사용하는 것입니다. 참조 here을 참조하십시오.

$sql = "UPDATE animal_test SET animal_name =?, 
    animal_price = ?, official_name =?, 
    average_lifespan = ?, length =?, 
    class =?, housing = ?, description=?, 
    diet = ? WHERE animal_id = ?"; 

$stmt->bindParam(1, $_POST['animal_name']); 
$stmt->bindParam(2, $_POST['animal_price']); 

... and so on 
+0

답변 해 주셔서 감사합니다. 내가 이것을 시도 할 때, 나는 단지 하나만 마친다. 그래서 $ stmt는 실행되지 않는다. 그러나, 내가 이것을하지 않으면, 나는 ': class', ': value'등을 폼의 사용자가 보낸 정보 대신에 내 테이블에 가져온다. 그럼 어떻게 든 텍스트 필드에 넣어 정보가 저장되지 않습니다 ..지금 두 번째 해결책을 시도해 보겠습니다. 처음에는 그것을 보지 못했습니다. – Engelbert

+0

'완료'인쇄물을 다른 것으로 변경하십시오.보고있는 것을 알기가 어렵습니다. 또한 - $ stmt는 항상 '참'일 것입니다 - 실제로 유용한 테스트는 아닙니다. 또한 (다시) - var_dump ($ _ POST)를 수행하여 양식에서 유효한 값을 보내고 있는지 확인하십시오. – ethrbunny

+0

두 번째 해결책; : 값을 '?'로 변경합니다. bindparams를 주문하면 효과가있는 것처럼 보였다. 고마워, 너는 전설이야. – Engelbert

관련 문제