Autor | Zpráva | ||
---|---|---|---|
ondra.prenek Profil |
#1 · Zasláno: 15. 12. 2014, 13:28:55
Ahoj, dělám na webu vkládání příspěvků přes php/mysql (nepoužívám wordpress) a potřeboval bych vědět, jak udělat, aby návštěvník mého webu mohl vložit obrázky. Jde to udělat taky přes databázi nebo by ste to udělali jinak?
Díky |
||
Taps Profil |
#2 · Zasláno: 15. 12. 2014, 13:50:10
ondra.prenek:
optimální je takové záležitosti dělat přes databázi, do které můžeš např. uložit název obrázku a jeho velikost 1) musíš mít na webu formulář, pomocí kterého návštěvník obrázek nahraje 2) pomocí php provedeš upload obrázku a informace uložíš do databáze 3) vhodné je provádět validaci vkládaného souboru |
||
ondra.prenek Profil |
#3 · Zasláno: 15. 12. 2014, 14:34:02
jak by to mělo vypadat? Díky moc
|
||
Tomáš123 Profil |
#4 · Zasláno: 15. 12. 2014, 14:45:29
ondra.prenek:
„1) musíš mít na webu formulář, pomocí kterého návštěvník obrázek nahraje“ Na webe, kde chceš umožniť užívateľom pridávať obrázky zriadiš stránku s formulárom. „2) pomocí php provedeš upload obrázku a informace uložíš do databáze“ Vyplnené polia formuláru odošleš na skript (uvedený v značke <form> pod atribútom action ), overíš, či je obrázok v správnom formáte, či má požadovanú veľkosť atď. a uložíš potrené informácie do databázy a samotný obrázok do nejakého adresára.
„jak by to mělo vypadat?“ Ak myslíš skript, tak by bolo lepšie najprv preukázať snahu a skúsiť niečo vytvoriť. Aj keď nebude skript fungovať, aspoň ti budú môcť ostatní radiť „na mieru“. |
||
Marschmallow Profil |
ondra.prenek:
Tady máš jednoduchý skript, který ti přiložený obrázek uloží do složky obrazky: <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" /> <input type="submit" value="Nahrát na server!" /> </form> <?php // konfigurace $uploadDir = 'obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci) $allowedExt = array('jpg', 'jpeg', 'png', 'gif'); // pole s povolenymi priponami // zpracovani uploadu if(isset($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) { $counter = 0; $allowedExt = array_flip($allowedExt); foreach($_FILES['obrazky']['name'] as $klic => $nazev) { // zde poslané obrázky proměníme na proměnnou $nazev $nazev = htmlspecialchars($nazev, ENT_QUOTES); $fileName = basename(time() . ".png"); $fileName = sprintf(time() . ".png", pathinfo($nazev, PATHINFO_EXTENSION)); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; $fileName = htmlspecialchars($fileName, ENT_QUOTES); // kontrola souboru if( !is_uploaded_file($tmpName) || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))]) ) { // neplatny soubor nebo pripona continue; } // presun souboru if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) { ++$counter; } } if ($counter > 0) echo "<hr><p>Úspěšně byl nahrán {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků, děkujeme!<br> <br> <b>Odkazy na obrázek</b>:<br> Klikatelný odkaz na obrázek:<br> <a href='http://web.cz/$uploadDir/$fileName' target='_blank'>http://web.cz/$uploadDir/$fileName</a><br> Kopírovatelný odkaz na obrázek:<br> <input type='text' name='f1' id='url' size='100%' value='http://web.cz/$uploadDir/$fileName' onclick='this.select(); PS.clickUrl();'><br> </p>"."<br>"; else echo "<hr><b><font color='red'>CHYBA: Nenahráli jste žádný obrázek, nebo má obrázek špatnou příponu!</font></b><br>"; } ?> A teď, co je v jednotlivých proměnných (tyto proměnné jsou znázorněny v kódu): $uploadDir = relativně umístěná složka, do které se mají obrázky uložit (bez lomítka na konci) $allowedExt = povolené přípony obrázku, ostatní nebudou nahrány $nazev = nezpracovaný název souboru (tak jak jej má uživatel ve svém PC) $fileName = koncový název souboru, se kterým můžeš dále pracovat Proměnná $fileName se pro jistotu na řádku 23 ještě kontroluje pomocí htmlspecialchars, to aby se nemohl provést nebezpečný XSS útok (více zde). Proměnnou $nazev také raději kontroluji - ř. 19 (ačkoliv to není nutné). |
||
Časová prodleva: 11 let
|
0