2013-10-22 156 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 =(这样做的函数)。然后我会在表格中插入这个$路径。 –

相关问题