Jump to content
Sign in to follow this  
honkmaster

php upload issue

Recommended Posts

Hi looking for a bit of help, I'm trying to create an upload script that send file to a directory named in the form "uploads/images/$company" I'm not bothered if the dir already exists The issue I'm have is the uploaded files don't end up in the directory set by "$company" they end up in the "images level Any help or advice would be great, its driving me made Cheers Chris

<?php    //testing postecho "$_POST[nouploads]";echo "<br />";echo "$_POST[company]";//posted from form$nouploads = "$_POST[nouploads]";$company = "$_POST[company]";//make a dir with the same name as company//does not matter if it already existsif (!file_exists ( "uploads/image/$company" )) {mkdir("uploads/image/$company", 0777, true);}error_reporting(E_ALL);    //directory to upload to    $upload_dir= "uploads/image/$company";    //numver of files to upload passed by form    $num_uploads = "$nouploads";    //maximum filesize allowed in bytes    $max_file_size  = 2000000;    //the maximum filesize from php.ini    $ini_max = str_replace('M', '', ini_get('upload_max_filesize'));    $upload_max = $ini_max * 2000000;    //a message for users    $msg = 'Please select files for uploading';    //an array to hold messages    $messages = array();    //check if a file has been submitted    if(isset($_FILES['userfile']['tmp_name']))    {	    //loop through the array of files	    for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++)	    {		    //check if there is a file in the array		    if(!is_uploaded_file($_FILES['userfile']['tmp_name'][$i]))		    {			    $messages[] = 'No file uploaded';		    }		    //check if the file is less then the max php.ini size		    elseif($_FILES['userfile']['size'][$i] > $upload_max)		    {			    $messages[] = "File size exceeds $upload_max php.ini limit";		    }		    //check the file is less than the maximum file size		    elseif($_FILES['userfile']['size'][$i] > $max_file_size)		    {			    $messages[] = "File size exceeds $max_file_size limit";		    }		    else		    {			    //copy the file to the specified dir			    if(@copy($_FILES['userfile']['tmp_name'][$i],$upload_dir.'/'.$_FILES['userfile']['name'][$i]))			    {				    //give praise and thanks to the php gods				    $messages[] = $_FILES['userfile']['name'][$i].' uploaded';			    }			    else			    {				    //an error message				    $messages[] = 'Uploading '.$_FILES['userfile']['name'][$i].' Failed';			    }		    }	    }    }?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>Multiple File Upload</title></head><body><h3><?php echo $msg; ?></h3><p><?php    if(sizeof($messages) != 0)    {	    foreach($messages as $err)	    {		    echo $err.'<br />';	    }    }?></p><form enctype="multipart/form-data" action="upload3.php" method="post"><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" /><?php    $num = 0;    while($num < $num_uploads)    {	    echo '<div><input name="userfile[]" type="file" /></div>';	    $num++;    }?><input type="submit" value="Upload" /></form></body></html>

Share this post


Link to post
Share on other sites

I don't see the problem , did you try and echo out the file path to make sure it is correct right before you try to copy the file into the folder?

Share this post


Link to post
Share on other sites

If I replace the $company bit with a company name i.e "uploads/image/$company" to "uploads/image/companyname" it works?? I just don't under stand why the files don't end up in the right place. I have echoed back and its seems to show the correct path until I submit where the company name is missing Thanks for responding Cheers Chris

Share this post


Link to post
Share on other sites

Ok, I have put on error reporting and fixed errors, I have also added echo to see what is happing. All works apart from the file does not end up in the "company" directory it ends up in the "image" directory with the "company" folders. This is what is echoing back to start with "uploads/image/CompanyName/" Once the Directory is created it should put the uploaded files in the "CompanyName" directory. What i get echoed back is "uploads/image//" the "CompanyName" is missing Very confused, any help would be great Cheers Chris

<?phperror_reporting(-1);//posted from formif(isset($_POST['company']))$target = "$_POST[company]";if(isset($_POST['nouploads']))$nouploads = "$_POST[nouploads]";{global $target, $nouploads, $dir;}echo $target;echo "<br />";//make a dir with the same name as company//does not matter if it already existsif (!file_exists ( "uploads/image/$target/" )) {mkdir("uploads/image/$target/", 0777, true);}    //directory to upload to    $upload_dir = "uploads/image/$target/";echo $upload_dir;echo "<br />";    //number of files to upload passed by form    $num_uploads = "$nouploads";    //maximum filesize allowed in bytes    $max_file_size  = 2000000;    //the maximum filesize from php.ini    $ini_max = str_replace('M', '', ini_get('upload_max_filesize'));    $upload_max = $ini_max * 2000000;    //a message for users    $msg = 'Please select files for uploading';    //an array to hold messages    $messages = array();    //check if a file has been submitted    if(isset($_FILES['userfile']['tmp_name']))    {	    //loop through the array of files	    for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++)	    {		    //check if there is a file in the array		    if(!is_uploaded_file($_FILES['userfile']['tmp_name'][$i]))		    {			    $messages[] = 'No file uploaded';		    }		    //check if the file is less then the max php.ini size		    elseif($_FILES['userfile']['size'][$i] > $upload_max)		    {			    $messages[] = "File size exceeds $upload_max php.ini limit";		    }		    //check the file is less than the maximum file size		    elseif($_FILES['userfile']['size'][$i] > $max_file_size)		    {			    $messages[] = "File size exceeds $max_file_size limit";		    }		    else		    {			    //copy the file to the specified dir			    if(@copy($_FILES['userfile']['tmp_name'][$i],$upload_dir.'/'.$_FILES['userfile']['name'][$i]))			    {				    //give praise and thanks to the php gods				    $messages[] = $_FILES['userfile']['name'][$i].' uploaded';			    }			    else			    {				    //an error message				    $messages[] = 'Uploading '.$_FILES['userfile']['name'][$i].' Failed';			    }		    }	    }    }?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>Multiple File Upload</title></head><body><h3><?php echo $msg; ?></h3><p><?php    if(sizeof($messages) != 0)    {	    foreach($messages as $err)	    {		    echo $err.'<br />';	    }    }?></p><form enctype="multipart/form-data" action="upload3.php" method="post"><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" /><?php    $num = 0;    while($num < $num_uploads)    {	    echo '<div><input name="userfile[]" type="file" /></div>';	    $num++;    }?><input type="submit" value="Upload" /></form></body></html>

Share this post


Link to post
Share on other sites

Hi I use this form to pass the number of upload fields and company name

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Untitled Document</title></head><body><form action="upload3.php" method="post">Number of Images to Upload<br />Company<input name="company" type="text" /><br /><select name="nouploads">  <option value="1">1</option>  <option value="2">2</option>  <option value="3">3</option>  <option value="4">4</option>  <option value="5">5</option>  <option value="6">6</option>  <option value="7">7</option>  <option value="8">8</option>  <option value="9">9</option>  <option value="10">10</option></select><input type="submit" name="submit" id="submit" value="Submit" /></form></body></html>

Share this post


Link to post
Share on other sites

That's fine, but that's not the form that you submit to upload files, so "company" is not going to be in the $_POST array for the upload form. Either store that value in the session, or use a hidden input in the upload form to pass the value to the next page.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...