Autor Zpráva
asellaa
Profil
Dobrý den všem,
moc prosím o pomoc. V redakčím systému /ne mém/ se náhle při nahrávání fotek začala ukazovat chyba, že danou fotografii nelze nehrát, že není ve formátu .jpg. Fotka samozřejmě ve správném formátu je. Našla jsem kód, který to zřejmě způsobuje, ale nevím jak to opravit. Vůbec netuším, proč to najednou začal systém psát, když doteď to fungovala a nikdo se v kodu nehrabal.
Můžete někdo poradit?
Děkuju Asellaa

$name = Str_Replace("_", "", $name);
        $name = Str_Replace(" ", "_", $name);
        $name = Str_Replace("(", "-", $name);
        $name = Str_Replace(")", "-", $name);
        $name = StrToLower($name);
        $koncovka = Explode(".", $name);
        $koncovka[1]= StrToLower($koncovka[1]);
        if($koncovka[1]<>"jpg"  ) //and $koncovka[1]<>"jpeg" and $koncovka[1]<>"gif" and $koncovka[1]<>"png"
        echo "Vybrany soubor neni typu -> jpg";
        else
        {
            $dir=$this->HlavniSlozka."/";
            if (is_dir($dir))
            {

                $dirOpen=opendir($dir);
                if(is_uploaded_file($tmp_name))
Jan Tvrdík
Profil
asellaa:
Nenahráváš náhodou soubor s příponou jpeg místo jpg?
asellaa
Profil
ne e, zkoušela jsem oboje a pořád stejná chyba :-(
pharaon.jh
Profil
asellaa:
nemáš ten soubor velkýma písmenama JPG, občas se mi to taky stává
Dan Charousek
Profil
pharaon.jh:
K tomu tam je strtolower.
V souvislosti s tím, co psal Jan Tvrdík, bych zkusil použít zakomentovanou část kódu pro jpeg. Taky si neodpustím co, že funkce str_replace() může přijmout za prametry pole, tudíž není třeba ji volat několikrát. (vím, že jsi psala, že to není tvůj systém, ale i tak to může pomoci zpřehlednit kód):

$povolene_formaty  = array("jpg", "jpeg");
$name              = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-")));
$koncovka          = explode(".", $name);
$koncovka[1]       = strtolower($koncovka[1]);

if(!in_array($koncovka[1], $povolene_formaty)) {
  echo "Formát souboru není povolený";
} else {
  // zde se nahraje obrázek
}
původní edit jsem přidal jako nový příspěvek, aby nezůstal nepovšimnut.
asellaa
Profil
Je to malými :-(
Dan Charousek
Profil
Ještě mě tak napadá. Nemá soubor, který nahráváš v názvu tečku? Proměnná $koncovka[1] by potom neobsahovala koncovku, ale 2. část názvu. Opravilo by se to nahrazením 4. řádků v mém kódu za:
$ext = $koncovka[count($koncovka) - 1]; a následným nahrazením $koncovka[1] v podmínce na $ext.
asellaa
Profil
Dan Charousek:
Soubor který nahrávám má název: 112.jpg

Ale zkoušela jsem přepsat kod podle tvého návrhu a někde bude něco špatně, tedy tím myslím u mě. Protože i když jsem to přepsala, tak chyba: Vybrany soubor neni typu -> jpg se tam ukazuje stejně. Zkoušela jsem se odhlásit, vymazat mezipaměť a pořád ta samá hláška i když už by se případně mělo objevit: Formát souboru není povolený . Zřejmě to čerpá asi ještě od někud jinud, ale já vůbec netuším odkud. Já osobně dělám stránky s Jooomlou a tohle je pro mě španělská vesnice...
Dan Charousek
Profil
asellaa:
Prvně bude třeba zjistit, který script vkládání obrázků zajišťuje. Snadno to zvládneš i bez naší pomoci. Stačí najít podobné scripty a hlášku "Vybrany soubor neni typu -> jpg" přepsat třeba na "Nacházím se zde" a tímto způsobem se dopracuješ k tomu, který script to má vlastně na starost. Následně je třeba zjistit, zda se v proměnných nachází to, co bychom tam očekávali. Asi první, co bych testoval, je jméno souboru:
echo $name; případne zda je správně koncovka: echo $koncovka[1]; Tímto postupným zkoumáním se jistě dopracuješ k tomu, co problém způsobuje :)
asellaa
Profil
Dan Charousek:
Takže původní tip byl skutečně správný. Způsobuje to ta část kódu co jsem poslala. Už se mi tam ukazuje tvoje hláška: Formát souboru není povolený . Ale navíc se mi ukazuje chyba v tomto řádku :-(
$name = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-")));


Dan Charousek:
Ještě tu chybu:

Warning: Wrong parameter count for str_replace() in
Dan Charousek
Profil
Jistě, chybí mi tam vstupní parametr, moje chyba :):
$name = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-"), $name));
asellaa
Profil
Dan Charousek:
Super, díky. Chyba v v řádku zmizela, ale stále to hlásí : fotmát souboru není povolený :-( Já tu z toho snad zešedivim :-(
Dan Charousek
Profil
Zkus si na řádku 5 mého kódu vypsat koncovku.
asellaa
Profil
Jestli jsi tím myslel toto: echo $name; echo $koncovka[1]; tak jsem to tam dala a nic, stále to píše jen Formát souboru není povolený :-(
Dan Charousek
Profil
asellaa:
Jak vypadá aktuální script?
asellaa
Profil
Posílám kus, kdybys potřeboval dál, pošlu zbytek:

<?
include("db_connect.php");

class fotogalerie
{

    function fotogalerie($HlavniSlozka)
    {
        $this->HlavniSlozka=$HlavniSlozka;
    }

    function Uloz_fotku($album,$popis,$name,$tmp_name,$size)
    {


$povolene_formaty  = array("jpg", "jpeg");
$name              = strtolower(str_replace(array("_", " ", "(", ")"),array("", "_", "-", "-"), $name));
$koncovka          = explode(".", $name);
$koncovka[1]       = strtolower($ext);
$ext = $koncovka[count($koncovka) - 1];
if(!in_array($koncovka[1], $povolene_formaty)) {
  echo "Formát souboru není povolený";
}        else
        {
            $dir=$this->HlavniSlozka."/";
            if (is_dir($dir))
            {

                $dirOpen=opendir($dir);
                if(is_uploaded_file($tmp_name))
                {
                    $velikost = $size;
                    $velikost = round($velikost/1024,0);
                    if($velikost>2000)
                    {
                        echo "velikost fotky presahla povolenou velikost tj. 2MB!!!!";
                    }
                    else
                    {



je to tedy bez toho echo $name; a echo $koncovka[1];
Dan Charousek
Profil
Po přidání řádku 20 můžeš řádek 19 úplně vypustit a řádek 21 následně změnit na:

if(!in_array($ext, $povolene_formaty)) {

Řádek 22 zkus změnit na:

echo "Formát souboru není povolený";
echo "Vkládaná data:";
var_dump($name);
var_dump($ext);

Tím zjistíme, zda jsou vkládaná data v pořádku.
asellaa
Profil
Dan Charousek:
Tak jestli jsem to dala vše dobře, tak to píše toto:
Formát souboru není povolenýVkládaná data:string(0) "" string(0) ""
Dan Charousek
Profil
asellaa:
Dobře, to znamená, že do podmínky vstupuje prázdný řetězec, což je samozřejěm špatně. Ty testovací var_dumpy klidně můžeš smazat. Zkus si var_dump($name); na řádku 14. Pokud i tam bude proměnná name prázdná, znamená to, že není chyba v tomto scriptu, ale při volání metody Uloz_Fotku(). Pokud bude jméno v pořádku, je chyba někde mezi řádkem 14 a podmínkou. Tímto způsobem se dá dopracovat k tomu, v čem je problém.
asellaa
Profil
Říkam správně, že je chyba v Uloz_fotku() kdy mi to píše toto: Vkládaná data:NULL Formát souboru není povolený
Dan Charousek
Profil
Pokud var_dump($name); na řádku 14 ukazuje NULL znamená to, že je chyba mimo tuto metodu Uloz_Fotku(), ve které se momentálně nacházíme. V tom případě musíš najít soubor, ve kterém se vytváří instance třídy fotogalerie:
$... = new fotogalerie();
a volá přišlušná metoda:
$... -> Uloz_Fotku($..., $..., $..., $..., $...);

Místo teček budou nějaké názvy proměnných, které neznám.
asellaa
Profil
Jestli já najdu toho de...a co udělal tenhle bordel, co já, díky tobě musim celý den napravovat, tak ho uškrtim.
Děkuju za tvojí trpělivost a rady, leccos se tu i přiučim :-)
Jdu tedy hledat :-)


To by mohlo být tohle:

$Foto = new fotogalerie("../galerie/Image");
if($_POST['importfoto'])$Foto->ImportujZeSlozkyFTPimport($_GET['album'],'ftp-import');

if($_POST['foto']){
        $Foto->Uloz_fotku($_GET['album'],$_POST['popisFotky'],$HTTP_POST_FILES["fotoFile"]["name"],$HTTP_POST_FILES["fotoFile"]["tmp_name"],$HTTP_POST_FILES["fotoFile"]["size"]);
    
}
if($_POST['new'])$Foto->Vytvor_Album($_POST['album'],$_POST['albumNadraz']);
if($_POST['deletefotoall'])$Foto->DeleteFotoAll($_GET['album']);

if($_POST['deletefoto'])
{
    $dotaz = "SELECT
                             fotografie.idFotografie as idFotografie,
                             fotografie.nazev_fotografie as nazev_fotografie,
                             album.idalbum as idalbum,
                             album.uvodni_fotografie as uvodni_fotografie
            FROM
            
            fotografie
            
            left join
            
            album
            
            on
            
            fotografie.nazev_fotografie=album.uvodni_fotografie    ";

    $result = mysql_query($dotaz) or die ("Dotaz neslo prov&eacute;st proc");
    while ($row=mysql_fetch_array($result))
    {
        if($_POST['fotografie'][$row['idFotografie']]=="check")

        {
            if($row['idalbum']!=null)
            {
                $Foto->SetVychoziFoto('def.jpg',$_GET['album']);
            }

            $Foto->DeleteFoto($row['idFotografie'],$row['nazev_fotografie']);
        }
    }
    mysql_free_result($result);
}

if($_POST['movefoto'])
{
    $dotaz = "SELECT * FROM fotografie order by nazev_fotografie asc ";
    $result = mysql_query($dotaz) or die ("Dotaz neslo prov&eacute;st");
    while ($row=mysql_fetch_array($result))
    {
        if($_POST['fotografie'][$row['idFotografie']]=="check")
        $Foto->MoveFoto($row['idFotografie'],$_POST['albumpresun']);
    }
    mysql_free_result($result);
}
Ivan M.
Profil *
No a nemělo by namísto proměnných $HTTP_POST_FILES[] něco jako $_FILES[]??


myslím volání metody takto:

$Foto->Uloz_fotku($_GET['album'],$_POST['popisFotky'],$_FILES["fotoFile"]["name"],$_FILES["fotoFile"]["tmp_name"],$_FILES["fotoFile"]["size"]);


A ješte bych ověřil, zda je v předchozím formuláři obsaženo
enctype="multipart/form-data"
asellaa
Profil
Hurááááááááááááááááááááááááááááááááááááááááááááááá
Jdem pít, funguje to :-)

Nedá se ani říct, jak moc děkuju.
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: