[thelist] PHP File upload suggestions

Rob Smith rob.smith at THERMON.com
Fri Feb 11 12:07:14 CST 2005


Hi Tom,

I used this script on a Freelance project just recently. The idea is the
customer can use a new image, or an existing one from a drop down box. 

Here's the PHP code:

if ($_POST["Preview"] != "" || $_POST["Add"] != "") {
  if ($_FILES['ProductPicture']['name'] != "") {
    $results_file = mysql_query("SELECT Username, CustDiskQuota FROM
TMDVendors WHERE vid = " . $_SESSION["vid"],$link);
    if(! $results_file || mysql_error($link)){
      echo "[$results_file]<br>\n";
	echo mysql_error($link) . "<br>\n";
	echo mysql_num_rows($results_file);
    } else {
	$sub_folder = mysql_result($results_file,0,"Username");
	$disk_quota = mysql_result($results_file,0,"CustDiskQuota");
    }

    function mkdir_p($target)
    {
      if (is_dir($target)||empty($target)) return 1; // best case check
first
	if (file_exists($target) && !is_dir($target)) return 0;
	if (mkdir_p(substr($target,0,strrpos($target,'/'))))
	  return mkdir($target); // crawl back up & create dir tree
	return 0;
    }
     
    $ProductPicture = str_replace(" ","",$_FILES['ProductPicture']['name']);
		
    $uploaddir = '/export/web17/alpha/account_name/www/ABC/uploads/' .
$sub_folder;
    $uploadfile = $uploaddir . "/" . $ProductPicture;
    $ProductPicture = "uploads/" . $sub_folder . "/" . $ProductPicture;
    mkdir_p($uploaddir);
			
    if ($disk_quota < $_POST["MAX_FILE_SIZE"])  { 
	if (move_uploaded_file($_FILES['ProductPicture']['tmp_name'],
$uploadfile)) {
	  if (($_FILES['ProductPicture']['size'] + $disk_quota) >
$_POST["MAX_FILE_SIZE"]) {
	    unlink($uploaddir . $ProductPicture);
	    exit;
	  } // end copy			
	} elseif ($_GET["ProductPicture"] != "") { // came from preview
	  $ProductPicture = $_GET["ProductPicture"];
	}
    }
   
    $text_to_replace = "\r\n";
    $replaced_text = "<br />";
    $phrase = $_POST["ProductDesc"];
    $new_phrase = str_replace($text_to_replace,$replaced_text, $phrase);
	
    // I use the following to make a folder based upon their username.
    if ($_FILES['ProductPicture']['name'] == "" && $_POST["ExistingPicture"]
== "" && $_POST["ProductPicture"] == "") {
	$ProductPicture = "none";
    } elseif ($_POST["ExistingPicture"] != "") {
	$ProductPicture = $_POST["ExistingPicture"];
	$results_file = mysql_query("SELECT Username FROM TMDVendors WHERE
vid = " . $_SESSION["vid"],$link);
	if(! $results_file || mysql_error($link)){
	  echo "[$results_file]<br>\n";
	  echo mysql_error($link) . "<br>\n";
	  echo mysql_num_rows($results_file);
	} else {
	  $sub_folder = mysql_result($results_file,0,"Username");
	}
	$ProductPicture = "uploads/" . $sub_folder . "/" . $ProductPicture;
		
    } elseif ($_POST["ProductPicture"] != "") {
			$ProductPicture = $_POST["ProductPicture"];
    }
  }
  // if preview selected redirect to preview page
  // if add selected redirect to add this product page 
}

The form is basically:

<form method="post" name="AddAProduct" action="AddAProduct.php"
enctype="multipart/form-data">
  <input type="file" name="ProductPicture" size="12"><br />
  Or use an existing Image:<br />
  <select name="ExistingPicture">
    <option value="" selected>&nbsp;</option>
    <?php
	$results_file = mysql_query("SELECT Username FROM MyTable WHERE vid
= " . $_SESSION["vid"],$link);
	if(! $results_file || mysql_error($link)){
	  echo "[$results_file]<br>\n";
	  echo mysql_error($link) . "<br>\n";
	  echo mysql_num_rows($results_file);
	} else {
	  $sub_folder = mysql_result($results_file,0,"Username");
	}
	
      $dir = '/export/web17/alpha/azuri002/www/TMD/uploads/' . $sub_folder .
'/';
	if (is_dir($dir)) {
	  if ($dh = opendir($dir)) {
	    while (($filename = readdir($dh)) !== false) {
		if (($filename != ".") && ($filename != "..")) {
		  echo "<option value=\"" . $filename . "\">" . $filename .
"</option>";
		}
	    }
	  closedir($dh);
	  }
	}
    ?>
  </select>
  ...
</form>

Edit and use as needed,

Rob


More information about the thelist mailing list