Autor | Zpráva | ||
---|---|---|---|
michal454454 Profil |
Dobry den mám problém s tím že mi pořád nefunguje nahrání obrázku do složky.. samostatně když jsem měl formulář v index.php to fungovalo ale když to zakomponuji do svého webu jak to potřebuju tak to nejde.. zde jsou soubory:
okamžitě píše tuhle chybu: Sorry, only JPG, JPEG, PNG & GIF files are allowed.Sorry, your file was not uploaded. upload.php(kód pro nahrání souboru jpg atd.. do slozky(uploads) na muj web) <?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["nfoto"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image if(isset($_POST["odeslat"])) { $check = getimagesize($_FILES["nfoto"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["nfoto"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["nfoto"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["nfoto"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?> admin.php $u=new user($db) if(isset($_POST["ncislo"])){ echo $u->pridejHrac($_POST["ncislo"],$_POST["njmeno"],$_POST["nvek"],$_POST["nfoto"] ,$_POST["nzapasy"],$_POST["ngoly"],$_POST["npost"]); } if(isset($_GET['module'])){ switch($_GET['module']){ case 'pridejHrac': echo '<hr id="admrhr" style="width:75%;margin:auto;"/>'; echo $u->pridejHracForm(); include "upload.php"; break; } } user.php class user { public function pridejHracForm(){ return " <div class='admr'><form action='index.php?action=admin' method='POST' enctype='multipart/form-data'> <p>Číslo: <input type='text' name='ncislo'/></p>\n <p>Jméno: <input type='text' name='njmeno'/></p>\n <p>Věk: <input type='text' name='nvek'/></p>\n <p>Foto: <input type='file' name='nfoto' id='nfoto'/></p>\n <p>Zápasy: <input type='text' name='nzapasy'/></p>\n <p>Góly: <input type='text' name='ngoly'/></p>\n <p>Post: <select name='npost'><option value='Brankář'>Brankář</option><option value='Obránce'>Obránce</option><option value='Útočník'>Útočník</option> </select></p>\n <input type='submit' name='odeslat' value='Přidat' /> </form></div>"; } } |
||
Taps Profil |
#2 · Zasláno: 15. 2. 2015, 21:55:32
michal454454:
Máš ve složce, do kterého chceš zapisovat nastavená potřebná práva? Dále si zkus vypsat pomocí echo obsah proměnné $imageFileType |
||
kovs Profil |
#3 · Zasláno: 16. 2. 2015, 23:05:12
budeš mít chybu v
// Allow certain file formats if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } pokud přepíšeš && na or (nebo), tak ti to nefunguje? chybu ti to vypisuje u této podmínky.... |
||
lionel messi Profil |
kovs:
„pokud přepíšeš && na or (nebo), tak ti to nefunguje?“ Bohužiaľ toto fungovať zjavne nebude. Súbor by totiž na to, aby podmienka nebola splnená, musel mať všetky uvedené prípony súčasne, čo je samozrejme nemožné. Ďaleko vhodnejšie by bolo skúsiť prepísať problematickú časť zhruba takto: $allowedTypes = array("gif", "jpg", "jpeg", "png"); if (!in_array($imageFileType, $allowedTypes)) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } |
||
Fisir Profil |
#5 · Zasláno: 17. 2. 2015, 17:17:39
Reaguji na kovse:
Podmínka funguje správně. Ovšem samozřejmě je elegantnější ta od [#4] lionela messiho. Můj tip je, že přípona nahrávaného souboru je psána velkými písmeny, vyřeší to funkce mb_strtolower($imageFileType); . Případně by se mohla jako kontrola, zda je nahrávaný obrázek správného typu použít proměnná $check['mime'] , která je nepochybně spolehlivější.
|
||
Davex Profil |
Budu-li vycházet z toho, že se skript
upload.php po odeslání formuláře nikde nespustí protože se formulářem neodesílá parametr module=pridejHrac , tak to vypadá, že se skript spouští dříve - těsně po zobrazení formuláře, kdy ještě nedošlo k nahrání obrázku a pole $_FILES je proto prázdné. Z toho vyplývá, že jméno souboru a přípona jsou také prázdné a zobrazí se ta chyba. Celý problém je tedy způsoben špatnou sekvencí skriptů.
|
||
michal454454 Profil |
#7 · Zasláno: 17. 2. 2015, 20:33:54
Zdravím tak teď jsem napsal do parametru formu action="index.php?action=admin&module=pridejHrac" a nic... :/
|
||
Davex Profil |
#8 · Zasláno: 18. 2. 2015, 19:42:08
michal454454:
Pochopitelně nestačí někam připsat nějaký parametr a doufat, že to samo začne fungovat. Musí být zajištěno, aby se skript upload.php spustil po odeslání formuláře s nahrávaným souborem a ne hned po vypsání HTML kódu formuláře. Struktura tvého kódu je docela nepřehledná, takže nedokážu říct, kam by se mělo co přesunout. |
||
Tomáš123 Profil |
#9 · Zasláno: 18. 2. 2015, 20:00:45
michal454454:
„okamžitě píše tuhle chybu“ Skús obaliť celý skript v súbore upload.php podmienkou na riadku 7. Overíš, či už bol formulár odoslaný. |
||
Časová prodleva: 4 dny
|
|||
michal454454 Profil |
#10 · Zasláno: 22. 2. 2015, 13:11:01
Tomáš123:
Celé obalit myslíš takto? :) <?php if(isset($_POST["odeslat"])) { $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["nfoto"]["name"]); $uploadOk = 1; $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); // Check if image file is a actual image or fake image $check = getimagesize($_FILES["nfoto"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } // Check if file already exists if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // Check file size if ($_FILES["nfoto"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // Allow certain file formats $allowedTypes = array("gif", "jpg", "jpeg", "png"); if (!in_array($imageFileType, $allowedTypes)) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // Check if $uploadOk is set to 0 by an error if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // if everything is ok, try to upload file } else { if (move_uploaded_file($_FILES["nfoto"]["tmp_name"], $target_file)) { echo "The file ". basename( $_FILES["nfoto"]["name"]). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } } ?> |
||
lionel messi Profil |
#11 · Zasláno: 22. 2. 2015, 13:32:17
michal454454:
„Celé obalit myslíš takto?“ Áno. |
||
Časová prodleva: 8 let
|
0