2017-11-23 29 views
-1

私はuniのスワップサイトを作成しようとしている学生です。私は問題にぶつかった。私はすべての投稿を検索しましたが、似たようなものがありますが、すべてを一致させるためにコードを変更しようとすると壊れます。親切にするか、少なくとも試してみてください、私は学んでいます。MYSQLデータベースに画像やその他のデータを挿入する

ファイルのアップロード用にコードを完全に変更しようとしましたが、私は真剣に迷っています。私は正常に動作するログインとユーザーデータベースを持っていますが、何らかの理由でアイテムデータベースをアイテムデータベースに保存できません。メッセージファイルをアップロードしていません。

私は、投稿されたアイテムに関する情報と画像を保存すると同時に、セッションからタイムスタンプとユーザー名を入力しようとしています。

これは、ある項目のためのデータベースのセットアップ:

CREATE TABLE `item` (
    `itemid` int(10) NOT NULL PRIMARY KEY, 
    `iname` varchar(25) NOT NULL, 
    `idescription` varchar(25) NOT NULL, 
    `itype` varchar(25) NOT NULL, 
    `icolour` varchar(25) NOT NULL, 
    `icategory` varchar(25) NOT NULL, 
    `image` varchar(25) NOT NULL, 
    `idate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `username` varchar(60) NOT NULL 
); 

そして、これはPHPのページのコードです:

<?php 
session_start(); 
if (!isset($_SESSION['userSession']) || isset($_SESSION['userSession']) && empty($_SESSION['userSession'])) { 
    header("Location: index.php"); 
} 

require_once 'dbconnect.php'; 

if(isset($_POST['btn-postitem'])) { 

    $iname = $_POST['iname']; 
    $idescription = $_POST['idescription']; 
    $itype = $_POST['itype']; 
    $icolour = $_POST['icolour']; 
    $icategory = $_POST['icategory']; 

    $uploadDir = "upload/"; 
    $fileName = $_FILES['image']['name']; 
    $filePath = $uploadDir . $fileName; 
    $username = $_SESSION['userSession']; 

    if(move_uploaded_file($_FILES['image']['tmp_name'],"upload/".$_FILES['image']['name'])){ 
     $query_image = "INSERT INTO item(iname,idescription,itype,icolour,icategory,image,idate,username) VALUES('$iname','$idescription','$itype','$icolour','$icategory','$filePath','curdate()','$username')"; 


       // insert the image into db 
     if(mysql_query($query_image)) { 
      echo "Stored in: " . "upload/" . $_FILES['image']['name']; 
      } 
     else{ 
      echo "File name not stored in database"; 
     } 
       } 
       else{ 
         echo 'File not uploaded'; 
        } 
     } 
$db1->close(); 
?> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Post Item</title> 
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen"> 
<link href="bootstrap/css/bootstrap-theme.min.css" rel="stylesheet" media="screen"> 
<link rel="stylesheet" href="style.css" type="text/css" /> 

</head> 
<body> 

<div class="signin-form"> 

    <div class="container"> 


     <form class="form-signin" method="post" id="register-form" enctype="multipart/form-data"> 

     <h2 class="form-signin-heading">Post Item</h2><hr /> 

     <?php 
     if (isset($msg)) { 
      echo $msg; 
     } 
     ?> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Item Name" name="iname" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Description" name="idescription" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Type of Item" name="itype" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Item Colour" name="icolour" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Category" name="icategory" required /> 
     </div> 

     <div class="form-group"> 
     <input type="file" class="form-control" placeholder="Picture" name="image" required /> 
     </div> 

     <hr /> 

     <div class="form-group"> 
      <button type="submit" class="btn btn-default" name="btn-postitem"> 
      <span class="glyphicon glyphicon-log-in"></span> &nbsp; Post Item 
     </button> 

     </div> 

     </form> 

    </div> 

</div> 

</body> 
</html> 
+0

"upload"ディレクトリを作成しましたか?このコードを 'session_start()'の行の前に置く: 'error_reporting(E_ALL); ini_set( 'display_errors'、1); '。これでコードが機能しない理由がわかります。 mysqlはPHP 5.5.0以降で廃止され、PHP 7.0.0以降は削除されているため、mysqliまたはPDOを使用することを検討してください。また、SQLインジェクションを避けるために準備されたステートメントを使用します。 –

+0

'itemid'フィールドを' unsigned'と 'AUTO_INCREMENT'と定義してください。それ以外の場合は、挿入時に値0を受け取ります。 –

+0

あなたが 'idate'を定義した場合、' INSERT'ステートメントにフィールド(と 'curdate()'値)を含めてはいけません。挿入時に自動的に現在の日付時刻が取得されます。さもなければ、sqlステートメントで 'curdate()'を使うと、 'idate'フィールドは値' 0000-00-00 00:00:00'を受け取ります。 –

答えて

0

まず、あなたの画像列がBLOB型でなければなりません!

は、我々はフィールドid(int型)、image(ブロブ)とimage_name(VARCHAR(64))を得ました。

ので、コードは(IDは常に '1' であると仮定してのは、このするmysql_queryを使用してみましょう)次のようになります。

$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence! 
$image_name = addslashes($_FILES['image']['name']); 
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')"; 
if (!mysql_query($sql)) { // Error handling 
echo "Something went wrong! :("; 

}

MySQL関数 - 彼らは廃止されています! PDOまたはMySQLiを使用してください。また、ファイルの場所をディスクに保存することも考えてください。画像のような大きなデータを扱うSQLテーブルの扱いには問題があります。

また、あなたのHTMLは次のようになります。

<form action="insert_product.php" method="POST" enctype="multipart/form-data"> 
    <label>File: </label><input type="file" name="image" /> 
    <input type="submit" /> 
</form> 

追記:

ファイルを扱うとBLOBとしてそれらを格納し、データがそれ以外の場合は、になり、mysql_real_escape_string()使用してエスケープする必要があります構文エラー。

0

ブロブを使用するように変更することなく、現在機能しています。他の誰かが同じことをしているなら、私はコードを投稿したいと思っていました。私が今やらなければならないことは、e-bayのようなテーブルを表示し、いくつかの検索オプションを追加することです。

<?php 
session_start(); 
if (!isset($_SESSION['userSession']) || isset($_SESSION['userSession']) && empty($_SESSION['userSession'])) { 
    header("Location: index.php"); 
} 

require_once 'dbconnect.php'; 

if(isset($_POST['btn-postitem'])) { 

    $iname = $_POST['iname']; 
    $idescription = $_POST['idescription']; 
    $itype = $_POST['itype']; 
    $icolour = $_POST['icolour']; 
    $icategory = $_POST['icategory']; 

    $uploadDir = "upload/"; 
    $fileName = $_FILES['image']['name']; 
    $filePath = $uploadDir . $fileName; 
    $username = $_SESSION['userName']; 

    if(move_uploaded_file($_FILES['image']['tmp_name'],$filePath)){ 

      echo "name: "; var_dump($iname);echo '<br>'; 
       echo "desc: "; var_dump($idescription);echo '<br>'; 
       echo "type: "; var_dump($itype);echo '<br>'; 
       echo "colour: "; var_dump($icolour);echo '<br>'; 
       echo "category: "; var_dump($icategory);echo '<br>'; 
       echo "filePath: "; var_dump($filePath);echo '<br>'; 
       echo "username: "; var_dump($username);echo '<br>'; 



     $query_image = "INSERT INTO item(iname,idescription,itype,icolour,icategory,image,username) VALUES('$iname','$idescription','$itype','$icolour','$icategory','$filePath','$username')"; 


       // insert the image into db 
     if ($db1->query($query_image)) { 
      echo "Stored in: " . "upload/" . $_FILES['image']['name']; 
      } 
     else{ 
      echo "File name not stored in database"; 
     } 
       } 
       else{ 
         echo 'File not uploaded'; 
        } 
     } 
$db1->close(); 
?> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Post Item</title> 
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen"> 
<link href="bootstrap/css/bootstrap-theme.min.css" rel="stylesheet" media="screen"> 
<link rel="stylesheet" href="style.css" type="text/css" /> 

</head> 
<body> 

<div class="signin-form"> 

    <div class="container"> 


     <form class="form-signin" method="post" id="register-form" enctype="multipart/form-data"> 

     <h2 class="form-signin-heading">Post Item</h2><hr /> 

     <?php 
     if (isset($msg)) { 
      echo $msg; 
     } 
     ?> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Item Name" name="iname" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Description" name="idescription" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Type of Item" name="itype" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Item Colour" name="icolour" required /> 
     </div> 

     <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Category" name="icategory" required /> 
     </div> 

     <div class="form-group"> 
     <input type="file" class="form-control" placeholder="Picture" name="image" required /> 
     </div> 

     <hr /> 

     <div class="form-group"> 
      <button type="submit" class="btn btn-default" name="btn-postitem"> 
      <span class="glyphicon glyphicon-log-in"></span> &nbsp; Post Item 
     </button> 
      <a href="index.php" class="btn btn-default" style="float:right;">Home</a> 

     </div> 

     </form> 

    </div> 

</div> 

</body> 
</html> 
関連する問題