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
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
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;
}
ne?
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
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
Zdravím tak teď jsem napsal do parametru formu action="index.php?action=admin&module=pridejHrac" a nic... :/
Davex
Profil
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
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ý.
michal454454
Profil
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
michal454454:
Celé obalit myslíš takto?
Áno.

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: