mam problém s funkcí mazání a nemužu na to přijít ....poradí někdo?
<?
..........................jine funkce
...................
........................
//mazani radku z tabulky
if($smazat):
DELETE FROM ($co) where id="($pol)";
mysql_db_query($db);
endif;
..........................pokracovani skriptu
..........................................
...................................
?>
//formular pro zadani mazane hodnoty
<form action="admin.php" metod="post">
<tr><td>od: </td>
<td><select name="co">
<option value=autoklima>Auto klimatizace</option>
<option value=chlazeni>Chlazeni</option>
<option value=transpchlaz>Transp.chlazeni</option>
<option value=klima>Klimatizace</option><? echo stripslashes ($co);?> //vyber tabulky mySqL
<input type= text name="smazat" slize="5" value=<? echo stripslashes ($pol);?>> //cislo mazaneho Id
<input type= submit value="smazat">
<input type= hidden name "smazat" value>
</tr>
</form>
hlasi me to chybu hned u DELETE FROM :-((((
DELETE FROM je SQL ne php.. takze je treba to dat do textove promenne a predat do toho mysql_query() viz dokumentace php...
soryy sem na tohle tupej šlo by to takhle ? tet nejsem u toho správnýho kompu
//mazani radku z tabulky
if($smazat):
mysql_db_query($db,"DELETE FROM ($co) where ($pol)");
endif;
//formular pro zadani mazane hodnoty
nemas tam mysql_connect() a mysql_select_db()
Jo to je o pár řádků vejš
Vip, tak takhle by to šlo... jestli to nehlásí chybu, tak je to OK, ne?
Chybu to nehlásí, ale dělá to ouplný nic :-DDD
fakt nevim večer sem prasknu celej zdroják třeba na to někdo příjde
no, základní myšlenka je takováto:
připojit db (mysql_connect())
zvolit db (mysql_select_db())
spustit SQL dotaz a nechat si vrátit výsledek ($vysledek = mysql_query())
z výsledku si vypsat, co jsem to vlastne dostal (
while ( $row = mysql_fetch_array($vysledek) ) {
echo "prvni sloupec: ".$row[0];
echo "slouec jmeno: ".$row['jmeno'];
}
nebo, pokud máš můj krásný objekt:
$db = new MySQL_db_driver("host=localhost dbname=moje user=marek password=marek");
$db->db_exec('select * from x');
while ( $row = $db->fetch() ) {
.... # stejne.
}
1) trochu me tam znervoznuje ta kupa zavorek
2) $co znamena nazev tabulky?
takze:
if($smazat):
mysql_db_query($db,"DELETE FROM $tabulka WHERE ($pol)");
endif;
mysql_query("DELETE FROM $tabulka WHERE id='$pol'"); ?
David:
Fce mysql_db_query() zde na WZ nefunguje. Použij to, co píše OndraSter.
sem to udelal jinak a už mě to funguje ale díky pánové
ak by ste mali
$smazat=$_REQUEST["s"];
$pol=$_REQUEST["pol"];
if($smazat){
mysql_query("DELETE FROM $tabulka WHERE (id = $pol)");
}
tak ked niekto by vam nikto isiel na stranku..
.php?s=1&pol=1 or 1=1
tak by vam to vycistilo celu tabulku (SQL Injection)
spravnejsie je
mysql_query("DELETE FROM $tabulka WHERE (id = '$pol')");
aj ked tu si treba dat pozor na to, co je vlastne $pol, z kade to ide, a ci to ma addslashes().
npr. ak niekto urobi skript
$pol=stripslashes($_REQUEST["pol"]);
tak vam ani toto nepomoze, lebo ..
.php?s=1&pol=1' or 1=1)/*
toto vam tiez vymaze celu tabulku
ale ani automaticke addslashes, zo vstupu vam nepomoze, keby ste chceli smazat npr. user agent do db.
mysql_query("DELETE FROM $tabulka WHERE (id = '".$_REQUEST['HTTP_USER_AGENT']."')");
lebo ako vsetci samozrejme viete, user agent chodi cez poziadavku na stranku..
npr.
GET / HTTP/1.1
host: localhost
User-Agent: 1' or 1=1)/*
takze>>
stale pouzivajte '
nikdy nepouzivajte stripslashes (iba na vystup)
prip. este kontrolujte ci to obsahuje ', a pouzite na to addslashes()
- pokud chci mazat jen jeden radek z tabulky, vzdy na konec dotazu dam "LIMIT 1". To je tak pro jistotu,uz mi to prakrat zachranilo tabulku - staci jedna blba prehlidnuta chyba a bylo by vsechno v tahu.
- kdyz pouzivam promenny zvenci, tak vzdycky pouzivam $_GET['promenna'] a nebo $_POST['promenna'], nikdy ne globalni promenne - kvuli bezpecnosti.
- pokud mazu data z tabulky, nikdy se neridim jen daty z formulare a podobnych. To se da velmi snadno zneuzit. Vzdy se snazim overit, jestli ten dotaz je od uzivatele "opravneny".