Autor | Zpráva | ||
---|---|---|---|
rotorod Profil * |
dobrý den
chtěl bych v administraci mít možnost nahravat obrazky a pdfka do složky files na ftp. Vložil jsem tento script, otevřu stránku, vyberu obrázek dam nahrát ale píše warning řádek 27 nevíte kde je problém proč mi to nenahraje? děkuji za pomoc <?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) { $fileName = basename($nazev); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; // 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; } } echo "<p>Bylo nahráno {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků.</p>"; } ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" multiple="multiple" /> <input type="submit" value="Nahrát" /> </form> EDIT: tak už vyřešeno v 4 řádku před ./obrazky mají byt 2 tečky :-) |
||
rotorod Profil * |
dobrý den
přesto se zeptám. Nahravání funguje. jaky script bych měl napsat abych viděl v administraci (tam kde je to nahravání) v nějakém seznamu či tabulce to co je již nahrané v té dané složce? děkuji za rady a ještě jednu prosím doplňku: co do stavajiciho scriptu je třeba dopsat aby to hlídalo a nenahrálo obrázek se stejným názvem? protože teď to přepisuje. díky |
||
RastyAmateur Profil |
#3 · Zasláno: 6. 2. 2016, 09:14:40
rotorod:
„abych viděl v administraci (tam kde je to nahravání) v nějakém seznamu či tabulce to co je již nahrané v té dané složce?“ Tak pokud to máš v nějaké speciální složce, je to lehké. Prostě napíšeš script, který ti vypíše obsah složky. K tomu bych použil funkci scandir(). Vrací pole, takže je to super. Pokud je chceš vypsat, uděláš si jen podmínku v cyklu, že se nesmí rovnat "." (aktuální adresář) a ".." (předchozí adresář). No a máš všechny obrázky v poli. Poté, když budeš chtít vědět, jestli už takový obrázek náhodou neexistuje, tak můžeš použít například funkci in_array(). Pokud to nemáš v nějaké speciální složce, tak mě teď napadá to maximálně prohnat podmínkou, která bude zkoumat koncovku souboru. |
||
rotorod Profil * |
#4 · Zasláno: 6. 2. 2016, 13:26:26
RastyAmateur:
a mohl bych Vás (Tě) poprosit o sepsání takového scriptu? jak by to mělo asi vypadat? ten script nahoře na to nahravani mám v samotném souboru "spravce.php" a to je ve složce "admin" děkuji za pomoc |
||
RastyAmateur Profil |
#5 · Zasláno: 6. 2. 2016, 16:34:52
<?php # Výpis všech obrázků $images = scandir("obrazky"); echo "<ul>"; foreach($images as $img){ if($img !== "." and $img !== "..") echo "<li><a href=\"obrazky/".$img."\">".$img."</a></li>"; } echo "</ul>"; # Kontrola, jestli už byl nahrán if(file_exists("obrazky/".$_FILES["obrazky"]["name"])){ die("Obrázek již byl nahrán!");# Obrázek již byl nahrán! } else{ # Pokračovat v nahrávání } ?> Btw: Můžete vykat, můžeš tykat, nemusíš obojí... |
||
rotorod Profil * |
#6 · Zasláno: 7. 2. 2016, 12:30:34
RastyAmateur:
děkuji, takže to mám přidat k tomu předešlému scriptu do jednoho souboru? takže celkový script v souboru spravce.php bude vypadat takto? asi mám něco špatně ale nevím co. děkuji za radu <div id="obsah"> <form method="post" enctype="multipart/form-data"> <h2>Správce souborů</h2> <br> <?php // konfigurace $uploadDir = '../obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci) $allowedExt = array('jpg', 'jpeg', 'png', 'gif', 'pdf'); // 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) { $fileName = basename($nazev); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; // 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; } } echo "<p>Bylo nahráno {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků.</p>"; } # Výpis všech obrázků $images = scandir("obrazky"); echo "<ul>"; foreach($images as $img){ if($img !== "." and $img !== "..") echo "<li><a href=\"obrazky/".$img."\">".$img."</a></li>"; } echo "</ul>"; # Kontrola, jestli už byl nahrán if(file_exists("obrazky/".$_FILES["obrazky"]["name"])){ die("Obrázek již byl nahrán!");# Obrázek již byl nahrán! } else{ # Pokračovat v nahrávání } ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" multiple="multiple" /> <input type="submit" value="Nahrát" /> </form> </form> </div> |
||
RastyAmateur Profil |
Ten script vůbec nedává smysl. Až budu na pc, pokusím se ho opravit. Dej mi hodinku.
<!doctype html> <head> <meta charset="utf-8"> <title>Administrace - fotoUpload</title> <style> ul li a{ text-decoration: none; font-weight: bold; color: blue; } ul li a:hover{ text-decoration: underline; } </style> </head> <body> <?php $uploadDir = 'obrazky'; $allowedExt = array('jpg', 'jpeg', 'png', 'gif'); if(!empty($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) { $counter = 0; $allowedExt = array_flip($allowedExt); foreach($_FILES['obrazky']['name'] as $klic => $nazev) { $fileName = basename($nazev); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; if(file_exists($uploadDir."/".$_FILES['obrazky']['name'][$klic]) || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])){ continue; } if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) { ++$counter; } } echo "<p>Bylo nahráno {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků.</p>"; } ?> <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" multiple="multiple" /> <input type="submit" value="Nahrát" /> </form> <ul> <?php $images = scandir($uploadDir); foreach($images as $img){ if($img !== "." and $img !== "..") echo "<li><a href=\"obrazky/".$img."\">".$img."</a></li>"; } ?> </ul> </body> </html> Nezapomeň si upravit $uploadDir (line 18)
|
||
rotorod Profil * |
ok teraz super, jen jestli ještě mohu:
- po najeti se to jevi jako odkaz. jak to zrušit? - když nahraju obrazek se stejnym nazvem tak to nepřepiše kodovani je OK u mě a jde to dat nějak do 2 nebo 3 sloupcu ten seznam? |
||
RastyAmateur Profil |
odkaz - Je to odkaz. Lze ho odmazat ve foreach() uplně dole. (odmazat to <a href...> a ještě </a>)
seznam - Ano šlo. Ale bylo by to zbytečně komplikované... Opravdu je to nutné? přepis - Myslel jsem, že to byl účel... |
||
RastyAmateur Profil |
#10 · Zasláno: 7. 2. 2016, 15:46:12
Ten výpis v tabulce:
<table> <?php $cols = 3; # počet sloupců $images = scandir($uploadDir); $images2 = array(); foreach($images as $img){ if($img !== "." and $img !== "..") $images2[] = $img; } $size = count($images2); for($i=0; $i<ceil($size/$cols); $i++){ echo "<tr>"; for($ii=0; $ii<$cols; $ii++){ if(!empty($images2[($i*$cols)+$ii])){ echo "<td>".$images2[($i*$cols)+$ii]."</td>"; } else{ break; } } echo "</tr>"; } ?> </table> |
||
rotorod Profil * |
#11 · Zasláno: 7. 2. 2016, 16:25:13
ano zapomněl jsem na ten přepis. omlouvám se, je to ok. Jen mě zmatlo že to napsalo že obrazek nahrany a přitom tzv nebyl, bo to nepřepsalo
sloupce super. jen jestli mohu 3 věci k sloupcum - kde zakomponovat <li></li> abych tam viděl tu tečku? je to lepší - jde nějak dát odsazení mezi sloupci? - jde udělat aby v tom seznamu, to co se nahralo, aby bylo jako první v seznamu? děkuji |
||
Keeehi Profil |
#12 · Zasláno: 7. 2. 2016, 16:36:11
rotorod:
Jde udělat všechno. Evidentně nezvládáš vůbec nic, jen lepší k sobě části kódů co na internetu najdeš. Pokud chceš, aby za tebe někdo odvedl práci, tak na tu je sekce Práce a zakázky |
||
RastyAmateur Profil |
rotorod:
- Ano jde, ale ručně (možná by to šlo i seznamem, ale ručně mi to přijde lepší). Uprav řádek 14 z [#10] na echo "<td>• ".$images2[($i*$cols)+$ii]."</td>";
- Do stylů přidej table td{ padding: 5px 10px; } První číslo (5px) dává odsazení shora a zdola a druhé číslo (10px) zleva a zprava
- Asi by to šlo, ale popravdě nechci se tím zabývat. Jestli chceš, udělej si to sám podle návodu, ale mně se do toho nechce. Mám ještě svou práci a nemám čas hledat, co která funkce dělá, abych tomu dobře rozuměl a podal přesný výsledek. Jinak souhlasím s Keeehim, původně jsem si myslel, že jen neumíš v PHP, ale jak se zdá, tak ani v HTML či CSS. Kdyby jsi si podal žádost do Práce a zakázky (viz. Keeehi), určitě by se našla nějaká dobrá duše, která by to udělala rychle a dobře... rotorod: Moc to neřeš, nemyslíme to špatně :-) Klidně se ptej dál, ale třídit podle data nahrání, to se mi moc dělat nechce. To by bylo nejlepší udělat asi pomocí databáze... |
||
rotorod Profil * |
#14 · Zasláno: 7. 2. 2016, 18:36:27
rozumím a děkuji ti Rasty, moc si mi pomohl a je pravda co řikate, stydím se ale děkuji
|
||
RastyAmateur Profil |
#15 · Zasláno: 7. 2. 2016, 18:58:37
rotorod:
není zač se stydět a já jsem se alespoň něco přiučil. :-) |
||
Časová prodleva: 8 dní
|
|||
rotorod Profil |
#16 · Zasláno: 15. 2. 2016, 19:07:47
dobrý den
mohl bych mít na Rastyho nebo i někoho jiného ještě jeden dotaz, prosbu? potřeboval bych do tohoto kodu někde zakopletovat jednu funkci. Aby v tom vypisu nahranych obrazku byla možnost smazani jednotlivého obrazku. (třeba znaménkem X). mohl bych mit prosbu kdyby někdo z Vás napsal takovýto kod a zakomponoval albo napsal kde ho vložit? Budu moc vděčen a vím že tady se to moc nehodí, ale klidně se nějak odměním, pokud bude třeba. předem děkuji a omlouvám se |
||
RastyAmateur Profil |
#17 · Zasláno: 15. 2. 2016, 19:49:29
rotorod:
Tak PHP kód bude (Dej ho nejspíš úplně na začátek, ihned za značku <body> ):
<?php $delete = isset($_GET["delete"]) ? $_GET["delete"] : null; if(!empty($delete)){ $dir = "obrazky"; if(file_exists($dir."/".$delete)){ $unlink = unlink($dir."/".$delete); if($unlink) echo "<h1>Soubor ".$delete." byl smazán!</h1>"; else echo "<h1>Někde se stala chyba, soubor nebyl smazán!</h1>"; } } ?> echo "<td>".$images2[($i*$cols)+$ii]."<a href="?delete=".$images2[($i*$cols)+$ii].">X</a></td>"; echo "<td>".$images2[($i*$cols)+$ii]."<a href="?delete=".$images2[($i*$cols)+$ii]."><button>Smazat</button></a></td>"; Snad bude kód fungovat. Kdyby ne, piš! |
||
rotorod Profil |
#18 · Zasláno: 15. 2. 2016, 20:16:24
tak nefunguje ten řádek 14, tam vypisuje eror. Posilam raději screen, aby bylo vidět ty barvy, ten odkaz <a href> je již zelené barvy a by být asi neměl
|
||
Fisir Profil |
#19 · Zasláno: 15. 2. 2016, 20:19:09
Reaguji na rotoroda:
Musíš uvozovky buď escapovat, nebo je zaměnit za jednoduché: echo "<td>".$images2[($i*$cols)+$ii]."<a href=\"?delete=".$images2[($i*$cols)+$ii]."\">X</a></td>"; echo "<td>".$images2[($i*$cols)+$ii].'<a href="?delete='.$images2[($i*$cols)+$ii].'">X</a></td>'; |
||
RastyAmateur Profil |
#20 · Zasláno: 15. 2. 2016, 20:33:01
Fisir:
Děkuji, ani jsem si toho nevšiml... |
||
rotorod Profil |
#21 · Zasláno: 16. 2. 2016, 07:37:18
děkuji za opravu, ale křížek nic nesmaže. ono se to přesměruje že by to mělo byt smazano, ale nic ani nepiše a nesmaže. Dal jsem to hned za <body>
jestli tak vkladam cely kod a předem děkuji <body> <?php $delete = isset($_GET["delete"]) ? $_GET["delete"] : null; if(!empty($delete)){ $dir = "obrazky"; if(file_exists($dir."/".$delete)){ $unlink = unlink($dir."/".$delete); if($unlink) echo "<h1>Soubor ".$delete." byl smazán!</h1>"; else echo "<h1>Někde se stala chyba, soubor nebyl smazán!</h1>"; } } $uploadDir = '../obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci) $allowedExt = array('jpg', 'jpeg', 'png', 'gif', 'pdf'); // pole s povolenymi priponami // zpracovani uploadu if(!empty($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) { $counter = 0; $allowedExt = array_flip($allowedExt); foreach($_FILES['obrazky']['name'] as $klic => $nazev) { $fileName = basename($nazev); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; if(file_exists($uploadDir."/".$_FILES['obrazky']['name'][$klic]) || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])){ continue; } if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) { ++$counter; } } if ($counter > 0) echo "<p>Bylo nahráno {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků!</p>"."<br>"; else echo "!!!Při nahrávání souboru došlo k chybě, nic se nenehrálo!!!"."<br>"; } ?> <br> <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" multiple="multiple" /> <input type="submit" value="Nahrát" /> </form> <br> <div id="table"> <table> <?php # Výpis všech obrázků $cols = 3; # počet sloupců $images = scandir($uploadDir); $images2 = array(); foreach($images as $img){ if($img !== "." and $img !== "..") $images2[] = $img; } $size = count($images2); for($i=0; $i<ceil($size/$cols); $i++){ echo "<tr>"; for($ii=0; $ii<$cols; $ii++){ if(!empty($images2[($i*$cols)+$ii])){ echo "<td>• ".$images2[($i*$cols)+$ii].'<a href="?delete='.$images2[($i*$cols)+$ii].'"> X</a></td>'; } else{ break; } } echo "</tr>"; } ?> </table> </div> </body> |
||
RastyAmateur Profil |
#22 · Zasláno: 16. 2. 2016, 10:09:12
rotorod:
Vyzkoušej na řádce 6 upravit na $dir = "../obrazky"; . Teď na to koukam, a tam níž (line 17) máš určenou složku na nahrávání obrázků jako "../obrazky". Já zde měl pouze "obrazky"... Mohlo by to být ono.
Pokud ten kód upravíš na: $delete = isset($_GET["delete"]) ? $_GET["delete"] : null; if(!empty($delete)){ $dir = "obrazky"; if(file_exists($dir."/".$delete)){ $unlink = unlink($dir."/".$delete); if($unlink) echo "<h1>Soubor ".$delete." byl smazán!</h1>"; else echo "<h1>Někde se stala chyba, soubor nebyl smazán!</h1>"; } else{ echo "<h1>Soubor nenalezen!</h1>"; } } |
||
rotorod Profil |
#23 · Zasláno: 16. 2. 2016, 15:53:56
ani "../obrazky", ani s jednoduchyma....tohle jsem zkoušel jako prvni a nešlo a pak sem psal. a teraz po změně kodu mi ani do SOUBOR NENALEZEN nenapiše. furt stejne-nic
|
||
RastyAmateur Profil |
#24 · Zasláno: 16. 2. 2016, 16:00:18
rotorod:
Tak to nevím. Zkontroluj, jestli url adresa je opravdu ve tvaru soubor.php?delete=obrazek.jpg... |
||
Lonanek Profil |
#25 · Zasláno: 16. 2. 2016, 16:05:22
Pokud to nic nevypíše, pak je $delete prázdné.
Otestujte si co obsahuje $delete. |
||
RastyAmateur Profil |
#26 · Zasláno: 16. 2. 2016, 16:13:25
rotorod:
Tak jsem si to stahnul a rozjel na localu, a nevím, co na tom nefungovalo. Kód: <!doctype html> <head> <meta charset="utf-8"> </head> <body> <?php $delete = isset($_GET["delete"]) ? $_GET["delete"] : null; if(!empty($delete)){ $dir = "../obrazky"; if(file_exists($dir."/".$delete)){ $unlink = unlink($dir."/".$delete); if($unlink) echo "<h1>Soubor ".$delete." byl smazán!</h1>"; else echo "<h1>Někde se stala chyba, soubor nebyl smazán!</h1>"; } else{ echo "<h1>Soubor nenalezen!</h1>"; } } $uploadDir = '../obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci) $allowedExt = array('jpg', 'jpeg', 'png', 'gif', 'pdf'); // pole s povolenymi priponami // zpracovani uploadu if(!empty($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) { $counter = 0; $allowedExt = array_flip($allowedExt); foreach($_FILES['obrazky']['name'] as $klic => $nazev) { $fileName = basename($nazev); $tmpName = $_FILES['obrazky']['tmp_name'][$klic]; if(file_exists($uploadDir."/".$_FILES['obrazky']['name'][$klic]) || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])){ continue; } if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) { ++$counter; } } if ($counter > 0) echo "<p>Bylo nahráno {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků!</p>"."<br>"; else echo "!!!Při nahrávání souboru došlo k chybě, nic se nenehrálo!!!"."<br>"; } ?> <br> <form method="post" enctype="multipart/form-data"> <input type="file" name="obrazky[]" multiple="multiple" /> <input type="submit" value="Nahrát" /> </form> <br> <div id="table"> <table> <?php # Výpis všech obrázků $cols = 3; # počet sloupců $images = scandir($uploadDir); $images2 = array(); foreach($images as $img){ if($img !== "." and $img !== "..") $images2[] = $img; } $size = count($images2); for($i=0; $i<ceil($size/$cols); $i++){ echo "<tr>"; for($ii=0; $ii<$cols; $ii++){ if(!empty($images2[($i*$cols)+$ii])){ echo "<td>• ".$images2[($i*$cols)+$ii].'<a href="?delete='.$images2[($i*$cols)+$ii].'"> X</a></td>'; } else{ break; } } echo "</tr>"; } ?> </table> </div> </body> </html> |
||
rotorod Profil |
#27 · Zasláno: 16. 2. 2016, 16:14:09
ano, nahraju obrazek podnos.jpg
pak zmačknu X že ho chci smazat a v url mám www.../admin/?delete=podnos.jpg akorát fotky jsou ve složce obrazky, takže cesta neni ok? |
||
RastyAmateur Profil |
#28 · Zasláno: 16. 2. 2016, 16:14:52
rotorod:
ne, tu cestu označuje proměnná $dir
|
||
Lonanek Profil |
#29 · Zasláno: 16. 2. 2016, 17:29:07
rotorod:
„ano, nahraju obrazek podnos.jpg“ Kam? Do jaké složky, nejlépe uvést relativně k rootu domény. „akorát fotky jsou ve složce obrazky, takže cesta neni ok?“ A obrázek nemůže být fotka? Nebo jak tomuto tvrzení rozumět? |
||
RastyAmateur Profil |
#30 · Zasláno: 16. 2. 2016, 17:47:24
Lonanek:
On myslel "../obrazky" a "obrazky" (proměnná, která se zadává do funkce file_exists() a unlink() |
||
Téma pokračuje na další straně.
|
0