Autor | Zpráva | ||
---|---|---|---|
chudst Profil |
Mám problém s mazáním souboru. Vypíšu si soubory z adresáře; a chci, aby se mi u každého výpisu zobrazil checkbox a tlačítko "smazat tento soubor". Když napíšu tento kód, tak nefunguje; resp. funguje částečně, když checkbox nezaškrtnu, nic se neděje, ale když ho zaškrtnu u jednoho souboru, smaže se mi vše v adresáři. Najde se nějaká hodná duše, která by mi prosím pomohla? :)
$adresar = "../gcr/"; $vypis = opendir($adresar); while (false!==($file = readdir($vypis))) { if ($file != "." && $file != "..") { $i++; echo "<li><a href=\"$file\">$file</a><br /> <form action=\"index.php\" method=\"post\"> <input type=\"checkbox\" name=\"SMAZAT\" /> <input type=\"submit\" value=\"Chci smazat tento soubor\" class=\"tlacitko\"> </form></li>\n"; $SMAZAT[$i] = $_POST['SMAZAT']; if ($SMAZAT[$i] == true) {unlink("$file"); } } closedir($vypis); |
||
mzk Profil * |
#2 · Zasláno: 21. 4. 2012, 00:02:09
chudst:
$SMAZAT[$i] = $_POST['SMAZAT']; je blbost.. máš špatně udělaný ten formulář.. musíš nějak specifikovat o jaký soubor se jedná.. pokud chceš mazat více souborů zároveň, tak musíš mít jeden formulář (<form> vložit před while a tlačítko na odeslání za konec cyklu) a v těch checkboxech zadávat nějaký jedinečný identifikátor souborů (např. název) a pak to porovnávat a případně mazat..
|
||
chudst Profil |
#3 · Zasláno: 21. 4. 2012, 09:50:02
mzk:
Nene, nechci mazat více souborů zároveň, chci mazat vždy jen jeden konkrétní soubor. A pokud si chci specifikovat tedy o jaký soubor se jedná, jak to udělám? Já to chtěl původně udělat takto: <input type=\"checkbox\" name=\"SMAZAT[$i]\" /> ... $SMAZAT[$i] = $_POST['SMAZAT[$i]']; Ale to mi to nebere; a nebere mi to ani když to udělám jako $_POST['SMAZAT'[$i]]; . V PHPčku se skoro nevyznám, moc v něm nedělám, takže za svoji hloupost se omlouvám :/ |
||
mzk Profil * |
#4 · Zasláno: 21. 4. 2012, 11:11:54
chudst
podle mě to hloupost nebude.. spíš by to chtělo více aktivity v hledání.. dá se to vyřešit více varianty (složitější obsahují nějaké zabezpečení a tak).. jedna z nejjednoduších variant je něco ve stylu: echo '<a href="jmenoscriptu.php?smaz=' . $file . '" />smazat</a>'; if ($file == $_GET['smaz']) { unlink($file); } |
||
chudst Profil |
#5 · Zasláno: 22. 4. 2012, 12:12:40
Strávil jsem nad tím tři hodiny experimentováním a hledáním, ovšem nad formulářovou formou. Takto mě to nenapadlo. Díky hrozně moc, tohle funguje :) A myslíš si, že bys mi mohl prosím poradit i s funkcí Přejmenovat soubor? Do toho While jsem za
<a href=\"index.php?smaz=$file\">smazat</a> přihodil ještě tohle: <a href=\"index.php?prejmenovat=$file\">Přejmenovat</a>. A za to tohle:
if ($file == $_GET['prejmenovat']){ ?> <form action="index.php" method="post" enctype="multipart/form-data"> <table> <tr> <td><b>Původní název souboru:</b></td><td><?php echo $file ; ?></td> </tr> <tr> <td><b>Název souboru:</b></td><td><input type="name" name="prejmenovat" value="<?php echo $file ?>" size="40"></td> </tr> <tr> <td colspan="2"><center><input type="submit" name="prejmenovat_ok" value="Přejmenovat"></center></td> </tr> </table> </form> <?php $prejmenovat = $_POST['prejmenovat']; $prejmenovat_ok = ($_POST["prejmenovat_ok"]); if ($prejmenovat_ok == "Přejmenovat" && $prejmenovat!="") { rename("$file", "$prejmenovat"); } Ale zase: nefunguje mi to :/ Tohle je poslední, s čím bych potřeboval pomoct, pokud bys byl ochotný; ostatní jsem už vyřešil. |
||
mzk Profil * |
#6 · Zasláno: 22. 4. 2012, 15:09:01 · Upravil/a: mzk
chudst:
„ostatní jsem už vyřešil.“ záleží, co si pod tím pojmem ostatní představuješ.. zkus to třeba nějak takhle: if ($_POST['prejmenuj']) { rename($_POST['soubor'], $_POST['nazev']); } echo '<form>'; echo ' <input type="hidden" name="soubor" value="'.$file.'" />'; echo ' <input type="text" name="nazev" />'; echo ' <inptu type="submit" name="prejmenuj" value="Přejmenuj" />'; echo '</form>'; chudst: „Strávil jsem nad tím tři hodiny experimentováním a hledáním, ovšem nad formulářovou formou. Takto mě to nenapadlo.“ ---------------------------------------------------------------------------------------------------------------------------------------------- ještě tak btw s formulářovou formou to jde udělat úplně "stejně", jde jen o to, že musíš nějak specifikovat název toho souboru a akci jakou chceš provést - ale ve své podstatě je to úplně to stejné, jen se jedná o formu předání dat a délku zápisu. v rámci studia si to zkus přepsat do formulářové podoby |
||
chudst Profil |
mzk:
Už jsem přišel na chybu, kterou mám já: <form action="index.php" method="post" enctype="multipart/form-data">
Stačilo změnit na: <form action="index.php?prejmenovat=<?php $file ; ?>" method="post" enctype="multipart/form-data">
A stejný problém byl pravděpodobně i u toho prvního mého problému z formulářem, pak se na to znova mrknu. Děkuju moc za ochotu! |
||
panther Profil |
#8 · Zasláno: 22. 4. 2012, 16:40:57
chudst:
„Nevím, proč mi to nebere, chybu nevidím...“ tu proměnnou $file nevypisuješ, formulář odesíláš na index.php?prejmenovat= , což bys viděl, kdybys nakoukal do zdrojáku.
<form action="index.php?prejmenovat=<?php echo $file ; ?>" method="post" enctype="multipart/form-data"> |
||
Časová prodleva: 12 let
|
0