| 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: 12 let
|
|||
0