Autor Zpráva
Nuimi
Profil
Dobrý den, chtěl by jsem se zeptat jak by se dal tento kód upravit tak aby fungoval. Má to dělat to že když kliknete na tlačítku smaž tak to smaže daný záznam

$zobraz = "SELECT psc, mesto FROM psc";
   $prubeh = $db -> query($zobraz);
   while($row = $prubeh -> fetch_assoc())
   {
    echo("<form mathod=\"post\">
          <table>
           <tr>
            <td>'".$row['mesto']."'   </td>
            <td name=\"psc\">'" . $row['psc']. "'</td>
            <td><input type=\"submit\" name=\"smaz\" value=\"smaž\" /></td>
           </tr>
          </table>
          </form>
          <hr>");
   }
    $psc=$_POST['psc'];
   $smaz="DELETE FROM psc WHERE psc='".$psc."'";

   
  ?>
petr 6
Profil
Do formuláře musíš vložit ještě skrytý input se jménem psc, jehož hodnotou bude PSČ.
Po odeslání zkontroluješ, zda je nastaveno $_POST['psc'] a vykonáš mazací dotaz (který máš v proměnné $smaz).
K plné funkčnosti musíš také opravit překlep u atributu formuláře.
Joker
Profil
petr 6:
Ale muselo by to být upravené tak, aby každé tlačítko byl samostatný formulář.

Jiná možnost je předávat to metodou GET a místo tlačítka udělat odkaz, např <a href="smaz.php?psc=xy">smaž</a>.

Je ale potřeba dát pozor na CSRF (když někdo dá do stránky např. <img src="*stránka*/smaz.php?psc=11111">, zobrazení té stránky uživatelem s právy na smazání to vymaže dané PSČ).
(Poznámka: Ani použití metody POST ovšem před CSRF úplně neochrání.)
petr 6
Profil
Joker:
Ale muselo by to být upravené tak, aby každé tlačítko byl samostatný formulář.
Však to tak má. Asi tě zmátlo, že každý řádek ve výpisu má v samostatné tabulce, což je samozřejmě nevhodné, nicméně formálně správně a na funkci to nemá vliv.

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: