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