Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript] Upload kilkudziesięciu fotek...
Forum PHP.pl > Forum > Przedszkole
oomaster
Witam,

Przedstawię kod jaki posiadam a potem opiszę problem.
Kod
<script language="JavaScript">
function deleteFileInput(hyperlink)
{
    $(hyperlink).parent().remove();
    
    return false;
}

function createFileInput(description, max)
{
    var description = description ? true : false;
    var max = max ? max : false;
    
    var nextId = 0;
    
    var wrappers = $('.photoWrapper');
    
    if (!max || wrappers.length < max) {
        wrappers.each(function (i) {
            var id = parseInt($(this).attr('id').replace('photoWrapper', ''));
            if (id >= nextId) {
                nextId = id + 1;
            }
        });
    
        var p = $('<div>');
        div.addClass('photoWrapper');
        div.attr('id', 'photoWrapper' + nextId);
        
        var input = $('<input type="file" />');
        input.addClass('file');
        input.attr('name', 'photo[' + nextId + ']');
        div.append(input);
        
        if (description) {
            div.html(p.html() + ' Opis ');
            
            var input = $('<input type="text" />');
            input.addClass('text');
            input.attr('name', 'photo_description[' + nextId + ']');
            
            div.append(input);
        }
        
        var a = $('<a>');
        a.addClass('foto');
        a.attr('href', '');
        a.html(' usuĹ?');
        a.click(function () { return deleteFileInput(this); });
        
        div.append(a);
        
        div.insertAfter($('.photoWrapper:last'));
    }
    
    return false;
}
</script>

  1. <form action="foto.php" method="post" enctype="multipart/form-data">
  2. <div>
  3.  
  4. <input class="file" type="file" name="photo[0]" />
  5. <a class="foto" href="" onclick="return createFileInput();">+ więcej</a>
  6. </div>
  7. </form>


Teraz w pliku foto.php jest rozbudowany skrypt do uploadu fotek ale mój problem jest następujący jaką funkcją w php wszystkie fotki dodane za pomocą formularza obrobię przez ten jeden skrypt. Myślałem nad jakąś pętlą ale to chyba odpada ?

Czy to tego typu zadania foreach będzie ok ? Proszę o pomoc smile.gif
wojckr
Chyba jedynym wyjściem będzie tu właśnie foreach ($_FILES) ...
Jeśli ktoś zna inny pomysł, to też z chęcią go poznam.
chemik1982
Pamietaj zeby wydluzyc max. okres wykonywania skryptu i mozliwy rozmiar wysylanych danych POST-em.
Opjce:
- max_execution_time
- post_max_size
oomaster
Cytat(chemik1982 @ 1.08.2008, 15:23:18 ) *
Pamietaj zeby wydluzyc max. okres wykonywania skryptu i mozliwy rozmiar wysylanych danych POST-em.
Opjce:
- max_execution_time
- post_max_size


OK, ale mam jedno pytanie. Przecież będą przetwarzane dane cały czas to chyba skrypt nie zatrzyma się po standarodwych 30-40 sekundach ?

Sorry za to pytanie ale jak ustawić:
- max_execution_time
- post_max_size

questionmark.gif
Hazel
  1. <?php
  2.  
  3. ini_set('post_max_size', '20M');
  4. ?>




Na początku skryptu. To 20M oznacza 20MB, domyślnie jest 8MB, możesz to dopasować jak tam chcesz.
oomaster
OK, dzięki za pomoc ale zrobiłem teraz takie skrypt:

Kod
<style type="text/css">
<!--
input.upload { display: block; }
-->
</style>
<script type="text/javascript">
<!--
function dodaj_element(kontener){
var znacznik = document.createElement('input');
znacznik.setAttribute('type', 'file');
znacznik.setAttribute('name', 'val[]');
znacznik.className = 'upload';
var kontener = document.getElementById(kontener);
kontener.appendChild(znacznik);
}
//-->
</script>
</head><body>
<?
echo "<h1>ADD News</h1>";

if (isset($_POST['joketext']))
{

foreach( $_FILES as $val )
    {
        if( is_uploaded_file( $val['tmp_name'] ) )
        {
            if( move_uploaded_file( $val['tmp_name'], 'foto/' . $val['name'] ) )
            {
                echo 'Plik '. $val['name'] .' został pomyślnie uploadowany! <br />';
            } else {
                echo 'Upload pliku '. $val['name'] .' nie powiódł się!';
                echo '<pre>' . print_r( $_FILES, true ) . '</pre>';
                die();
            }
        }
        else
        {
            echo 'Upload pliku '. $val['name'] .' nie powiódł się!';
            echo '222222<pre>' . print_r( $_FILES, true ) . '</pre>';
            die();
        }
    }

}
?>
<form action="test-news.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="joketext">
<div id="pliki">
<input type="file" name="val[]" />
</div>
<div>
<a href="#" onclick="dodaj_element('pliki');" />Dodaj pole</a>
<input class="sub" type="image" src="gfx/zapisz.gif" title="Zapisz" />
</div>
</form>
</body>
</html>


Ale wywala z niego błąd: Upload pliku Array nie powiódł się!222222 questionmark.gif Co jest źle, nie rozumiem tego :/
nowotny
A co ci pokazuje print_r($_FILES)...?
oomaster
print_r($_FILES) wyświetla:

Cytat
Array
(
[photo] => Array
(
[name] => Array
(
[0] => DSC00135.JPG
)
[type] => Array
(
[0] => image/jpeg
)
[tmp_name] => Array
(
[0] => /tmp/phpSQvuje
)
[error] => Array
(
[0] => 0
)
[size] => Array
(
[0] => 381448
)
)
)


Powyżej pokazuje dla jednej fotki dla 2 foteki i więcej też działa ładnie smile.gif

Sorry za post pod postem ale wynika z tego ,że najwyraźniej po błędzie coś nie tak jest z przesłaniem przez HTTP POST:

Cytat
if( is_uploaded_file( $val[0]['tmp_name'] ) )


Czyli plik nawet nie dostaje się do skryptu raczej
hhhmmmm...
Kicok
Popatrz jeszcze raz na strukturę którą wyświetliło ci print_r" title="Zobacz w manualu PHP" target="_manual.

Podpowiem tylko, że na pewno nie: $val[0]['tmp_name']
oomaster
Być może jestem głupi lub niemądry ale jedyne rozwiązaniem aby wszystkie pliki obsłużyć jest:

Cytat
<?
$val['tmp_name']
?>


Ewentualnie może być:

Cytat
<?
$val[++1]['tmp_name']
?>


(ale to już jest bzdura kompletna)
Kicok
Cytat
Kod
[tmp_name] => Array
(
    [0] => /tmp/phpSQvuje
)


  1. <?php
  2.  
  3. echo $val['tmp_name'][0];
  4.  
  5. ?>
oomaster
Dzięki wielkie problem w 90% rozwiązany zostaje jeszcze jeden szczegół smile.gif Fotki uploadują się na serwer i są na nim i dostaje taki komunikat ohmy.gif

Cytat
Plik av-4119.png został pomy�lnie uploadowany!
Plik babcia i zmieniaki.jpg został pomy�lnie uploadowany!
Upload pliku nie powiódł się!222222

Array
(
[val] => Array
(
[name] => Array
(
[0] => av-4119.png
[1] => babcia i zmieniaki.jpg
)

[type] => Array
(
[0] => image/png
[1] => image/jpeg
)

[tmp_name] => Array
(
[0] => /tmp/phphBjdZw
[1] => /tmp/phpucsalW
)

[error] => Array
(
[0] => 0
[1] => 0
)

[size] => Array
(
[0] => 12385
[1] => 86491
)

)

)


NIe wiem dlaczego pisze ,że jest OK a poniżej ,że jest błąd którego nie ma w rzeczywistości ?!

O to kod który jest poprawny smile.gif

Kod
<html><head>
<style type="text/css">
<!--
input.upload { display: block; }
-->
</style>
<script type="text/javascript">
<!--
function dodaj_element(kontener){
var znacznik = document.createElement('input');
znacznik.setAttribute('type', 'file');
znacznik.setAttribute('name', 'val[]');
znacznik.className = 'upload';
var kontener = document.getElementById(kontener);
kontener.appendChild(znacznik);
}
//-->
</script>
</head><body>
<?
echo "<h1>ADD Multi foto v1.2</h1>";

if (isset($_POST['joketext']))
{

foreach( $_FILES as $val )
    {
for ($i=0;$i<sizeof($val);$i++) {
        if( is_uploaded_file( $val['tmp_name'][$i] ) )
        {
            if( move_uploaded_file( $val['tmp_name'][$i], 'foto/' . $val['name'][$i] ) )
            {
                echo 'Plik '. $val['name'][$i] .' został pomyślnie uploadowany! <br />';
            } else {
                echo 'Upload pliku '. $val['name'][$i] .' nie powiódł się!';
                echo '<pre>' . print_r( $_FILES, true ) . '</pre>';
                die();
            }
        }
        else
        {
            echo 'Upload pliku '. $val['name'][$i] .' nie powiódł się!';
            echo '222222<pre>' . print_r( $_FILES, true ) . '</pre>';
            die();
        }
}
}

}
?>
<form action="test-news.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="joketext">
<div id="pliki">
<input type="file" name="val[]" />
</div>
<div>
<a href="#" onclick="dodaj_element('pliki');" />Dodaj pole</a>
<input class="sub" type="image" src="gfx/zapisz.gif" title="Zapisz" />
</div>
</form>
</body>
</html>
Kicok
Cytat
  1. <?php
  2. $i<sizeof($val)
  3. ?>


tu jest błąd
oomaster
No ale popatrz:

$i=0; - ustawia na początek 0 do zmiennej
$i<sizeof($val); - sprawdza ile jest elementów $val i nie moze ich skrypt naliczyć więcej niż jest ich w tablicy
$i++ - dodaje za każdym razem +1

Możesz powiedzieć w jakim sensie jest błąd:

$i<sizeof($val)

Dzięki wielkie wszystkim za pomoc smile.gif udało się rozwiązać mi tą ostatnią zagadkę. Oto rozwiązanie:

Kod
for ($i=0;$i<sizeof($val[size]);$i++) {


Jeszcze raz dzięki wielkie
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.