Delay progress bar 100% si mesaj final in script upload

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

Delay progress bar 100% si mesaj final in script upload

La un scrip php /js de upload.
Codul php:

Cod: Selectaţi tot

session_start();

if(isset($_SESSION['nume']))
{
$savefolder = 'poza-profil';
$max_size = 5000;
$allowtype = array('jpg', 'jpeg');

$rezultat = '';
// Daca este primit din formular un fisier valid
if(isset($_FILES['myfile']))
{ // daca nu e selectat nici un fisier sa dea eroare
if($_FILES['myfile']['name'] == '')
{ $rezultat = '<img src=/imagini/stare-error.png> <font color=red>Alege o poza!</font>'; }

// daca e selectat fisieru, spor la incarcat 
else if(strlen($_FILES['myfile']['name'])  > 2) 
{ 
if(isset($_FILES['myfile'])) {
  // Verifica daca fisierul are tipul de extensie permis
  $type = end(explode(".", strtolower($_FILES['myfile']['name'])));
  if (in_array($type, $allowtype)) {
    // Verifica daca fisierul are marimea permisa
	if ($_FILES['myfile']['size']<=$max_size*1000) {
      // Daca nu sunt erori in procesul de copiere
      if ($_FILES['myfile']['error'] == 0) {
	    // Seteaza locatia si numele pt. incarcare pe server
		$id = $_SESSION['id'];
		$folder = 'poza-profil/';
		$thefile = $folder . $id. '.0.'. $type;
// redimensionare poza // 
function fn_resize($image_resource_id,$width,$height) {
$target_width =1000;
$target_height =1000;
$target_layer=imagecreatetruecolor($target_width,$target_height);
imagecopyresampled($target_layer,$image_resource_id,0,0,0,0,$target_width,$target_height, $width,$height);
return $target_layer;
}

$source_properties = getimagesize($_FILES['myfile']['tmp_name']);
list($width, $height) = getimagesize($_FILES['myfile']['tmp_name']);
    $file_width=$width;
    $file_height=$height;
if($source_properties[0] > 1000 AND $source_properties[1] > 1000) {   
$image_resource_id = imagecreatefromjpeg($_FILES['myfile']['tmp_name']);  
$target_layer = fn_resize($image_resource_id,$source_properties[0],$source_properties[1]);

if(!imagejpeg($target_layer, $thefile))
{
          $rezultat = '<img src=/imagini/stare-error.png>
            Sa intamplat ceva, nu stiu ce este, revin-o peste cateva minute pentru a 
            schimba poza de profil! Daca problema persista contacteaza-ne!';
}
        else {
          // Returneaza succes
		  $rezultat = '<img src=/imagini/stare-succes.png>
<font color=green>Poza ta de profil a fost incarcata cu succes, aceasta va aparea pe site dupa ce o va 
aproba un administrator al site-ului, daca aceasta respecta Termenii si conditiile site-ului!</font>';
        }


}
// end redimensionare poza //		
      }
    }
  }
  else { $rezultat = '
  <br><font color=red> <img src=/imagini/stare-error.png> 
  Fisierul <font color=blue>'. $_FILES['myfile']['name']. '</font> 
  nu are tipul de extensie permis, se accepta doar format .jpg sau .jpeg de maxim 5 MB</font>'; }
}
}
} 
}
// daca e delogat sa dea eroare //
else
{
$rezultat = '<img src=/imagini/stare-error.png> <font color=red>Pentru a schimba poza de profil trebuie sa fi logat pe site. Reincarca aceasta pagina !!!</font>';
}

// Codeaza cu 'urlencode()' variabila $rezultat si o returneaza in 'onload', intr-un tag BODY
$rezultat = urlencode($rezultat);
echo '<body onload="parent.doneloading(\''.$rezultat.'\')"></body>';
- Am mici probleme cu procentul in progress bar. am incercat sa modific ce aveam si am ajuns la rezultatul final :

Cod: Selectaţi tot

function uploadimg(theform){
var file = $('#myfile').val();

	if(file.length == 0)
{ $('#upload_info').html('<font color="red">Selecteaza un fisier</font>'); }
else {
  theform.submit();
// progres bar //
 var bar = $('.upload_info'); 
 var percent = $('.upload_info'); 
 var status = $('#upload_info'); 
 $('form').ajaxSubmit({
   beforeSend: function() {
     status.empty(); 
     var percentVal = '0%'; 
     bar.width(percentVal) 
     percent.html(percentVal, "upload_info");	 
   }, 
   uploadProgress: function(event, position, total, percentComplete) { 
     var percentVal = percentComplete + '%'; 
     bar.width(percentVal) 
     percent.html(percentVal, "upload_info"); 

   }, 
   complete: function(xhr) { 
     bar.width("100%"); 
     percent.html("100%"); 
     status.html(xhr.responseText, "upload_info");
  } 
 });
 return false;
// end progres bar //
}
}

function doneloading(rezultat) {
  rezultat = decodeURIComponent(rezultat.replace(/\+/g,  " "));
  document.getElementById('upload_info').innerHTML = rezultat;
}

function setStatus(theStatus, theloc) {
  var tag = document.getElementById(theloc);
  if (tag) {
    tag.innerHTML = '<b>'+ theStatus + "</b>";
  }
}
Cand se face 100%, exista oarecum un delay intre 100% si mesajul final.
Sa facut 100% si dureaza cateva fractiuni de secunde sa apara mesajul final "Sa incarcat poza, bla bla bla"
Si cateodata dupa ce apare mesajul final, dispare imediat, abia vezi ca aparut mesajul final si dispare inainte sa apuci sa citesti 2 cuvinte din el.

MarPlo Mesaje:4343
Problema cu delay si intrerupere la 100% progress bar in acel script ar putea fi incompatibilitate intre JS si raspunsul de la php:

Cod: Selectaţi tot

echo '<body onload="parent.doneloading(\''.$rezultat.'\')"></body>';
Deoarece se apeleaza in js functia doneloading(), plus prelucrrarea lui in jquery, la:

Cod: Selectaţi tot

complete: function(xhr) { 
     bar.width("100%"); 
     percent.html("100%"); 
     status.html(xhr.responseText, "upload_info");
}
- Probabil trebuie sa schimbi forma raspunsului de la php, sa fie prelucrat doar in functia de la "complete".

cadou Mesaje:328
Ok, ms. Am incecat cate ceva, dar nu am reusit. Asa ca am renuntat si am pus un gif loading si aia e... am renuntat la progress bar with procent ...

Subiecte similare