Autor Zpráva
ra100
Profil *
Zdravím všetkých.
Dal som do kopy tento kód -
<form action="" method="post" enctype="multipart/form-data">
nazov: <br />
<input type="text" name="txt"><br /><br /> 
<?php
$a = '<input type="file" name="obr" /><br/>';    
      
if(!isset($_GET['uni'])) {
    echo '<a href="noname1.php?uni=obr">pridaj obr</a><br />';    
}                                                                       
if(isset($_GET['uni']) and $_GET['uni'] == 'obr') {
    echo $a.'<br />';
    echo '<a href="?uni=obr1">pridaj obr</a>&nbsp;&nbsp;alebo&nbsp&nbsp&nbsp<input type="submit" name="submin" value="odosli" /><br />'; 
}  
if(isset($_GET['uni']) and $_GET['uni'] == 'obr1') {
    echo $a.'<br />'; 
    echo $a.'<br />';
    echo '<a href="?uni=obr2">pridaj obr</a>&nbsp;&nbsp;alebo&nbsp&nbsp&nbsp<input type="submit" name="submin" value="odosli" /><br />';  
} 
if(isset($_GET['uni']) and $_GET['uni'] == 'obr2') {
    echo $a.'<br />'; 
    echo $a.'<br />';
    echo $a.'<br />';      
    echo '<a href="?uni=obr3">pridaj obr</a>&nbsp;&nbsp;alebo&nbsp&nbsp&nbsp<input type="submit" name="submin" value="odosli" /><br />';
} 
if(isset($_GET['uni']) and $_GET['uni'] == 'obr3') {
    echo $a.'<br />'; 
    echo $a.'<br />';
    echo $a.'<br />';      
    echo $a.'<br />';  
    echo '<a href="?uni=obr4">pridaj obr</a>&nbsp;&nbsp;alebo&nbsp&nbsp&nbsp<input type="submit" name="submin" value="odosli" /><br />';
} 
if(isset($_GET['uni']) and $_GET['uni'] == 'obr4') {
    echo $a.'<br />'; 
    echo $a.'<br />';
    echo $a.'<br />';      
    echo $a.'<br />'; 
    echo $a.'<br />';
    echo 'Maximalny pocet obrazkov na odoslanie je 5.<br /><br />';
    echo '<input type="submit" name="submin" value="odosli" /><br />';
}                  
?>
</form>

Vo Formulári sa pridávajú ďaľšie -
<input type="file" name="obr" />

Poprosím o radu, ako zefektívniť tento kód pomocou napr. cyklu v php.
Ďakujem za rady.
perwin
Profil
ra100:
Tady jsem pro tebe napsal efektivní kód v JavaScriptu, PHP je úplně zbytečné do tohoto míchat, protože:
1) Např. já si vyberu 1 soubor, a pak si řeknu, že bych si nahrál další, takže kliknu na ten odkaz. Nojo, jenže tím se sice přidá další input, ale zruší se mi výběr toho předchozího souboru. -> Neměl by tam být refresh stránky
2) V tom tvém kódu má každý nový input stejný name, z čehož vyplývá, že budeš mít problém s nahráváním souborů.
Můj kód:
<script type="text/javascript">
  function pridat() {
  var nyni = document.forms['upload'].elements['pocet'].value;
  if(nyni!="5") {
  dalsi = (nyni*1)+1;
  document.getElementById('files').innerHTML += '<input type="file" name="obr'+ dalsi +'"> <br>';
  document.forms['upload'].elements['pocet'].value = dalsi;
  } else {   
  document.getElementById('info').innerHTML = '<b>Maximum souborů je 5. Nemůžeš nahrát více souborů!</b> <br>';
  }
  }
  </script>       
  <form action="" method="POST" name="upload">    
  <input type="hidden" value="1" name="pocet"> <br>
  <div id="files">
  <input type="file" name="obr1"> <br>
  </div>  
  <span id="info"></span>
  <input type="button" value="Přidat obrázek" onclick="pridat();"> nebo <input type="submit" name="send" value="Odeslat">
  </form>

Toto má několik výhod:
1) Není tam refresh -> Nestratíš již vybraný soubory.
2) Nemusíš mít nijak složitý kód v PHP.
3) Každý nový input má name obr1, dál obr2, dál obr3 atd.
4) Počet inputů máš v hidden inputu pocet, takže potom v PHP nahrávacím kódu víš, kolik souborů je nahráváno.
=> Pak vypíšeš tolik proměnných obsahující soubory, kolik bylo těch inputů při odesílání.
pcmanik
Profil
perwin:
Myslim, ze namiesto prenasania v hidden, by bolo lepsie vyuzit na strane php cyklus a pokazde overovat isset() Inak by zakerny uzivatel mohol zmenit hodnotu v tom hiddene a mohlo by to narobit riadne problemy.
perwin
Profil
pcmanik:
To pak přece stačí počet ověřit v PHP kódu nahrávání ne? A pokud je počet proměnných vyšší než 5, pošle to uživatele zpět. Nebo to prostě nahraje maximimálně 5 souborů, a ty zbývající to nenahraje.
pcmanik
Profil
perwin:
Bral som to ako bezpecnostne riziko, preto som na to upozornil, myslim ze ra100 by to nenapadlo.
ra100
Profil *
perwin:
Ďakujem za skript a za ochotu )
Ako písal pcmanik, bezpečnostné riziko ma nenapadlo.
Prave preto mam otazku na pcmanik, ...by bolo lepsie vyuzit na strane php cyklus ....
To bol moj prvopociatocny zamer.
Preto ma zaujíma, ako si to myslel s tou bezpečnosťou a cyklom ?
...mna napadlo napr. zabezpečiť
<input type="file"... 
tým, že bude ako záznam v db, a bude volaný v skripte cez fopen..napr...
Ďakujem za radu.
ra100
Profil *
perwin:
...V php sa používa v skripte overovanie typu obrázku jpeg, png, gif... koli bezpečnosti.
V tvojom js skripte to nevidím.
S js mám málo skúseností.
Predpokladám ale, že js s tým nemá také bezpečnostné problémi.
Ďakujem za rady.
Medvídek
Profil
perwin:
3) Každý nový input má name obr1, dál obr2, dál obr3 atd.
Což není nejefektivnější, radši bych z toho udělal pole a to pak celé prošel.

<input type="file" name="obrazek[]" />
ra100
Profil *
Medvídek:
...dodám ešte, že obr1, obr2, obr3.... budem meniť na generované premenné, podľa názvov v odosielanom formulári.
Ďakujem za radu ohľadom
name="obrazek[]" 
.
perwin
Profil
ra100:
V php sa používa v skripte overovanie typu obrázku jpeg, png, gif... koli bezpečnosti.
Ověřit typ vybraného souboru si můžeš pomocí:
if(document.forms['upload'].elements['...'].value.lastIndexOf(".jpg")==-1 || ...) { ... }

Můžeš si to nastavit i do onchange="" a jakmile někdo vybere nesprávný typ souboru, můžeš buďto nastavit alertovou hlášku nebo restartování formuláře -> zruší to nesprávný výběr.
Medvídek
Profil
perwin:
Každopádně na kontrolu koncovky bych nespoléhal a stějně provedl na serveru kontrolu mime-type.
perwin
Profil
Medvídek:
Jasně, já bych to prostě kontroloval až PHP kódu náhrání.
Ten JS kód je spíš takové upozornění pro toho, kdo se tam snaží nahrát nesprávny soubor.
ra100
Profil *
perwin:
...Ďakujem za nápomocný dodatok.
Medvídek
php teda z celého procesu nebudem vylučovať...
Ďakujem.

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