Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ajax][js][php] upload plikow i operacje na tym pliku
Forum PHP.pl > Forum > Przedszkole
puz219
Witam.

Uploaduje sobie plik na serwer przy pomocy ajaxa i iframe. Plik uploaduje sie poprawnie, tylko chciałbym z tego pliku wyciągnąć pewne informacje, wiec wczytuje za pomocą advajaxa stronę, na której jest skrypt, który przetwarza dane z wcześniej uploadowanego pliku, tylko, że zazwyczaj zwraca mi błąd, ze plik nie istnieje:

Warning: fopen(tmp/dane.csv) [function.fopen]: failed to open stream: No such file or directory in C:\AppServ\www\test\index.php on line 63

Wydaje mis się, ze jest to związane z tym, ze skrypt wczytuje się zbyt wcześnie, zanim plik zdąży się zuploadować na serwer.

Oto mój formularz:
  1. <?php
  2. echo "<div id=\"frame_".$_GET["frame"]."\">";
  3. echo "<form action=\"".$PHP_SELF."?action=uplFile\" target=\"file_upload_frame_".$_GET["frame"]."\" method=\"post\" enctype=\"multipart/form-data\">
  4.    <input type=\"file\" name=\"file\" id=\"file\" onChange=\"upl(this, '".$_GET["frame"]."')\">
  5. </form></div>";
  6.  
  7. echo "<iframe name=\"file_upload_frame_".$_GET["frame"]."\" style=\"display: none\"></iframe>";
  8. ?>


A to funkcja, upl() w js, ktora odpowiada za wyslanie formularza:
  1. function upl(upload, id) {
  2. var roz = /\.csv/i;
  3. var filename = upload.value;
  4. var stat;
  5.  
  6. if (filename.search(roz) == -1) {
  7. alert('niedozwolony format pliku');
  8. upload.form.reset();
  9. return false;
  10. }
  11. else {
  12. upload.form.submit();
  13. upload.disabled = true;
  14. getData('index.php?show=proceed&filename=' + filename, 'frame_' + id);
  15. return true;
  16. }
  17. }


natomiast funkcja getData(), to funkcja wczytująca stronę do diva, napisana w advajax.

Bardzo proszę o pomoc.
erix
Cytat
Wydaje mis się, ze jest to związane z tym, ze skrypt wczytuje się zbyt wcześnie, zanim plik zdąży się zuploadować na serwer.

Masz rację. Wykonuj getData, gdy formularz zostanie już wysłany. Spróbuj może dokleić wywołanie getData dla zdarzenia onLoad dla tej ramki.
puz219
Cytat(erix @ 22.11.2008, 20:16:09 ) *
Masz rację. Wykonuj getData, gdy formularz zostanie już wysłany. Spróbuj może dokleić wywołanie getData dla zdarzenia onLoad dla tej ramki.



hmm, to nic nie da, bo jeśli załączę getData do onload w ramce, to będzie mi chciało wczytać zawartość pliku, ale...... do diva w tej ramce, a mi chodzi o to, żeby wczytało do diva ale na stronie, gdzie ta znajduje się ramka.

Może trochę zamotałem, ale mam nadzieje, ze rozumiesz o co mi chodzi.
erix
Rozumiem, ale nie masz racji. winksmiley.jpg

zdarzenia w atrybucie tylko poglądowo; doczepiamy oczywiście nieinwazyjnie

Kod
<iframe ... onload="getData()" />


Ale zdarzenie doklejasz po użyciu submit().
puz219
o kurcze, no to teraz mnie zaskoczyłeś, myślałem o czymś innym, a teraz to prawdę powiedziawszy nie mam pojęcia, jak to dokleić do iframe'a.

No dobra, zrobiłem tak:

do iframe dodałem id
  1. <?php
  2. echo "<iframe id=\"file_upload_frame_".$_GET["frame"]."\" name=\"file_upload_frame_".$_GET["frame"]."\" style=\"display: none\"></iframe>";
  3. ?>


teraz utworzylem funkcje getDataOnLoad()

  1. function getDataOnLoad(filename, id) {
  2. getData('index.php?show=proceed&filename=' + filename, 'frame_' + id);
  3. }


no i zmodyfikowałem funkcje upl()
  1. function upl(upload, id) {
  2. var roz = /\.csv/i;
  3. var filename = upload.value;
  4. var iframe = document.getElementById('file_upload_frame_' + id);
  5.  
  6. if (filename.search(roz) == -1) {
  7. alert('niedozwolony format pliku');
  8. upload.form.reset();
  9. return false;
  10. }
  11. else {
  12. upload.form.submit();
  13. iframe.onload = getDataOnLoad(filename, id);
  14. upload.disabled = true;
  15. return true;
  16. }
  17. }


ale coś mi to nie chce działać, gdzie popełniłem błąd?
erix
Gdyby bez parametrów, to by było ok.
Kod
iframe.onload = function(){ getDataOnLoad(filename, id); }


Chyba powinno działać.
puz219
Strona się wczytuje, tylko nadal ten sam błąd:

Warning: fopen(tmp/dane.csv) [function.fopen]: failed to open stream: No such file or directory in C:\AppServ\www\test\index.php on line 63
erix
A nie ma błędu po stronie pliku php?
puz219
//EDIT: jednak błąd był w ścieżce dostępu do pliku, jak strona nie była wczytywana ajaxem, to wszystko było ok, ale po wczytaniu ajaxem, zmieniała sie ścieżka dostępu do katalogu.

Wielkie dzięki erix.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.