Autor Zpráva
Vilak
Profil
Zdarec. Chci uploadnout více obrázků a nevím, kde mám chybu.

vkadani-fotografii.php:
<form action="include/scripts/add-images.php" method="POST" type="multipart/form-data">
                            <h2>Vložit nové fotografie:</h2>
                            <input type="hidden" name="author" <?php echo "value=\"$author\""; ?>>
                            <input type="file" name="images[]"  min(1) max(30) multiple="multiple"/>
                            <input type="submit" name="go" value="Nahrát na server">
                        </form>

add-images.php:
<?php
    if (isset($_POST['go'])) {
        //vytvoření složek
        if (!file_exists("../../img/fotky-clanky")) {
            mkdir("../../img/fotky-clanky", 0777);
        }

        $aj = array("January","February","March","April","May","June","July","August","September","October","November","December");
        $cz = array("leden","unor","brezen","duben","kveten","cerven","cervenec","srpen","zari","rijen","listopad","prosinec");
        $file = str_replace($aj, $cz, date("Y-m-F", time()));
        if (!file_exists("../../img/fotky-clanky/$file")) {
            mkdir("../../img/fotky-clanky/$file", 0777);
        }
        $upload_dir = "../../img/fotky-clanky/$file";


        //nahrávání fotek
        $suffix = array("jpg", "jpeg", "png", "gif", "ico");
        $message = "";
        include "../prevodni-tabulka.php";
        if (isset($_FILES['images']) && is_array($_FILES['images']['name'])) {
            $counter = 0;
            $not_upladed = 0;
            $suffix = array_flip($suffix);
            foreach ($_FILES['images']['name'] as $key => $name) {
                $filename = basename($name);
                $tmpname = $_FILES['images']['tmp_name'][$name];

                if (!is_uploaded_file($tmpname) || !isset($suffix[strtolower(pathinfo($filename, PATHINFO_EXTENSION))])) {
                    $not_upladed++;
                    continue;
                }

                if (move_uploaded_file($tmpname, "{$upload_dir}".DIRECTORY_SEPARATOR."{$filename}")) {
                    $counter++;
                }
            }
            echo "Bylo nahráno {$counter} z ".sizeof($_FILES['images']['name']." obrázků");
        }
    }
?>
Pozn.: Chci to pak zlepšit (ukládání cesty do databáze apod. Proto tam jsou teď věci, které třeba nevyužívám)

Předem děkuji za veškeré odpovědi.
Davex
Profil
Je chybně uzavřená závorka u sizeof.
Vilak
Profil
Ale i kdyby, tak by se soubory už nahrály, ne? Jinak opraveno, díky.

Když dám var_dump($_FILES['images']); pod include, tak mi to vypíše NULL. Nebude chyba v tom $_FILES['images'] někde?
Složky se mi vytvoří, ale cokoliv za 1. podmínkou se mi už nezobrazí a soubory se ani nenahrají.
Davex
Profil
Vilak:
Ale i kdyby, tak by se soubory už nahrály, ne?
To záleží na tom, jestli to vyvolá syntaktickou chybu nebo ne. Nechce se mi to testovat.

Když dám var_dump($_FILES['images']); pod include, tak mi to vypíše NULL.
No vida, to už je lepší popis problému.

Další chyba:
 enctype="multipart/form-data"
Vilak
Profil
Fajn. Ale soubory se mi stále nenahrají.
script:
<?php
    if (isset($_POST['go'])) {
        //vytvoření složek
        if (!file_exists("../../img/fotky-clanky")) {
            mkdir("../../img/fotky-clanky", 0777);
        }

        $aj = array("January","February","March","April","May","June","July","August","September","October","November","December");
        $cz = array("leden","unor","brezen","duben","kveten","cerven","cervenec","srpen","zari","rijen","listopad","prosinec");
        $file = str_replace($aj, $cz, date("Y-m-F", time()));
        if (!file_exists("../../img/fotky-clanky/$file")) {
            mkdir("../../img/fotky-clanky/$file", 0777);
        }
        $upload_dir = "../../img/fotky-clanky/$file";


        //nahrávání fotek
        $suffix = array("jpg", "jpeg", "png", "gif", "ico");
        $message = "";
        include "../prevodni-tabulka.php";
        if (isset($_FILES['images']) && is_array($_FILES['images']['name'])) {
            $counter = 0;
            $not_upladed = 0;
            $suffix = array_flip($suffix);
            foreach ($_FILES['images']['name'] as $key => $name) {
                $filename = basename($name);
                $tmpname = $_FILES['images']['tmp_name'][$name];
                var_dump($tmpname);

                if (!is_uploaded_file($tmpname) || !isset($suffix[strtolower(pathinfo($filename, PATHINFO_EXTENSION))])) {
                    $not_upladed++;
                    continue;
                }

                if (move_uploaded_file($tmpname, "{$upload_dir}".DIRECTORY_SEPARATOR."{$filename}")) {
                    $counter++;
                }
            }
            echo "Bylo nahráno {$counter} z ".sizeof($_FILES['images']['name'])." obrázků";
        }
    }
?>
var_dump mi vypisuje toto:


Notice: Undefined index: 13015008_962678300517180_1641477490_n.jpg in C:\xampp\htdocs\esport\include\scripts\add-images.php on line 27
NULL
Notice: Undefined index: 13020401_962678313850512_827779651_n.jpg in C:\xampp\htdocs\esport\include\scripts\add-images.php on line 27
NULL
Notice: Undefined index: 13023323_962678280517182_870615520_n.jpg in C:\xampp\htdocs\esport\include\scripts\add-images.php on line 27
NULL
Notice: Undefined index: 13023375_962678293850514_1705415581_n.jpg in C:\xampp\htdocs\esport\include\scripts\add-images.php on line 27
NULL Bylo nahráno 0 z 4 obrázků

Tedy mám problém konkrétně s tímto řádkem $tmpname = $_FILES['images']['tmp_name'][$name];. Ale co tam je špatně? Přece z pole images vyberu pole tmp_name, z kama vyberu prvek podle názvu name, ne?
_______________________________________________________________________________________
Ok. Vyřešil jsem to. Blbě jsem četl prvky v poli, které se indexovaly podle čísla.
Konečné řešení:
<?php
    if (isset($_POST['go'])) {
        //vytvoření složek
        if (!file_exists("../../img/fotky-clanky")) {
            mkdir("../../img/fotky-clanky", 0777);
        }

        $aj = array("January","February","March","April","May","June","July","August","September","October","November","December");
        $cz = array("leden","unor","brezen","duben","kveten","cerven","cervenec","srpen","zari","rijen","listopad","prosinec");
        $file = str_replace($aj, $cz, date("Y-m-F", time()));
        if (!file_exists("../../img/fotky-clanky/$file")) {
            mkdir("../../img/fotky-clanky/$file", 0777);
        }
        $upload_dir = "../../img/fotky-clanky/$file";


        //nahrávání fotek
        $suffix = array("jpg", "jpeg", "png", "gif", "ico");
        $message = "";
        include "../prevodni-tabulka.php";
        if (isset($_FILES['images']) && is_array($_FILES['images']['name'])) {
            $counter = 0;
            $not_upladed = 0;
            $suffix = array_flip($suffix);
            foreach ($_FILES['images']['name'] as $key => $name) {
                $filename = basename($name);
                $tmpname = $_FILES['images']['tmp_name'][$counter];

                if (!is_uploaded_file($tmpname) || !isset($suffix[strtolower(pathinfo($filename, PATHINFO_EXTENSION))])) {
                    $not_upladed++;
                    continue;
                }

                if (move_uploaded_file($tmpname, "{$upload_dir}".DIRECTORY_SEPARATOR."{$filename}")) {
                    $counter++;
                }
            }
            echo "Bylo nahráno {$counter} z ".sizeof($_FILES['images']['name'])." obrázků"; // tady místo toho když tak dat header pro přesměrování
        }
    }
?>
a
<form action="include/scripts/add-images.php" method="POST" enctype="multipart/form-data">
                            <h2>Vložit nové fotografie:</h2>
                            <input type="hidden" name="author" <?php echo "value=\"$author\""; ?>>
                            <input type="file" name="images[]"  min(1) max(30) multiple="multiple"/>
                            <input type="submit" name="go" value="Nahrát na server">
                        </form>

Davex, děkuji za pomoc.
juriad
Profil
Ne. Viz php.net/manual/en/features.file-upload.post-method.php#example-411
„z kama vyberu prvek podle názvu key

Další chyba je v HTML:
<input type="file" name="images[]"  min="1" max="30" multiple="multiple"/>
Vilak
Profil
Ok. Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: