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 *
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
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 *
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
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 *
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
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">

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: