Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][JavaScript] Upload kilkudziesięciu fotek..., ...za pomocą jednego skryptu ?!
oomaster
post
Post #1





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
wojckr
post
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 6.05.2007
Skąd: Wrocław

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


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





Grupa: Zarejestrowani
Postów: 91
Pomógł: 13
Dołączył: 20.03.2007
Skąd: Bydgoszcz

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


Pamietaj zeby wydluzyc max. okres wykonywania skryptu i mozliwy rozmiar wysylanych danych POST-em.
Opjce:
- max_execution_time
- post_max_size
Go to the top of the page
+Quote Post
oomaster
post
Post #4





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


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

(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Hazel
post
Post #5





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


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





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Co jest źle, nie rozumiem tego :/
Go to the top of the page
+Quote Post
nowotny
post
Post #7





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


A co ci pokazuje print_r($_FILES)...?
Go to the top of the page
+Quote Post
oomaster
post
Post #8





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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...

Ten post edytował oomaster 3.08.2008, 08:37:30
Go to the top of the page
+Quote Post
Kicok
post
Post #9





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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']
Go to the top of the page
+Quote Post
oomaster
post
Post #10





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


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)
Go to the top of the page
+Quote Post
Kicok
post
Post #11





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat
Kod
[tmp_name] => Array
(
    [0] => /tmp/phpSQvuje
)


  1. <?php
  2.  
  3. echo $val['tmp_name'][0];
  4.  
  5. ?>
Go to the top of the page
+Quote Post
oomaster
post
Post #12





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


Dzięki wielkie problem w 90% rozwiązany zostaje jeszcze jeden szczegół (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Fotki uploadują się na serwer i są na nim i dostaje taki komunikat (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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>
Go to the top of the page
+Quote Post
Kicok
post
Post #13





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat
  1. <?php
  2. $i<sizeof($val)
  3. ?>


tu jest błąd
Go to the top of the page
+Quote Post
oomaster
post
Post #14





Grupa: Zarejestrowani
Postów: 305
Pomógł: 3
Dołączył: 4.08.2006
Skąd: GDA

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował oomaster 3.08.2008, 12:40:02
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: 12.10.2025 - 08:13