Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i UploadIfy
Forum PHP.pl > Forum > PHP
marcinpruciak
Mam przerobić skrypt uploadu w PHP, tak żeby pokazywał pasek postępu. Jedyny znany mi sposób to skorzystanie z gotowaca. Znalazłem takiego fajnego, nazywa się UploadIfy. Uruchomiłem go, działa, spełnia moje wymagania, ale...

Ten upload który mam przerobić nie tylko wrzuca plik, ale też zapisuje do bazy informacje o tym pliku. 

Jak przerobić ten UploadIfy żeby zwracał mi do skryptu nazwę pliku?

http://www.uploadify.com/documentation/

  1. <link rel="stylesheet" href="uploadify/uploadify.css" type="text/css" />
  2.  
  3. <script type="text/javascript" src="./uploadify/jquery-1.3.2.min.js"></script>
  4. <script type="text/javascript" src="./uploadify/jquery.uploadify.js"></script>
  5.  
  6. <script type="text/javascript">
  7.  
  8. $(document).ready(
  9. function() {
  10.  $("#fileUpload").fileUpload({
  11.   'uploader': 'uploadify/uploader.swf',
  12.   'cancelImg': 'uploadify/cancel.png',
  13.   'script': 'uploadify/upload.php',
  14.   'folder': 'pliki',
  15.   'multi': false,
  16.   'displayData': 'speed'
  17.  });
  18.  
  19. });
  20.  
  21. </head>
  22.  
  23.  
  24. <div id="fileUpload">You have a problem with your javascript</div>
  25. <a href="javascript:$('#fileUpload').fileUploadStart()">Start Upload</a>


Nikt nie ma pomyśłu?
A może jakiś prostrzy sposób na zrobienie progressbara z zachowaniem starego skryptu?

Wpadłem na to, żeby nazwę pliku wrzucić do sesji, ale plik php którego używa ajax nie chce zapisać nic w sesji:
  1. <?php session_start();
  2. // Uploadify v1.6.2
  3. // Copyright (C) 2009 by Ronnie Garcia
  4. // Co-developed by Travis Nickels
  5. if (!empty($_FILES)) {
  6.    $tempFile = $_FILES['Filedata']['tmp_name'];
  7.    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . '/';
  8.    $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
  9.    
  10.    // Uncomment the following line if you want to make the directory if it doesn't exist
  11.    // mkdir(str_replace('//','/',$targetPath), 0755, true);
  12.    
  13.    move_uploaded_file($tempFile,$targetFile);
  14.    
  15.        
  16.        
  17. }
  18. echo "1";
  19.        $_SESSION['nazwa_pliku'] = $targetFile;
  20.        $_SESSION['n'] = 'sdf';
  21. ?>
kbsucha
Z tego co pamiętam, to możesz spokojnie te dane przesyłać jako parametry w url do skryptu. Ja planowałem używać zdarzenia onComplete i onAllComplete i ajaxem zapisywać dane w bazie do kolejno uploadowanych plików. Niestety testowałem tylko ten skrypt, więc żadnego konkretnego kodu nie pisałem. Pamiętam też, że ktoś na forum Uploadify miał podobny problem i tam autor podrzucił jakieś pomysły.

Pozdr
marcinpruciak
Ale dlaczego nie działa sposóbb z sesją?
krowal
Przecież do obsługi uploadu możesz podpiąć dowolny skrypt, który podasz w parametrze 'script'
Kod
script     The relative path to the backend script that will be processing your uploaded files.
Default = ‘upload.php’

W tym skrypcie możesz się normalnie odwołać do tablicy $_FILES tak jak to jest w przykładowym pliku tego uploadera i nie stoi nic na przeszkodzie aby dodać w nim też zapisywanie do bazy.
marcinpruciak
A dodam w ten sposób dane z formularza?
krowal
Dodasz, tylko musisz je posłać razem z plikiem za pomocą parametru 'scriptData'
Kod
scriptData     An object containing name/value pairs of additional information you would like sent to the upload script. {’name’: ‘value’}
marcinpruciak
Przepraszam że tak wypytuję, ale nie znam JavaScriptu.
Jak będę mógł się potem odwołać do tych zmiennych w PHP.
Dodaje je w ten sposób:
Kod
$(document).ready(
function() {
    $("#fileUpload").fileUpload({
        'uploader': 'uploadify/uploader.swf',
        'cancelImg': 'uploadify/cancel.png',
        'script': 'uploadify/upload.php',
        'folder': 'pliki',
        'multi': false,
        'displayData': 'speed',
        'scriptData': {
            'dostep': 'sd',
            'wlasciciel': 'sgghd'
        }
    });

});
erix
Strzelam, że w $_POST.
marcinpruciak
Nie działa, ani w POST ani w GET nic nie ma.

Załaczam jeszcze troche kodu:
plik uload.php:
  1. <?php
  2. require_once('../functions.php');
  3. // Uploadify v1.6.2
  4. // Copyright (C) 2009 by Ronnie Garcia
  5. // Co-developed by Travis Nickels
  6. if (!empty($_FILES)) {
  7.    $tempFile = $_FILES['Filedata']['tmp_name'];
  8.    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . '/';
  9.    $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
  10.    
  11.    // Uncomment the following line if you want to make the directory if it doesn't exist
  12.    // mkdir(str_replace('//','/',$targetPath), 0755, true);
  13.    
  14.    ;
  15.    
  16.         if( move_uploaded_file($tempFile,$targetFile) ) {
  17.                          $pdo = lacz();
  18.                        $stmt3 = $pdo->query("SELECT id FROM pliki ORDER BY id DESC LIMIT 1");
  19.                        $id_plik = $stmt3->fetch();
  20.                        $id_plik = $id_plik[0]+1;
  21.                                
  22.                                if(isset($_GET['scriptData']['udostepnij'])) {
  23.                                    foreach($_GET['scriptData']['udostepnij'] as $row) {
  24.                                        $dostep .= $row.', ';
  25.                                    }
  26.                                } else {
  27.                                    $dostep = '';    
  28.                                }    
  29.                                                
  30.                            $stmt = $pdo->prepare("INSERT INTO pliki (id, nazwa, wlasciciel, dostep, opis) VALUES(:id, :nazwa, :wlasc, :dostep, :opis)");
  31.                            $stmt->bindValue(':id', $id_plik, PDO::PARAM_STR);
  32.                            $stmt->bindValue(':nazwa', $_FILES['Filedata']['name'], PDO::PARAM_STR);
  33.                            $stmt->bindValue(':wlasc', $_GET['scriptData']['wlasciciel'], PDO::PARAM_INT);
  34.                            $stmt->bindValue(':dostep', $dostep, PDO::PARAM_STR);
  35.                            $stmt->bindValue(':opis', $_GET['scriptData']['opis'], PDO::PARAM_STR);
  36.                            $ilosc = $stmt->execute();
  37.                            if($ilosc == 1) {
  38.                                echo 'Plik został pomyślnie uploadowany! <br />';
  39.                            }
  40.                        }
  41.        
  42. }
  43. echo "1";
  44.  
  45. ?>


wywołanie funkcji:
Kod
$(document).ready(
function() {
    $("#fileUpload").fileUpload({
        'uploader': 'uploadify/uploader.swf',
        'cancelImg': 'uploadify/cancel.png',
        'script': 'uploadify/upload.php',
        'folder': 'pliki',
        'multi': false,
        'displayData': 'speed',
        'scriptData': {
            'id': '<? echo $id_plik; ?> ',
            'dostep': '<? echo $dostep; ?> ',
            'wlasciciel': ' klouiygujik <? echo $_SESSION['user']; ?> ',
            'nazwa': '<? echo $plik_nazwa; ?> ',
            'opis': '<? echo $_POST['opis']; ?> ',
        }
    });

});


A baza wogóle nie ruszona.
erix
To sobie przeanalizuj przykład z scriptData, dali demo, pobaw się...

Trochę samodzielności...
marcinpruciak
Trzeba było tak odrazu mówić że jest sample. Częściowo sobie poradziłem, mam teraz trochę inny problem.

Jak się dobrać do pól textarea i checkbox za pomocą javascript? chyba chodzi o dom?
Kod
<label><input type="checkbox" name="udostepnij[]" id="udostepnij" value="'.$row2['nazwa'].'" />'.$row2['nazwa'].'</label>

Te pola robią się w pętli i chciałbym je wszystkie przesłać.
Próbowałem w ten sposób:
'opis': '&opis='+$(this).val()
i w ten:
'dostep': document.getElementById("udostepnij"),
erix
Cytat
Trzeba było tak odrazu mówić że jest sample.

Ściągał bibliotekę i nie widział, że jest sample... :X Klapki na oczach?

Cytat
Kod
Próbowałem w ten sposób:
'opis': '&opis='+$(this).val()
i w ten:
'dostep': document.getElementById("udostepnij"),

A w jakim kontekście? Jeśli tamtej funkcji, to się nie dziw - w pierwszym przypadku this nie zawiera interesującego Cię pola, w drugim - podajesz obiekt bez wartości.
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.