2015-08-18 100 views
0

這裏我試圖上傳圖像到目錄並添加數據庫中的路徑。 在這裏,我首先添加一些產品詳細信息,並嘗試上傳圖像以上傳目錄並將上傳的圖像路徑添加到數據庫中。如何在php中將圖像上傳到數據庫?

這裏是我做了什麼:

<?php 
    /* Attempt MySQL server connection. Assuming you are running MySQL 
    server with default setting (user 'root' with no password) */ 
    $link = mysqli_connect("localhost", "root", "", "wan_products_box"); 

    // Check connection 
    if($link === false){ 
     die("ERROR: Could not connect. " . mysqli_connect_error()); 
    } 

    // Escape user inputs for security 
    $product_name = mysqli_real_escape_string($link, $_POST['product_name']); 
    $product_category = mysqli_real_escape_string($link, $_POST['product_category']); 
    $product_price = mysqli_real_escape_string($link, $_POST['product_price']); 
    $pro_url = mysqli_real_escape_string($link, $_POST['pro_url']); 
    $co_owners = mysqli_real_escape_string($link, $_POST['co_owners']); 


    // attempt insert query execution 
    $sql = "INSERT INTO product_list (product_name, product_category, product_price,product_referrence_URL,product_co_owners) VALUES ('$product_name', '$product_category', '$product_price', '$pro_url', '$co_owners')"; 
    if(mysqli_query($link, $sql)){ 
     echo "New product created."; 
    } else{ 
     echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
    } 

    //image upload code 

    if($_POST) 
    { 
    if($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    if(file_exists("uploaded_images/" . $_FILES["file"]["name"])) 
    { 
    echo $_FILES["file"]["name"] . " already exists. "; 
    } 
    else 
    { 
    if(move_uploaded_file($_FILES["file"]["tmp_name"],"uploaded_images/" . $_FILES["file"]["name"])) 
    { 
    $query_image = "INSERT INTO product_list (product_image_url) values ('".$_FILES['file']['name']."')"; 
    if(mysql_query($query_image)) 
    { 
    echo "Stored in: " . "uploaded_images/" . $_FILES["file"]["name"]; 
    } 
    else 
    { 
    echo 'Unable to store'; 
    } 
    } 
    } 
    } 
    } 
    mysqli_close($link); 
    ?> 

這是我的HTML表單:

<div id="menu2" class="tab-pane fade"> 
     <h4>Add new product</h4> 
     <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> 
     <div class="panel panel-default"> 
     <div class="panel-body">   


      <form class="form-horizontal" method="post" action="files/insert.php" role="form"> 
       <div class="form-group"> 
       <label class="control-label col-sm-2" for="product_name">Product Name</label> 
       <div class="col-sm-10"> 
        <input type="text" class="form-control" name="product_name" id="product_name" placeholder="Iphone 5c" required> 
       </div> 
       </div> 

       <div class="form-group"> 
       <label class="control-label col-sm-2" for="pwd">Product Category</label> 
       <div class="col-sm-10">        
        <select class="btn-btn-primary form-control" name="product_category"> 
        <option>Mobile</option> 
        <option>Television</option> 
        <option>Printer</option> 
        <option>Watch</option> 
        <option>Monitor</option> 
        </select> 
       </div> 
       </div> 

       <div class="form-group"> 
       <label class="control-label col-sm-2" for="product-pic">Upload your profile picture</label> 
       <div class="col-sm-10">   
        <input type="file" class="form-control" name="file" id="file" /> 
       </div> 
       </div> 


       <div class="form-group"> 
       <label class="control-label col-sm-2" for="product_price">Product Price</label> 
       <div class="col-sm-10"> 
        <input type="text" class="form-control" name="product_price" id="product_price" placeholder="Rs.36,000" required> 
       </div> 
       </div> 


       <div class="form-group"> 
       <label class="control-label col-sm-2" for="pro_url">Reference URL</label> 
       <div class="col-sm-10"> 
        <input type="URL" class="form-control" name="pro_url" id="pro_url" placeholder="http://www.amazon.com" required> 
       </div> 
       </div> 


       <div class="form-group"> 
       <label class="control-label col-sm-2" for="co_owners">Co-owners</label> 
       <div class="col-sm-10"> 
        <select class="btn-btn-primary form-control" name="co_owners"> 
         <option>Select no. owners</option> 
         <option>1</option> 
         <option>2</option> 
         <option>3</option> 
         <option>4</option> 
         <option>5</option> 
         <option>6</option> 
         <option>7</option> 
         <option>8</option> 
         <option>9</option> 
         <option>10</option> 
         <option>11</option> 
         <option>12</option> 
         <option>13</option> 
         <option>14</option> 
         <option>15</option> 
        </select>      
       </div> 
       </div> 


       <div class="form-group">   
       <div class="col-sm-offset-2 col-sm-10"> 
        <button type="submit" class="btn btn-success">Add product</button> 
       </div> 
       </div> 
      </form> 


     </div> 
     </div> 
     </div>  
    </div> 

的數據插入到數據庫中,但圖片上傳部分是不會發生... 如何我可以這樣做嗎?我如何修改代碼上傳圖像到數據庫並添加數據庫路徑?

當我運行這個輸出我得到的是

New product created. 
Notice: Undefined index: file in D:\xampp\htdocs\wan\files\insert.php on line 31 

Notice: Undefined index: file in D:\xampp\htdocs\wan\files\insert.php on line 37 

Notice: Undefined index: file in D:\xampp\htdocs\wan\files\insert.php on line 43 

Notice: Undefined index: file in D:\xampp\htdocs\wan\files\insert.php on line 
+0

你可以顯示錶格嗎?聽起來像你沒有一個名爲「文件」的文件輸入 – rjdown

+0

你的表單失敗了,爲什麼?因爲...沒有有效的enctype和/或缺少名稱屬性 –

+0

混合'mysql'和'mysqli' – Saty

回答

2

有幾件事錯在你的代碼。

首先,您的表單在處理文件時缺少有效的文本類型enctype="multipart/form-data"

你也混的MySQL的API在你的第二個查詢。

$query_image = "INSERT INTO product_list (product_image_url) values ('".$_FILES['file']['name']."')"; 
if(mysql_query($query_image)) 
  • 所以它會失敗。

使用您在第一個查詢中使用的相同方法。

  • 這些不同的API不會互混。

因此改變,要if(mysqli_query($link, $query_image))

同時添加or die(mysqli_error($link))mysqli_query()檢查錯誤。

還要確保該文件夾有適當的權限被寫入。

另一件事,你<select>的選項有沒有值

<option>Select no. owners</option> 
<option>1</option> 
... 

您需要添加這些

<option value="empty_value">Select no. owners</option> 
<option value="1">1</option> 
... 

做同樣的他人。

<option>Mobile</option>同樣的東西。這些也應該有價值。

<option value="mobile">Mobile</option> 
... 

你不會在這些數據庫中獲得任何東西。

0

除了HTML部分中的問題,例如缺少enctype="multipart/form-data"。有一個在你的第二個查詢的一個問題,這是這些錯誤的原因:

$query_image = "INSERT INTO product_list (product_image_url) values ('".$_FILES['file']['name']."')"; 

您需要將此更改爲UPDATE查詢和更新數據庫中已經創建的行。

此外,對圖像名稱使用行的索引號是一種更好的方法。

+0

你在這裏提出了一個很好的觀點。但是,他們並沒有使用正確的MySQL API,並且因爲它沒有看到任何被接受的答案或評論,所以OP的問題還不清楚。 –

相關問題