Send image url to database once it's uploaded

Discussion in 'PHP' started by levani, Nov 24, 2009.

  1. #1
    I found this great tutorial for multiple image uploads, it works just fine but I want to add one thing... I would like to save the uploaded images' urls into database for futute use.

    Here is the original article: http://www.webdeveloper.com/forum/showpost.php?p=544008&postcount=2

    Once the image is named and saved in directory the url should be sent into database as well.

    Hope I'm clear :)

    I'll post the php code here too:

    <?php
    
    // filename: upload.processor.php
    
    // first let's set some variables
    
    // make a note of the current working directory, relative to root.
    $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']);
    
    // make a note of the directory that will recieve the uploaded files
    $uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'uploaded_files/';
    
    // make a note of the location of the upload form in case we need it
    $uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.form.php';
    
    // make a note of the location of the success page
    $uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'multiple.upload.success.php';
    
    // name of the fieldname used for the file in the HTML form
    $fieldname = 'file';
    
    //echo'<pre>';print_r($_FILES);exit;
    
    
    
    // Now let's deal with the uploaded files
    
    // possible PHP upload errors
    $errors = array(1 => 'php.ini max file size exceeded',
                    2 => 'html form max file size exceeded',
                    3 => 'file upload was only partial',
                    4 => 'no file was attached');
    
    // check the upload form was actually submitted else print form
    isset($_POST['submit'])
        or error('the upload form is neaded', $uploadForm);
        
    // check if any files were uploaded and if
    // so store the active $_FILES array keys
    $active_keys = array();
    foreach($_FILES[$fieldname]['name'] as $key => $filename)
    {
        if(!empty($filename))
        {
            $active_keys[] = $key;
        }
    }
    
    // check at least one file was uploaded
    count($active_keys)
        or error('No files were uploaded', $uploadForm);
            
    // check for standard uploading errors
    foreach($active_keys as $key)
    {
        ($_FILES[$fieldname]['error'][$key] == 0)
            or error($_FILES[$fieldname]['tmp_name'][$key].': '.$errors[$_FILES[$fieldname]['error'][$key]], $uploadForm);
    }
        
    // check that the file we are working on really was an HTTP upload
    foreach($active_keys as $key)
    {
        @is_uploaded_file($_FILES[$fieldname]['tmp_name'][$key])
            or error($_FILES[$fieldname]['tmp_name'][$key].' not an HTTP upload', $uploadForm);
    }
        
    // validation... since this is an image upload script we
    // should run a check to make sure the upload is an image
    foreach($active_keys as $key)
    {
        @getimagesize($_FILES[$fieldname]['tmp_name'][$key])
            or error($_FILES[$fieldname]['tmp_name'][$key].' not an image', $uploadForm);
    }
        
    // make a unique filename for the uploaded file and check it is
    // not taken... if it is keep trying until we find a vacant one
    foreach($active_keys as $key)
    {
        $now = time();
        while(file_exists($uploadFilename[$key] = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'][$key]))
        {
            $now++;
        }
    }
    
    // now let's move the file to its final and allocate it with the new filename
    foreach($active_keys as $key)
    {
        @move_uploaded_file($_FILES[$fieldname]['tmp_name'][$key], $uploadFilename[$key])
            or error('receiving directory insuffiecient permission', $uploadForm);
    }
        
    // If you got this far, everything has worked and the file has been successfully saved.
    // We are now going to redirect the client to the success page.
    header('Location: ' . $uploadSuccess);
    
    // make an error handler which will be used if the upload fails
    function error($error, $location, $seconds = 5)
    {
        header("Refresh: $seconds; URL=\"$location\"");
        echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'."\n".
        '"http://www.w3.org/TR/html4/strict.dtd">'."\n\n".
        '<html lang="en">'."\n".
        '    <head>'."\n".
        '        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">'."\n\n".
        '        <link rel="stylesheet" type="text/css" href="stylesheet.css">'."\n\n".
        '    <title>Upload error</title>'."\n\n".
        '    </head>'."\n\n".
        '    <body>'."\n\n".
        '    <div id="Upload">'."\n\n".
        '        <h1>Upload failure</h1>'."\n\n".
        '        <p>An error has occured: '."\n\n".
        '        <span class="red">' . $error . '...</span>'."\n\n".
        '         The upload form is reloading</p>'."\n\n".
        '     </div>'."\n\n".
        '</html>';
        exit;
    } // end error handler
    
    ?> 
    PHP:
    I don't know whete to insert the mysql INSERT function and how to make it work with multiple images.

    Can anyone please help?

    Thanks in advance
     
    levani, Nov 24, 2009 IP
  2. JAY6390

    JAY6390 Peon

    Messages:
    918
    Likes Received:
    31
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Do it in the final foreach loop
    you will need to use $uploadFilename[$key] which is the individual file name in the loop
     
    JAY6390, Nov 24, 2009 IP
  3. levani

    levani Peon

    Messages:
    61
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    In this example there are three image upload forms. What would the code look like if I want to save tham in separate database columns, in one row?
     
    levani, Nov 24, 2009 IP
  4. JAY6390

    JAY6390 Peon

    Messages:
    918
    Likes Received:
    31
    Best Answers:
    0
    Trophy Points:
    0
    #4
    Put simply, you shouldn't. If you want them to be referenced together, create a foreign key you can use to give them a group. Make the inserts one for each image per row, and have a separate table with the group details and key id
     
    JAY6390, Nov 24, 2009 IP