2017-01-27 13 views
1

私は学校では動物を販売するウェブサイトの作成に取り組んでいます。所有者がサイト上で動物を追加、編集、削除できる管理ページが必要です。私たちは動物を加えることを可能にしましたが、既存のものを編集することはできないようです。私はPHPで実際に経験もありません。私は、ステートメントが実行されているかどうかを確認するために2つのチェックを追加しました。フォームに記入して送信ボタンをクリックすると、「ドンドン」と表示されます。誰かが私が直面している問題であるかもしれないことにいくつかの光を当てることができますか?私はSOを介して何かを尋ねたのはこれが初めてです。(PHP)mysqlデータベースにはエラーはありませんが、編集はありません

edit1: "animal_id = ':animal_id'"の代わりに、私は動物だけでそれを試しました。フォームに入力した値iの代わりに、 ':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

あなたのお返事ありがとうございます。私がこれを試してみると、私は1つしか「完了」しないので、$ stmtは実行されていません。しかし、私はこれをしないと、フォームからユーザーが送信した情報ではなく、 ':class'、 ':value'などの値をテーブルに入れます。だから何とかテキストフィールドに入れられる情報は保存されません。私はあなたの第二の解決策を今すぐ試してみるでしょう、最初はそれを見ていませんでした。 – Engelbert

+0

「完了」プリントのいずれかを他のものに変更します。見ているものが分かりません。また、 - $ stmtは常に '真'になります - 本当に有用なテストではありません。また、(再度) - フォームから有効な値を送信していることを確認するために、var_dump($ _ POST)を実行します。 – ethrbunny

+0

あなたの2番目のソリューション。 :値を '?'に変更します。 bindparamsを注文するとうまくいったようです。おかげさまで、あなたは伝説です。 k。 – Engelbert

関連する問題