Autor Zpráva
starburst
Profil
zdravím,
potřeboval bych zjistit jakou má soubor který sme uploadovali koncovku a ulozit to do databaze.

napsal sem toto:

  if ($soubor_type=="image/jpeg")                      $typ = "jpg";
   elseif ($soubor_type=="image/gif")                      $typ = "gif";
   elseif ($soubor_type=="application/pdf")                $typ = "pdf";
   elseif ($soubor_type=="application/msword")             $typ = "doc";
   elseif ($soubor_type=="application/vnd.ms-excel")       $typ = "xml";
   elseif ($soubor_type=="application/vnd.ms-powerpoint")  $typ = "ppt";
   elseif ($soubor_type=="application/zip")                $typ = "rar";
   elseif ($soubor_type=="audio/x-wav")                    $typ = "wav";
   elseif ($soubor_type=="text/plain")                     $typ = "txt";
   elseif ($soubor_type=="text/html")                      $typ = "txt";
   elseif ($soubor_type=="video/msvideo")                  $typ = "mpg";
   elseif ($soubor_type=="video/mpeg")                     $typ = "mpg";
      else $typ="jine";


- jsou to vsechny povoleny MIME typy ktery muzu uploadnout ale nefunguje to.
vzdycky mi to ulozi do databaze typ "jine" at tam nahraju cokoliv. nechapu to.

Díky za radu
srigi
Profil
Ukaz kod, ktory naplnuje premennu $soubor_type
dRaGen
Profil
NIKDY nepoužívej MIME. Dá se jednoduše zmanipulovat, protože se generuje už v klientské části.
Silně doporučuji zjišťovat typ souborů pomocí koncovky tedy
if (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".JPG"){
srigi
Profil
dRaGen
MIME typ mozes zistit aj na serveri, napr. pomocou balicka funkcii fileinfo.
starburst
Profil
no v podstate mi nejde o to, že se to dá nějak zmanipulovat. je to skript který je v administraci a normalni uzivatel se k tomu nedostane... v podstate je mi jedno co tam uploaduje protoze je to admin, spis potrebuju zjistit co to vlastne uploadoval a priradit tomu ikonku.

cely skript na upload mam takle:
if ($akce == "Upload") {

/* Ziskani datumu */
  $date=Date("Y-m-d");

include ('databaze_option.php');
$tabulka = "downloads"; // nazev tabulky

  $dotaz = "SELECT * FROM $tabulka WHERE `name` = '$soubor_name'";
    $query = mysql_query($dotaz) or die (mysql_error());
    // zjistime, zda se v databazi jiz takovy soubor nenachazi
      $Vysledek = mysql_fetch_array($query);
        if($Vysledek['jmeno'])  { // uploadovany soubor jiz existuje
        echo "uploadovany soubor jiz existuje"; 
          include("zbyteka.php"); die;}
        else
     
  if (($soubor_type="image/*") or ($soubor_type="application/pdf") or ($soubor_type="application/msword") or ($soubor_type="application/vnd.ms-excel") or ($soubor_type="application/vnd.ms-powerpoint") or ($soubor_type="application/zip") or ($soubor_type="audio/x-wav") or ($soubor_type="text/*") or ($soubor_type="video/*")) {
    if (copy ($soubor, "../clenove/dokumenty/$soubor_name")) {
      print "Soubor $soubor_name o velikosti $soubor_size bajtů byl úspěšně uploadnut na server<BR>";

/* tu čast slozityho vybirani souboru ktery muze nahrat muzu v podstate klidne vynechat protoze je mi to jedno co tam nahraje */


    }
    else {
      print "Při nahrávání souboru došlo k chybě!<BR>";
    }
  }
  else {
    print "Soubor není požadového typu! Lze nahrávat soubory typu images, docs, videos, archives<BR>";
  }


  if ($soubor_type=="image/jpeg")                      $typ = "jpg";
   elseif ($soubor_type=="image/gif")                      $typ = "gif";
   elseif ($soubor_type=="application/pdf")                $typ = "pdf";
   elseif ($soubor_type=="application/msword")             $typ = "doc";
   elseif ($soubor_type=="application/vnd.ms-excel")       $typ = "xml";
   elseif ($soubor_type=="application/vnd.ms-powerpoint")  $typ = "ppt";
   elseif ($soubor_type=="application/zip")                $typ = "rar";
   elseif ($soubor_type=="audio/x-wav")                    $typ = "wav";
   elseif ($soubor_type=="text/plain")                     $typ = "txt";
   elseif ($soubor_type=="text/html")                      $typ = "txt";
   elseif ($soubor_type=="video/msvideo")                  $typ = "mpg";
   elseif ($soubor_type=="video/mpeg")                     $typ = "mpg";
      else $typ="jine";


 
	  $dotaz = "INSERT INTO $tabulka VALUES (NULL,'$soubor_name','$popis','$date','$typ')";
	
  mysql_query($dotaz) or die("Error: DB pridat!: ".mysql_error());
 
}
blaaablaaa
Profil
1.
if (($soubor_type="image/*") or ...
porovnava se pomoci ==
2. kde beres promennou $soubor_type? jestli z formulare, tak to ma byt $_FILES["soubor"]["type"]
starburst
Profil
k tomu bodu 1 - opraveno - ale kupodivu to i tak fungovalo.
k bodu 2 - ano beru ho z formulare. ale typ souboru se mi tam ukladal. stejne tak mam brany $soubor_name a $soubor_size a funguje to. ale predelal sem to na to $_FILES["soubor"]["type"] a uz to funguje... nechapu proc neco vezme a neco ne... kazdopadne diky moc.
starburst
dRaGen
Profil
starburst => jak jsem psal dříve, neni dobře používat mime protože je uživatel může lehce editovat. A propo to nevadí že je to v administraci, právě že se ti útočník dostane do administrace, tak by maximálně mohl smazat články či jiné věci, ale na to je záloha databáze, ale tim že bys tam měl nezabezpečenej upload tak by ti mohl vklidu smazat celý ftp, a celou db ...
starburst
Profil
to dRaGen: a tak jak bych to teda mel predelat? kdyz napisu misto toho
if ($_FILES["soubor"]["type"]=="image/jpeg")                      $typ = "jpg";

toto:
if (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".JPG")   $typ = "jpg";


tak by to melo byt v poradku? myslim co se tyce bezpecnosti?
starburst
Profil
vlastne to je blbost to co sem tedka napsal:-)

no takze oprava... kdyz to dam misto:

 if (($_FILES["soubor"]["type"]="image/*") or ($_FILES["soubor"]["type"]="application/pdf") or ($_FILES["soubor"]["type"]="application/msword") atd atd..) {


toto:

if ((strtoupper(substr($_FILES['soubor']['name'],-4)) == ".JPG") or (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".DOC") or (strtoupper(substr($_FILES['soubor']['name'],-4)) == ".XLS") atd atd) {

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: