Autor Zpráva
Mara
Profil *
Čao, potřebuji help, mám formulář

<form method="post" enctype="multipart/form-data" name="form">
<label>Vlož obrázek:</label><br />
<input name="zdroj" type="file" size="20" onchange="javascript:ftp_source();">
</form>


a chtěl bych zjistit úplnou cestu k vybranému souboru přes js. Pomocí
document.form.zdroj.value;


mi to akorát zjistí název souboru. Šlo by to přes $_FILES v php, ale to by znamenalo nutný refresh stránky, a to já nechci, potřebuji to zjistit "za pochodu".

Díky
Chamurappi
Profil
Reaguji na Maru:
Pomocí document.form.zdroj.value; mi to akorát zjistí název souboru
To vrací v Explorerech celou cestu, jinde ne, pokud vím.

Šlo by to přes $_FILES v php
To vrací v Explorerech celou cestu, jinde ne, pokud vím.
Příští verze Exploreru bude také při výchozím nastavení pracovat jen se samotným jménem souboru bez cesty. Ochrana soukromí je neúprosná.

ale to by znamenalo nutný refresh stránky, a to já nechci
Element <form> může mít target mířící na <iframe>.
Mara
Profil *
No myslel jsem že existuje nějaký jednoduchý příkaz, který by zjistil úplnou cestu ve všech prohlížečích.
$_FILES vrací úplnou cestu ve všech prohlížečích, vždyť php je serverový jazyk.
Iframe bych použil nerad, už jen kvůli validitě, to bych musel všude měnit doctype:(
peta
Profil
Mara
'chtěl bych zjistit úplnou cestu k vybranému souboru přes js'
Javascript neumi pracovat se soubory, javascript je jazyk spousteny www prohlizecem. To je zaklad.
www prohlizec ti nesmi dovolit pracovat se soubory, jinak by mohlo dojit k jejich poskytnutim cizi osobe. Hodne by to vadilo u bankovnich kont.
www prohlizec sam o sobe neumi prohlizet soubory na serveru. K tomu slouzi programy na serveru urcene, proto te odkazuji na PHP $files.
Existuje jediny zpusob, jak otevrit soubor na aktualnim pocitaci a to je MS ActiveX. Komunikovat s tim muzes jen ve www prohlizeci Explorer. A nevim, co to presne umi, ale dostane se to k souborum a prenasi to cervi tam a zpet. Takze IE nepouzivam. Vyjimecne na windows.update, coz dela totez se soubory.

Javascriptem muzes pouze zprostredkovat komunikaci mezi tvym PHP programem, ktery umi zjistit informace o souboru a www prohlizecem.

Jediny zpusob, jak muze javascript neco delat ze souborem je, ze si jej otevre, pokud vi nazev. Otevrit si ho muze bud do aktualni stranky nebo do frame. Ve frame si muzes zjistit pak nektere informace, jako delku html kodu, url=tentoram.location.href a pod. Jenze url si nepotrebujes zjistovat, kdyz ji musis do IFRAME href=url zadat.

Zprostredkovani = Ajaxove metody
zde nekolik tipu na ajax
http://www.volny.cz/peter.mlich/www.htm#mssub16
jinak google.com ajax simple example
Neni treba refreshovat stranku, muzes do ni pridat tag script, iframe s jinou strankou a pod.
Chamurappi
Profil
Reaguji na Maru:
$_FILES vrací úplnou cestu ve všech prohlížečích, vždyť php je serverový jazyk.
Jenže serverový jazyk ví o souborech jen to, co mu pošle prohlížeč. Ten mu posílá POSTem hlavičku:
Content-Disposition: form-data; name="jméno-políčka"; filename="jméno-souboru.přípona"
Pokud se prohlížeč rozhodne, že ti cestu nikdy neřekne (brání se sdělit ji v JS), tak ji neřekne ani tvému serveru.

Iframe bych použil nerad, už jen kvůli validitě, to bych musel všude měnit doctype:(
Jestli je tebou uvedený kus kódu validní:
1) Máš tam <br />, ale zároveň <input> bez lomítka => deklaruješ HTML.
2) Máš tam <label> => deklaruješ HTML 4.
3) Uvádíš atribut name na <form>u => deklaruješ HTML 4.01.
4) <label> a <input> neobaluješ blokovým elementem => deklaruješ HTML 4.01 Transitional.
V HTML 4.01 Transitional je <iframe> dovolený. Navíc validita není důležitá, <iframe> spolehlivě funguje při jakémkoliv <!doctype> a vyhýbat se mu jen kvůli nemyslícím byrokratům z konsorcia není zrovna moudré. Ty se mu ovšem vyhneš hlavně kvůli tomu, že problém s cestami uploadovaných souborů nevyřeší.


Reaguji na peta:
www prohlizec sam o sobe neumi prohlizet soubory na serveru.
Fascinující.

Existuje jediny zpusob, jak otevrit soubor na aktualnim pocitaci a to je MS ActiveX
Ukaž.

Vyjimecne na windows.update, coz dela totez se soubory.
Důvěryhodné ActiveX se spouští s vyššími oprávněními, stejně jako v Mozille různá rozšíření. Pokud v prohlížečích funguje něco víc, než by mělo, je to bezpečnostní díra, na kterou nelze moc spoléhat, takže ji nemá smysl zmiňovat.
Mara
Profil *
No ajax jsem už zkoušel, funguje, vloží mi do již načtené stránky soubor ftp.php, a to bez refreshe, dokonce jede v IE i v FF a Opeře. Když mám třeba v ftp.php echo "něco"; tak se to provede i bez aktualizace. Ale to $_FILES prostě ne. Asi proto, že se neprovede $_POST z toho formuláře.
function ftp_source()
{
  var source = document.form.zdroj.value;
  
  if (source != 0)
  {
    if (window.ActiveXObject)
    {
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
      httpRequest = new XMLHttpRequest();
    }
    httpRequest.open("GET", "ftp.php?source="+source, true);
    httpRequest.onreadystatechange= function () {processRequest(); } ;
    httpRequest.send(null);
  }
  else
  {
    document.getElementById("ukazka").innerHTML = "";
        
  }
}
function processRequest()
{
  if (httpRequest.readyState == 4)
  {
    if(httpRequest.status == 200)
    {
      var mistoZobrazeni = document.getElementById("ukazka");
      mistoZobrazeni.innerHTML = httpRequest.responseText;
    }
    else
    {
        alert("Chyba pri nacitani stanky " + httpRequest.status +":"+ httpRequest.statusText);
    }
  }
}
Chamurappi
Profil
Reaguji na Maru:
XMLHttpRequestem můžeš nasimulovat i odeslání POSTem, ale nikdy nemůžeš poslat obsah souboru z návštěvníkova počítače, to je výsada skutečných formulářů.
Mara
Profil *
Reaguji na Chamurappiho:
Pokud by to pomohlo k tomu, abych pak jakkoli zjistil tu cestu k souboru, třeba $_FILES, tak bych rád věděl, jak to pls nasimulovat. Mi jde jen o tu cestu, samotný přenos zprostředkuju přes ftp v phpéčku.
Chamurappi
Profil
Reaguji na Maru:
Pokud ti prohlížeč nechce cestu říct, tak ti ji neřekne. Tečka. Neexistuje žádná tajná value <input>u, kterou by dokázali vyloupnout jen místní šamani.

POST lze nasimulovat tak, že vygeneruješ celý požadavek ve formátu „multipart/form-data“ přesně tak, jak ho posílá prohlížeč. Sestavíš si ho písmenko po písmenku sám JavaScriptem, vyplníš si názvy políček, vyplníš si i hodnoty. Když ti ale v JS nejde zjistit cesta k souboru, nemůžeš ji vepsat do POSTovaného požadavku.
peta
Profil
if (ajax.newRequest()!=null)
{
ajax.sendGet = function(url,args,func)
{
ajax.func = func;
var z = ajax.newRequest();
if (args!=="") {url+= ((url.indexOf("?")>-1)?"&":"?") + args;}
z.open("GET",url,true);
z.send(null);
};
ajax.sendPost = function(url,args,func)
{
ajax.func = func;
var z = ajax.newRequest();
z.open("POST",url,true);
z.setRequestHeader('Content-type','application/x-www-form-urlencoded' );
// z.setRequestHeader('Content-type','application/x-www-form-urlencode d; charset=UTF-8'); //+charset
z.send(args);
};

predpokladam, ze si s tim poradis a uprovis si svuj GET na POST.
Jenze ono se to vzdy odesila. Jenom moderni prohlizece to neukazuji ve status. Mam pocit, ale ze to jde nekde zapnout, aby i to ukazoval.
Mara
Profil *
Reaguji na petu:
ok díky za kód, zkusím to s tím POSTem.
V Opeře jsem projel celé nastavení ale nikde nebylo zobrazování statusu.
Chamurappi
Profil
Reaguji na Maru:
To by mě zajímalo, co vyplníš do proměnné „args“. Protože petův kód sám o sobě nic nedělá, jen posílá vstupy přes HTTP. Samotná metoda POST ti žádná zázračná data nevyčaruje.

Už sis ověřil, že prohlížeče (vyjma Exploreru) cestu neposílají na server? Že ji tedy nemůžeš zjistit ani v PHP?
ninja
Profil
Mara: Mohu se zeptat k cemu ti je vlastne dobre vedet, jestli soubor "fotka.jpg" ma v "C:\obrazky", nebo "D:\moje\fotky\nahata-pritelkyne\fotka.jpg" a hlavne proc by ti to mel uzivatel sdelovat?
Mara
Profil *
přes $_files mi to vyhodí ve všech prohlížečích to samé - pole s názvem $file:
$file = $_FILES['file'];
a pro mě je důležitá tahleta část pole: $file[tmp_name];
ta mi předává cestu k dočasnému souboru, který se vytvořil (asi) při výběru obrázku v prohlížeči. Tu potřebuji abych při přenosu na server věděl, který soubor a odkud vlastně mám uploadovat.
Takže se omlouvám všem za způsobené zmatky, myslel jsem adresu temporary souboru, a né toho opravdového.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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