Zdravim, řešim problém s mazáním dat z databáze které používám
v menu. Zatím to vypadá následovně:
<?
include ‚connect.php‘;
echo ‚<div id=„nadpis“>‘.‚<h1>Editace
menu</h1>‘.‚</div>‘;
$dotaz=mysql_query(„SELECT id, nazev, rodic FROM menu“);
echo ‚<div id=„table“>‘;
echo ‚<table border=1>‘;
echo
‚<tr><td>ID</td><td>Nazev</td><td>rodic</td><td>správa</td><td>správa</td></tr>‘;
while($pole=mysql_fetch_array($dotaz))
echo
‚<tr>‘.‚<td>‘.$pole[‚id‘].‚</td>‘.‚<td>‘.$pole[‚nazev‘].‚</td>‘.‚<td>‘.$pole[‚rodic‘].‚</td>
<td><a
href=„?akce=smazat&id=‘.$pole[‚id‘].‚"title="smazat“>smazat</a></td>
</tr>‘;
echo ‚</table>‘;
echo ‚</div>‘;
if($_GET[‚akce‘]==‚smazat&id=‘ && $_POST[‚id‘]){
mysql_query („DELETE FROM menu WHERE Id=“.$_GET[‚id‘]) ;
}
?>
výpis mi funguje, ale nemůžu přijít na to, kde dělám chybu v tom mazání. Budu vděčnej za každou radu. Předem Díky.
Příště použij formátování kódu.
Těžko říct, jestli tam nemáš někde chybu s podobou odkazu. Ta podmínka na konci by měla vypadat takto:
if ($_GET['akce'] == 'smazat' && isset($_GET['id']))
V kódu máš několik bezpečnostních děr. Především bije do očí ta SQL injection (úpravou parametru id v adrese lze promazat celou databázi). Dál také neescapuješ výstup pomocí htmlspecialchars() (XSS zranitelnost), takto obyčejné odkazy na mazání dat jsou náchylné na CSRF.
Doporučuji ti nastudovat a začít používat nějaký framework, který tyto běžné problémy řeší za tebe a především budeš mít díky němu přehlednější kód. Podívej se např. na Nette.
Editoval Ondřej Mirtes (16. 3. 2011 19:55)
Díky za rady, vím že je to děs, ale php mám v ruce prakticky týden. Šlo mi jen o to udělat si na web API kde budu mít výpis dat z dtb editaci, mazání, a vytvoření nového záznamu. Jinak s tou upravenou podmínkou mi to též nejde, takže bych to viděl, že to celý předělám.