Imgae script как да добавя още полета.

Darknez

Registered
Имам един image script и ме интересува как да добавя още 3 полета за качване, и като качи снимките да излезе пътят до тях (image-script.com/images/image.jpg).
Код:
<?php
//define a maxim size for the uploaded images in Kb
 define ("MAX_SIZE","200000000000"); 
 
//This function reads the extension of the file. It is used to determine if the file  is an image by checking the extension.
 function getExtension($str) {
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
 }
 
//This variable is used as a flag. The value is initialized with 0 (meaning no error  found)
//and it will be changed to 1 if an errro occures.
//If the error occures the file will not be uploaded.
 $errors=0;
//checks if the form has been submitted
 if(isset($_POST['Submit']))
 {
 	//reads the name of the file the user submitted for uploading
 	$image=$_FILES['image']['name'];
 	//if it is not empty
 	if ($image)
 	{
 	//get the original name of the file from the clients machine
 		$filename = stripslashes($_FILES['image']['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
 			echo '<h1>Unknown extension!</h1>';
 			$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['image']['tmp_name']);
 
//compare the size with the maxim size we defined and print error if bigger
if ($size > MAX_SIZE*1024)
{
	echo '<h1>You have exceeded the size limit!</h1>';
	$errors=1;
}
 
//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="images/".$image_name;
//we verify if the image has been uploaded, and print error instead
$copied = copy($_FILES['image']['tmp_name'], $newname);
if (!$copied)
{
	echo '<h1>Copy unsuccessfull!</h1>';
	$errors=1;
}}}}
 
//If no errors registred, print the success message
 if(isset($_POST['Submit']) && !$errors)
 {
 	echo "GJ";
 }
 
 ?>
 
 
 <form name="newad" method="post" enctype="multipart/form-data"  action="">
 <table>
 	<tr><td><input type="file" name="image"></td></tr>
 	<tr><td><input name="Submit" type="submit" value="Upload image"></td></tr>
 </table>
 </form>
 
Първо промени името на полето, така че да е като масив, и след това си добави и новите полета:

HTML:
<input type="file" name="image[]">
<input type="file" name="image[]">
<input type="file" name="image[]">

След като е събмитнат формуляра, глобалния масив $_FILES ще има структура, подобна на тази:

PHP:
//първа картинка
$_FILES['image']['tmp_name'][0];
$_FILES['image']['name'][0];
$_FILES['image']['size'][0];
$_FILES['image']['type'][0];
$_FILES['image']['error'][0];

//втора картинка
$_FILES['image']['tmp_name'][1];
$_FILES['image']['name'][1];
$_FILES['image']['size'][1];
$_FILES['image']['type'][1];
$_FILES['image']['error'][1];

//трета картинка
$_FILES['image']['tmp_name'][2];
$_FILES['image']['name'][2];
$_FILES['image']['size'][2];
$_FILES['image']['type'][2];
$_FILES['image']['error'][2];

При положение, че очакваш не повече от три файла да са качени, въртиш един цикъл от нула до две и съвсем леко поправяш РНР кода който вече имаш:

PHP:
if(isset($_POST['Submit'])) { 
    for($i = 0; $i < 3; $i++){
        //тук слагаш РНР кода, който имаш и го променяш малко
        //достъп до файла:
        //$_FILES['image']['name'][$i];
   }
}
 
Виждам, че преименуваш всеки нов файл, като за име слагаш time() плюс файловото разширение. Това обаче сега няма да работи както очакваш, защото всичко ще става по едно и също време и най-вероятно за трите файла, ще се генерира едно и също име. Можеш да добавиш например индекса на файла от цикъла:

PHP:
$image_name=time().'-'.$i.'.'.$extension;

Ако има дори теоретична възможност, различни потребители да качват снимки по едно и също време, името на файла трябва да го направиш още по-уникално, например в името на файла, освен всичко до тук, можеш да добавиш и id номера на потребителя.
 

Back
Горе