Autor Zpráva
Radimovic
Profil *
Cau,

Potrebuju nahrat fotku na server a ulozit jeji nazev do databaze do sloupce "photo". Skript mam tenhle:

function AddNews($id, $nazev, $datum, $popis, $photo) { 
echo "<center>";
$dotaz = MySQL_Query("INSERT INTO news VALUES('$id','$nazev','$datum','$popis','$photo')");

$slozka = "img/aktuality";
$cil = $slozka . "/" .$_FILES['photo']['name']; 
$nazev_souboru = $_FILES['photo']['tmp_name'];
$copy = move_uploaded_file($nazev_souboru, $cil)
or die ("Přenesený soubor nelze zkopírovat");
chmod ($cil, 0644);    


   
if(!$dotaz):
 echo "<strong>Chyba</strong><br />Data nebyla uložena... <a href='javascript:history.back();'>Zpět</a>";
 echo mysql_error();
else:
 echo "Data byla úspěšně uložena. Pokračujte <a href='admin.php?akce=News'>zde</a>";
 
endif;
echo "</center>"; 
}


a nasledne takto takto:
if($akce=="AddNews") AddNews($_POST['id'], $_POST['nazev'], $_POST['datum'], $_POST['popis'], $_POST['photo']);


Soubor to uploaduje v poradku ale nazev se do databaze nezapise. P
Medvídek
Profil
Radimovic:
Tak si shválně nech vypsat, co ti vraci $photo v té funkci před dotazem. :)
Každopádně bych dotaz do DB prováděl až po uploadu.
Radimovic
Profil *
nevypise nic.

Ok, dotaz provedu po uploadu. Ale i pokud celej upload vynechám a chci ho nechat jenom zapsat do databáze, kolonka photo je prazdná, takže chyba bude někde jinde
Medvídek
Profil
Radimovic:
Předpokládám, že input s name photo je typu FILE, neměl by si tedy k němu přistupovat tak, jak se k němu přistupovat má?
Tedy jako to děláš tady:
$nazev_souboru = $_FILES['photo']['tmp_name'];


Jinak doporučuju při uploadu název souboru měnit, radějio odstranit diakritiku atd. a vytvořit tomu unikátní název, aby se nemohlo stát, že se ti soubory přepíší.
A očekáváš-li pouze obrázek, tak taky udělt kontrolu mime-type (
$_FILES['photo']['type']
) na obrázky.
CZechBoY
Profil
1) INSERT dej po uploadnutí obrázku
2) do SQL dej $cil namísto $nazev
3) sql_injection ;)
4) mime-type jak již bylo řečeno, může útočník uploadnout třeba php skript který se zřejmě spustí
máš tam vůbec kontrolu jestli uživatel nahrál soubor?
Leo
Profil
Kontrola mime type je k ničemu, protože to tvrdí prohlížeč, čili to přichází zvenku, a to se pak nesmí věřit ničemu. Sama o sobě není bezpečná ani kontrola skrutečného souboru co přišel, třeba přes getimagesize, je možné uploadnout jpg, který kontrolou projde ale spustím ho jako php kód. Co je potřeba ošetřit je především to, aby se soubor neuložil s příponou ".php". Leo
CZechBoY
Profil
tak třeba exif informace
Leo
Profil
CZechBoY:
tak třeba exif informace

Nepomůže, pokud to uživatel pošle s příponou .php a vy ji s ní uložíte. Leo

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:

0