简体   繁体   中英

How to upload an image to a database using php script?

here is the code for my upload.. but it doesn't work.. I've used a file_get_contents function.. Upload image

</head>
<body>
    <form action="upload1.php" method="POST" enctype="multipart/form-data">
    File: 
    <input type="file" name="image"/> 
    <input type="submit" value="Upload image" />

    </form>

<?php 

//connect to the database
$con = mysql_connect("localhost","root", "");
if(!$con)
 {
 die('Could not connect to the database:' . mysql_error());
 echo "ERROR IN CONNECTION";
}

mysql_select_db("imagedatabase", $con);


//file properties

 echo $file = $_FILES['image']['tmp_name']; 
 echo '<br />';

 if(!isset($file))
echo "Please select an image";

else
{
$image = file_get_contents($_FILES['image']['tmp_name']);
echo $image_name = addslashes($_FILES['image']['name']); echo '<br \>';
echo $image_size = getimagesize($_FILES['image']['tmp_name']);

if($image_size == FALSE)
    echo "That's not an image";
    else
{
        $insert = mysql_query("INSERT INTO images (image) VALUES    ($image)",$con);
if(!$insert)
    echo "Problem uploding the image. Please check your database";  
else 
{
    $last_id = mysql_insert_id();
    echo "Image Uploaded. <p /> Your image: <p /><img src=display.php?        id=$last_id>";
    }
}

}
mysql_close($con);
?>

</body>
</html>

and the code for the retrieve/display goes this way..

<?php
 //connect to the database
 mysql_connect("localhost","root", "") or die(mysql_error());
 mysql_select_db("mydb") or die(mysql_error());

 //requesting image id

 $id = addslashes($_REQUEST['id']);

$image = mysql_query("SELECT * FROM images WHERE id = $id");
$image = mysql_fetch_assoc($image);
$image = $image['image'];

header("Conten-type: image/jpeg");

 echo $image;


 mysql_close($connect);
 ?>

I've created a database named 'imagedatabase' and a table

That's a bad idea to store an image in database. Store a path to it in database, close directory with images via .htaccess and use it on a hard drive.


Why You shouldn't store files in DB?

If You'll use DB to store images You will have:

  1. slow queries
  2. catastrophic indexes' size
  3. high load on bridge php<->mysql
  4. problems with edit photos(You'll need to get image, modify something and insert all data again. Ohh nooo)
  5. problems with transfer files from one place to another
  6. new question on StackOverflow «How to work with files if them not files, but a string»

You should save the files in some folder during the upload process and save the name of file in database, so later you can call the name of file from database and link it as a hyperlink to download, i am using the following code to upload images in a folder called files and saving the name of files in database. At the end i have the file name in variable $newname

if ($_FILES['file']['name']) {

    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if ((($_FILES["file"]["type"] == "image/gif")
            || ($_FILES["file"]["type"] == "image/jpeg")
            || ($_FILES["file"]["type"] == "image/jpg")
            || ($_FILES["file"]["type"] == "image/pjpeg")
            || ($_FILES["file"]["type"] == "image/x-png")
            || ($_FILES["file"]["type"] == "image/png"))
        && ($_FILES["file"]["size"] < 500000)
        && in_array($extension, $allowedExts)
    ) {
        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
        } else {
            $ext = end(explode(".", $_FILES["file"]["name"]));
            $filename = current(explode(".", $_FILES["file"]["name"]));
            $newname = $filename . '_' . time() . '.' . $ext;
            move_uploaded_file($_FILES["file"]["tmp_name"],
                "files/" . $newname);
        }
    } else {
        echo "<div class='alert alert-success'>Image type or size is not valid.</div>";
    }
}

Uploading images directly into database is not a good idea. Instead upload photos in a folder and then just insert the photo name into the database and then call it later whenever you need. You could try the following Code if you want.

To make the code work for you you have to follow these steps:

  1. Inside the code Replace "your_photo" with your input name (which case I guess it would be "image")

  2. Create a folder where you will be uploading images and then Make changes in->> $newname="support/images/profile/" here write your image folder name

  3. write the proper database query. and remember that the image name will be automatically created and the name stays inside this variable-> $image_name . When you insert the name into database just use $image_name as value.

Upload Script:

 <?
 // If Everything is good- process the form - write the data into the database

$photo=$this->input->post('your_photo');
if($photo==NULL){$image_name='0';}// if no photo is selected the default value of the photo would be 0

    //photo upload starts
        $errors=0;
        if($_FILES['your_photo']){
        $image=$_FILES['your_photo']['name'];
        if($image) {
        define ("MAX_SIZE","100"); 
        function getExtension($str) {   
        $i = strrpos($str,".");
        if (!$i) { return ""; }
        $l = strlen($str) - $i;
        $ext = substr($str,$i+1,$l);
        return $ext; }


        //reads the name of the file the user submitted for uploading
        $image=$_FILES['your_photo']['name'];                                   
        //if it is not empty
        if ($image) 
        {                               
        //get the original name of the file from the clients machine
        $filename = stripslashes($_FILES['your_photo']['name']);
        //get the extension of the file in a lower case format
                                $extension = getExtension($filename);
                                $extension = strtolower($extension);
                                //if it is not a known extension, we will suppose it is an error and will not  upload the file,  
                                //otherwise we will do more tests
                                if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
                                {           
                                //print error message
                                $msg="Sorry! Unknown extension. Please JPG,JPEG,PNG and GIF only ";
                                $errors=1;

                                }
                                else
                                {
                                //get the size of the image in bytes
                                //$_FILES['image']['tmp_name'] is the temporary filename of the file
                                //in which the uploaded file was stored on the server
                                $size=filesize($_FILES['your_photo']['tmp_name']);                              
                                //compare the size with the maxim size we defined and print error if bigger
                                if ($size < MAX_SIZE*1024)
                                {
                                //we will give an unique name, for example the time in unix time format
                                $image_name=time().'.'.$extension;
                                //the new name will be containing the full path where will be stored (images folder)                                                        
                                $newname="support/images/profile/".$image_name;                                                     
                                //we verify if the image has been uploaded, and print error instead                                                     
                                $copied = copy($_FILES['your_photo']['tmp_name'], $newname);                                                        
                                if (!$copied)                                                       
                                {                                                       
                                $msg="Sorry, The Photo Upload was unsuccessfull!";                                                          
                                $errors=1;                                                          
                                }                                                         
                                }                                               
                                else                                            
                                {       
                                $msg="You Have Exceeded The Photo Size Limit";          
                                $errors=1;                              
                                }                                           
                                }}}                                             

                                /*Image upload process ends here- If any problem occurs it will display error message via the $msg, 
                                 otherwise it will upload the image to the image folder. To insert the photo into database $image_name has been used*/ 

                    }


                    if(($_FILES['your_photo'])&& ($errors))/* If any photo is selected and any problem occurs while uploading it will
                                                                display an error message, otherwise transfer the data to Mod_addstudent model  */
                                        { 

                                echo $msg;


                                        }

                    else        {   

                                    //Insert into database.Just use this particular variable "$image_name" when you are inserting into database

                                        $sql="INSERT INTO your_table (field1, your_image_field) VALUES ('','$image_name')"; 




                                }
                ?>

And then to view the image::

   <?php 

 // Retrieve information from Database First and then .. 

if (empty($your_photo))

{ $image_location="images/avatar.jpg";} //if there is no image in database  

 else {$image_location="images/$your_photo";} // if there is any image in database

?>  



  <img src="<?php echo base_url(); ?><?php echo $image_location ;?>" width="150" height="170" />

Check that you are actually able to upload a file to your server successfully first. Follow this tutorial:

http://www.tizag.com/phpT/fileupload.php

This will help you troubleshoot half of your journey but I strongly advice you check your logs for actual errors and that if you want additional help you are explicit about them.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM