Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ajax][js][php] upload plikow i operacje na tym pliku
puz219
post
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
Go to the top of the page
+Quote Post
puz219
post
Post #3





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował puz219 22.11.2008, 20:28:50
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Rozumiem, ale nie masz racji. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

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

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


Ale zdarzenie doklejasz po użyciu submit().
Go to the top of the page
+Quote Post
puz219
post
Post #5





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

Ostrzeżenie: (0%)
-----


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?

Ten post edytował puz219 22.11.2008, 20:32:32
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Gdyby bez parametrów, to by było ok.
Kod
iframe.onload = function(){ getDataOnLoad(filename, id); }


Chyba powinno działać.
Go to the top of the page
+Quote Post
puz219
post
Post #7





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie ma błędu po stronie pliku php?
Go to the top of the page
+Quote Post
puz219
post
Post #9





Grupa: Zarejestrowani
Postów: 201
Pomógł: 0
Dołączył: 1.07.2007

Ostrzeżenie: (0%)
-----


//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.

Ten post edytował puz219 23.11.2008, 11:23:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 04:20