Autor Zpráva
noby
Profil
Dobrý den. Na internetu jsem našel návod podle kterého jsem si vytvořil ajax upload. Vše funguje jak má až na to že se upload nedokončí. Nevíte v čem je chyba? Chmod mám nastavený na 777 tudiž na právo pro zápis.
<script language="javascript" type="text/javascript">
<!--
function startUpload(){
      document.getElementById('f1_upload_process').style.visibility = 'visible';
      document.getElementById('f1_upload_form').style.visibility = 'hidden';
      return true;
}

function stopUpload(success){
      var result = '';
      if (success == 1){
         result = '<span class="msg">Soubor byl úspěšně nahrán!<\/span><br/><br/>';
      }
      else {
         result = '<span class="emsg">Došlo k chybě při nahrávání souboru!<\/span><br/><br/>';
      }
      document.getElementById('f1_upload_process').style.visibility = 'hidden';
      document.getElementById('f1_upload_form').innerHTML = result + '<label>File: <input name="myfile" type="file" size="30" /><\/label><label><input type="submit" name="submitBtn" class="sbtn" value="Upload" /><\/label>';
      document.getElementById('f1_upload_form').style.visibility = 'visible';      
      return true;   
}
//-->
</script>
<form action="inc/upload.php" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="startUpload();" >
                     <p id="f1_upload_process">Čekejte prosím...<br><img src="images/loader.gif" /><br></p>
                     <p id="f1_upload_form" align="center"><br>
                         <label>File:  
                              <input name="myfile" type="file" size="30" />
                         </label>
                         <label>
                             <input type="submit" name="submitBtn" class="sbtn" value="Upload" />
                         </label>
                     </p>
                     
                     <iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>


upload.php
<?php
   // Edit upload location here
   $destination_path = '/../../images/photo/';

   $result = 0;
   
   $target_path = $destination_path . basename( $_FILES['myfile']['name']);

   if(@move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
      $result = 1;
   }
   
   sleep(1);
?>

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script>   
Alphard
Profil
Zkoušel jste v PHP (klidně bez ajaxu) zrušit potlačení výpisu chyb a podívat se, v čem je problém?
noby
Profil
Alphard:
To jsem bohužel zatím nezkoušel, ale vím že když oddělím javascript tak upload nezačne ani provádět. Zjistil jsem to dnes když jsem zapomněl k formuláři přidat javascript, ale to je vedlejší. Hlavně teď musím dořešit ten upload. A jelikož se mi například takový obyčejný upload nelíbí tak jsem zvolil ajax upload.
Alphard
Profil
Tak hledejte chybu. Vypisuje něco php? js konzole? Odešle se soubor? Odešle se aspoň formulář? Zavolá se ta funkce?
Tohle všechno jde zjistit během minuty a hned víte, co opravovat.
noby
Profil
No vypíše mi to akorát hlášku: Došlo k chybě při nahrávání souboru!. Takže nevím kde dále je chyba
Alphard
Profil
PHP vypisuje hlášky, když to někdo nezakáže. Javascript také umí zobrazovat chybové zprávy. Síťovou komunikaci lze sledovat. Já mám dobré zkušenosti např. s Firebugem. Nevím, co máte blbě, snad by to mohlo fungovat, mně to uploaduje (i když se pak nezobrazí formulář pro další soubor).
noby
Profil
Alphard:
Právě že tohle je celý kód. Nic víc k tomu ajax uploadu nepatří. Možná by ještě mohla být špatná cesta, ale to si nemyslím jelikož skript upload.php je složce: admin/inc a tyto tečky:
/../../
vyjedou ze složky admin na root kde je složka images. Tak jsem to zkoušel u v samostatném souboru a ani tam nejde
Davex
Profil
"tyto tečky: /../../ vyjedou ze složky admin na root kde je složka images."
Kdepak, úvodní lomítko přepne do kořene souborového systému, kde se adresář images nenalézá - měli by to být bez něj ../../.
noby
Profil
Davex:
Dobře, první lomítko jsem odstranil, a stále nejde. Nejde mi ani demo. Tak mě napadlo nebude to špatně nainstalovaný ovladač k windows?
Davex
Profil
Tak si zapni zobrazování chyb PHP a vyzkoušej upload script samostatně bez AJAXu. Bez konkrétní chyby se nepohneme dále.
noby
Profil
Davex:
Tas něco nového. To zobrazení chyb nadávám jsem se díval a jako fakt to nedám
Davex
Profil
Na začátek upload skriptu přidej řádky
ini_set('display_errors', 1);
error_reporting(E_ALL);
a soubor nahraj přes samostatný formulář, abys viděl chybový výstup.
noby
Profil
Davex:
PHP nezobrazuje vůbec žádnou chybu.
Davex
Profil
Ještě smaž ten zavináč před move_uploaded_file().
noby
Profil
Davex:
Pořád mi to píše: Došlo k chybě při nahrávání souboru! a to i když odstraním z formuláře
onsubmit="startUpload();"

A zde je upravený script:
<?php
   ini_set('display_errors', 1);
   error_reporting(E_ALL);
   // Edit upload location here
   $destination_path = '../../images/photo/';

   $result = 0;
   
   $target_path = $destination_path . basename( $_FILES['myfile']['name']);

   if(move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
      $result = 1;
   }
   
   sleep(1);
?>

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script>   
Alphard
Profil
noby:
Vy určitě pořád posíláte formulář do toho skrytého iframe, že ano?
noby
Profil
Alphard:
Tak to nevím, ale dělal jsem to podle tohoto návodu, kde ten skrytý iframe také je.
Davex
Profil
S Alphardem jsme psali, abys to vyzkoušel bez JavaScriptu, tzn. z formuláře odeber atributy target a onsubmit.
<form action="inc/upload.php" method="post" enctype="multipart/form-data">
noby
Profil
Davex:
I tak jsem měl pravdu nevypisuje to žádnou chybu. Nevím si s tím už rady. A vzdávat to taky nechci.
Davex
Profil
Je možné, že je na tvém hostingu zakázána funkce ini_set() a zobrazování chyb se zapíná jinak. Zkus pohledat v administraci nebo nápovědě.

Nebo je zkus zapnout konfigurací v souboru .htaccess podle zapnutí chybových hlášek.
noby
Profil
Davex:
Ani zobrazování chyb pomoci .htaccess nezobrazí žádnou chybu
noby
Profil
Mám snad chybu v pc? Jelikož to známym také funguje i na mém webu
Michel
Profil
noby:
Může to být i v prohlížeči. Např u Coppermine galerie mi hromadné nahrávání nefunguje ve FF, ale v IE funguje zcela normálně. Ale nevím čím to je.
noby
Profil
Zkoušel jsem to i v Google Chrome kde to známemu funguje, ale mi to v Google Chrome taky nefunguje. Jinak používám IE 9
noby
Profil
Takže čím může být že mi nefunguje Ajax Upload?
Davex
Profil
Pokud ti nejde upload nikam, tak to není tímto skriptem, ale něčím v počítači (např. virem, antivirem, firewallem) nebo někde po cestě - možná routerem nebo skvrnami na slunci. Třeba takové AVG se někdy ke skriptům na stránkách chová dost drsně.
noby
Profil
Davex:
Mám avast na pc i na notebooku mám Windows 7 na pc i notebooku. Rozdíl je v tom, že na notebooku jde, ale na stolním PC ne. Virus nemám jelikož jsem PC testoval antivírem.
Davex
Profil
Takže máš rozbitý stolní PC a to tady nevyřešíme. Vlastně to ani nesouvisí s PHP.
noby
Profil
Davex:
Já vím, že to sem nepatří. Nevíte co bych tak mohl mít rozbitého na stolním PC? To by přece nefungoval žádný jiný upload. Jenže mě jiné uploady od ajax fungují.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0