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";
  }

?>

「NO IMAGE SELECTED」と表示され、データベースに新しいものは何もありません。

4

2 に答える 2

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'
    }
}
于 2013-10-22T23:15:34.870 に答える