Incarcare numar maxim de poze in director, cu nume ordonate

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
adrian_ady
Mesaje: 80

Incarcare numar maxim de poze in director, cu nume ordonate

In prezent se poate incarca numai o poza pentru fiecare user. Se incarca imaginea si se redenumeste. Cum fac sa se poata incarca mai multe foto (adica sa aiba o logica in redenumire ca sa fie distincte) si sa pot seta numarul maxim de imagini ce pot fi uploadate?

MarPlo Mesaje: 4343
Poti utiliza functia glob().
Vezi cum poti folosi acest exemlu:

Cod: Selectaţi tot

$files = glob('dir/*.jpg');  // array cu toate fisierele JPG din "dir/"
$nrf = count($files);  // numarul de fisiere gasite

// daca sunt mai putin de 4 fisiere
if($nrf < 4) {
  $file = 'dir/nume'. ($nrf + 1) .'.jpg';  // setare nume cu numar de ordine pt urmatorul fisier
  //  Incarca fisierul ...
}
else echo 'Sunt 3 fisiere incarcate'; 

adrian_ady Mesaje: 80
Linia de upload folosita in prezent:

Cod: Selectaţi tot

$upload->uploadImageNoResizeRenameWidthHeight('file',"foldere/furnizori/id_".$login->getMemberId()."","id_".$_GET['id'],512000,array("jpeg"),120,90);
Am facut cateva incercari dar nu am 'brodit-o'. Asa ar trebui sa devina linia($file = 'dir/nume'. ($nrf + 1) .'.jpg';)?:

Cod: Selectaţi tot

$upload->uploadImageNoResizeRenameWidthHeight('file',"foldere/furnizori/id_".$login->getMemberId()."","id_".$_GET['id']."-".($nrf+1),512000,array("jpeg"),120,90);
Asa arata clasa Upload

Cod: Selectaţi tot

// upload imagine gif sau jpg fara redimensionare cu redenumire si cu conditia sa aiba anumita latime si inaltime
    public function uploadImageNoResizeRenameWidthHeight($file,$cale,$rename,$maxsize,$allow_extension,$w,$h) 
    {        
        //$file = numele imputului de tip file
        //$cale = calea pozei pe server fara slash la sfarsit
            
        //$rename = numele nou al pozei
        //$maxsize = dimensiumea maxima a fisierului permisa
        //$allow_extension = extensii permise array("jpeg","/gif")
        
        $file_name  = $_FILES[$file]['name']; 
        $file_type  = $_FILES[$file]['type']; 
        $file_size  = $_FILES[$file]['size']; 
        $tip = substr($file_type,-4);    
        
        @list($w1,$h1) = getimagesize($_FILES[$file]['tmp_name']);    
        
        if($file_size > $maxsize)  // daca e mai mare decat dimensiunea maxima
        {
            $this->mess = "Dimensiunea maxima permisa este ".($maxsize/25600)." Kb";        
        }
        else if(!in_array($tip,$allow_extension)) 
        {
            $this->mess = "Acest format de fisier nu este permis";
        }
        else if(($w1 != $w) && ($h1 != $h))
        {
            $this->mess = "Va rugam sa uploadati imagine de <b>".$w." x ".$h." pixel</b>";
        }
        else if (file_exists($cale.'/'.$file_name)) // daca fisierul neredenumit exista in director
        {
            $this->mess = "Acest fisier exista deja";        
        }
                                                                                                              
        else
        {
            if($tip == "jpeg")    $ext = "jpg";
            if($tip == "/gif")    $ext = "gif";
            if($tip == "flash")    $ext = "swf";
            $new_name = $rename.'.'.$ext;
            
            $new_path = $cale.'/'.$new_name;
            if(file_exists($cale.'/'.$new_name))
            {
                $this->mess = "Acest fisier exista deja";        
            }            
            else
            {
                move_uploaded_file($_FILES[$file]['tmp_name'], $cale.'/'.$new_name);                    
                    
                chmod($new_path,0777);
                $this->filename = $new_name;
                $this->mess = "";
            }    
        }
    } 

MarPlo Mesaje: 4343
Apelarea metodei din acea clasa pare in regula.
Poate ca nu e definita bine variabila $nrf cu numarul de poze din director.

Cod: Selectaţi tot

$files = glob('foldere/furnizori/id_'. $login->getMemberId() .'/*.jpg');
$nrf = count($files);  // numarul de fisiere gasite 

adrian_ady Mesaje: 80
Am reusit pana la urma sa uploadez imaginile, am schimbat clasa, calea, etc. Problema apare cand se doreste sa se stearga unele fotografii sau cand se alege una din ele ca fiind cea care va fi expusa prima(in mesajul succint).
Cu formula 'Adauga foto', sa zicem din intamplare caci era varianta pentru upload numai o imagine, merge bine; cu cea pentru stergere insa nu functioneaza nimik. Eu m-am straduit, am facut ce am crezut dar fara rezultate; acum apelez din nou la un expert.

Cod: Selectaţi tot


//INCARCARE (IN HEAD)

if(isset($_POST['Upload']))
{ 
        $cale = "foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$_GET['id'];
        $files = glob($cale . "/*.jpg");
        if ($files)
        $count = count($files);
        $total_entries = $count / 2;
                           
        $upload = new Upload();
        if($_GET['addfoto']=='foto')
         $upload->uploadImageThumbRenameResize('file',"foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$_GET['id'],($total_entries + 1),512000,500,113,array("jpeg"));
         if($upload->getMessage()) $mesaj_upload =  '<br>'.$upload->getMessage();
	else header('Location: '.$_SERVER['PHP_SELF']);
	
	//UPLOAD SI STERGERE
	
	 <div id="divupload" style="display:<? if(isset($_GET['addfoto'])) echo 'block'; else echo 'none';?>; margin: 0 auto; max-width: 500px;">   
    <form action="" method="post" enctype="multipart/form-data">
                <p class="error"><?=$mesaj_upload?></p>
        <span class="mic-gri">Incarcati numai imagini format .jpg 135 x 96 px, maxim 20Kb.
        &nbsp; [<a nohref="javascript://" onClick="getElementById('divupload').style.display='none'" style="cursor: pointer;"><b> <i class="fa fa-close"></i> </b></a>]</span>
            
        <input name="file" type="file" class="inputcol" id="file" style="max-width: 300px;" /> &nbsp;
        <button class="buton" name="Upload" id="Upload" onclick="document.formName.submit();"><i class="fa fa-upload"></i> &nbsp; Upload</button>
     
    </form>  
    <br />
  </div>

//---------------------------
	
	 <a style="cursor: pointer;" onClick="location.href='<?=$_SERVER['PHP_SELF']?>?addfoto=foto&id=<?=$id?>'" style="cursor:pointer;">Adauga foto</a>
		<br /><br />
		
		<a style="cursor: pointer;" onClick="location.href='<?=$_SERVER['PHP_SELF']?>?deletefoto=foto&id=<?=$id?>'">Sterge foto</a>
	
//DISPLAY FOTO	
	                
<?
 $cale = "foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$id;
 $files = glob($cale . "/*.jpg");
 if ($files)
 $count = count($files);
     {
?>
  <div class="gallery" id="gallery-small">
  
 <? 
$total_entries = $count / 2;
$limit = $total_entries;
$start_img = 1;
for($i=$start_img; $i<min($total_entries + 1, ($start_img + $limit)); $i++) {
  
    echo '<a href="'.$cale.'/'. $i .'_big.jpg" rel="gallery" name=".$i."><img src="'.$cale.'/'. $i .'_small.jpg" alt="&nbsp; '. $i .' &nbsp;" title="Imagine '. $i .'" /></a>';
}

?>
<br /><br />
  </div>
  
      <script type="text/javascript">
      $(document).ready(function() {
      $('#gallery-small a').fancybox();
        });
      </script>
<?
}
?>

MarPlo Mesaje: 4343
Partea de sters un anumit fisier din director, cand sunt mai multe e mai complicata. Trebuie creat un fel de FileManager
La clic pe un buton /Link se afiseaza intr-o fereastra fisierele /imaginile din director, apoi la clic pe imagine se adauga cu javascript numele ei intr-un input-hidden, iar la click pe un buton Submit se acceseaza scriptul php de stergere, care sa preia numele din acel Input.
Asta e ideea, pe partea de cod nu ma bag sa fac eu.

adrian_ady Mesaje: 80
Imi dau seama de complicitatea functiei. Am optat pentru a sterge cate o imagine(small + big) pe click, incepand cu ultima adaugata($last). Cum formulez valoarea $last?

Cod: Selectaţi tot

if(isset($_POST['Upload']))
{ 
        $cale = "foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$_GET['id'];
        $files = glob($cale . "/*.jpg");
        if ($files)
        $count = count($files);
        $total_fotos = $count / 2;
        if($_GET['addfoto']=='foto')
        $upload = new Upload();
        $upload->uploadImageThumbRenameResize('file',"foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$_GET['id'],($total_fotos + 1),512000,800,566,array("jpeg"));  
        if($upload->getMessage()) $mesaj_upload =  '<br>'.$upload->getMessage();
        else header('Location: '.$_SERVER['PHP_SELF']);
}
if(isset($_GET['deletefoto']))	
{
               
	$last= ???
	{
	$cale_small = "foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$_GET['id']."/".$last."_small.jpg";
	$cale_big = "foldere/furnizori/id_".$login->getMemberId()."/oferta_id_".$_GET['id']."/".$last."_big.jpg";
	if(file_exists($cale_small)) unlink($cale_small);
	if(file_exists($cale_big)) unlink($cale_big);
	}

MarPlo Mesaje: 4343
Daca ai cate 2 tipuri ale aceleiasi imagini (small si big), preiei cu glob() fisierele si imparti numarul la 2.
Incearca asa:

Cod: Selectaţi tot

$last = count(glob($cale . "/*.jpg")) / 2; 

adrian_ady Mesaje: 80
Merci, am inteles ideea, am rezolvat! Multumesc!

Subiecte similare