2013-10-22 199 views
0

我有一個頁面顯示一些圖像(數據庫驅動)。這裏是我的gallery.php代碼:如何上傳圖片並將路徑保存到數據庫?

<ul id="portfolio-list" class="gallery"> 
    <?php 
     $sql="select * from eikones "; 
     $res=mysql_query($sql); 
     $count=mysql_num_rows($res); 

     for ($i = 0; $i < $count; ++$i) 
     { 
      $row = mysql_fetch_array($res); 
      $co=$i+1; 
      if(isset($row[ "path" ])) 
      { 
       $path= $row[ "path" ]; 
      } 

      if(isset($row[ "auxon" ])) 
      { 
       $auxon = $row[ "auxon" ]; 
      } 


      if($_SESSION['role'] == "admin") 
       echo "<li class=\"pink\"><a href=\"$path\" rel=\"group1\" class=\"fancybox\" title=\"Προιόν \"><img src=\"$path\" alt=\"Pic\"></a></li>\n"; 

     } 

     ?> 


</ul> 

現在我想要一個表單,我將能夠上傳圖像。我想這一點,但它不工作:

<form enctype="multipart/form-data" action="gallery.php" method="post" name="changer"> 
<input name="image" accept="image/jpeg" type="file"> 
<input value="Submit" type="submit"> 
</form> 

<?php 

include 'conf.php'; //database connect 

if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 


    $tmpName = $_FILES['image']['tmp_name']; 


    $fp  = fopen($tmpName, 'r'); 
    $data = fread($fp, filesize($tmpName)); 
    $data = addslashes($data); 
    fclose($fp); 


    $query = "INSERT INTO eikones"; //table name = "eikones" and it has two columns named "auxon" and "path". The auxon is the id. 
    $query .= "(image) VALUES ('','$data')"; 
    $results = mysql_query($query, $link) or die(mysql_error()); 

    print "DONE"; 

    } 
    else { 
    print "NO IMAGE SELECTED"; 
    } 

?> 

它說:「未選擇任何圖片」並沒有什麼新的東西都是到數據庫中。

+0

首先,你告訴它插入兩個值當只有指定一列把它們到 –

+0

@scrowler會有幫助:$ insert = mysql_query(「INSERT INTO eikones VALUES('','$ data')」)而不是有2行? –

回答

2

幾個小時後,我找到了解決方案。有用。雖然我仍然很樂意找到第二個解決方案(根據我在此發佈的代碼)。這是第二個解決方案:

表單頁面:

<form enctype="multipart/form-data" action="insert_image.php" method="post" name="changer"> 
<input name="image" accept="image/jpeg" type="file"> 
<input value="Submit" type="submit"> 
</form> 

插入到數據庫頁:

<?php 

    include 'conf.php'; 

    if ($_FILES["image"]["error"] > 0) 
    { 
    echo "<font size = '5'><font color=\"#e31919\">Error: NO CHOSEN FILE <br />"; 
    echo"<p><font size = '5'><font color=\"#e31919\">INSERT TO DATABASE FAILED"; 
    } 
    else 
    { 
    move_uploaded_file($_FILES["image"]["tmp_name"],"images/" . $_FILES["image"]["name"]); 
    echo"<font size = '5'><font color=\"#0CF44A\">SAVED<br>"; 

    $file="images/".$_FILES["image"]["name"]; 
    $sql="INSERT INTO eikones (auxon, path) VALUES ('','$file')"; 

    if (!mysql_query($sql)) 
    { 
     die('Error: ' . mysql_error()); 
    } 
    echo "<font size = '5'><font color=\"#0CF44A\">SAVED TO DATABASE"; 

    } 

    mysql_close(); 

?> 
0

有很多小的課程可以下載來處理您的圖片上傳。這是我剛剛編碼的一些小東西。它將允許您設置文件類型和文件大小的驗證。如果你知道它們永遠是相同的,那麼可以在構造函數中使用一些私有方法或硬編碼保護變量。它可能需要一點點工作,但是你可以使用這個類,或者拿出你需要的一些程序來完成它。原諒任何小錯誤。

class ImageUploader{ 

    protected 
     $size_limit, 
     $allowed_extensions; 
     $failed_saves; 

    public function __construct(int $limit, array $extensions){ 
     $this->size_limit = $limit; 
     $allowed_extensions = $extensions; 
    } 

    public function saveImage(array $images){ 
     foreach($images as $image){ 
      if($this->meetsSizeLimit($image['size'])){ 
       if($this->hasValidExtension(end(explode(".", $image["name"])))){ 
        $this->storeImage($image, $this->getNextImageIndex()); 
       } 
       else $failed_saves[$image["name"] = "Invalid file type."; 
      } 
      else $failed_saves["name"] = "File is too large."; 
     } 
     return $failed_saves; 
    } 

    public function meetsSizeLimit(int $size){ 
     return $size <= $this->size_limit; 
    } 

    public function hasValidExtension(string $extention){ 
     return in_array($extension, $this->allowed_extensions) 
    } 

    public function storeImage($image, $unique_id){ 
     move_uploaded_file($image["tmp_name"], "you_relative_file_path" . $image["name"]); 
     rename('your_relative_file_path' . $image["name"], 'your_relative_file_path/img' . $unique_id . '.' . $extension); 
     //Place your query for storing the image id and path in table 'eikones' 
    } 

    public function getNextImageIndex(){ 
     //Code to get the next available image id or MAX(id) from table 'eikones' 
    } 
} 
+0

我現在不介意使用類。這是一個簡單的管理面板,我不知道我在代碼中做了什麼錯誤。 –

+0

如果你的輸出是「NO IMAGE SELECTED」,那麼你沒有越過'if(isset($ _ FILES ['image'])&& $ _FILES ['image'] ['size']> 0)''。我建議把它分解成兩個,如果它們通過其中任何一個。或者你可以'var_dump [$ _ FILES]'來查看瀏覽器發送給你的信息。 – jpodwys

+0

我分開他們,沒有任何工作。這不容易嗎?我想有一種方法可以獲取文件路徑並將其放入一個變量中。例如:$ path =(這樣做的函數)。然後我會在表格中插入這個$路徑。 –

相關問題