Autor Zpráva
wasek2611
Profil
Dobrý den,

omlouvám se, že sem píšu tento dotaz, který se tu řešil hodněkrát...Jen to nemůžu stále pochopit a rád bych, aby mi někdo řekl, co mám v kodu špatně. Chci, aby se vedle záznamů objevilo políčko smazat, které by smazalo záznam..

<?php
function zobrazKoncertAdm()
{
    if ($_GET['akce']=="odstran")
{
 $id = $_GET[id];
mysql_query("DELETE * FROM bd_koncert WHERE id=$id");
}
     
$sql="SELECT * FROM bd_koncert WHERE vlozeno<kdy ORDER BY id DESC ";
$res=mysql_query($sql);
echo '<table><colgroup><col id="prvni" /><col id="druhy" /><col id="treti" /><col id="ctvrty" /></colgroup>';

while ($row = mysql_fetch_array($res))
{ 
echo '<tr><td>'.$row[id].'</td><td><a href="?akce=odstran&id='.$row[id].'">[x]</a></td>
<td>'.$row['kdy'].'</td><td>'.$row['kde'].'</td></tr>';
} 

echo '</table>';
?>
}

Název funkce je zavádějicí..dřív pouze měla zobrazit koncerty, nyní chci přidat, název změním až to bude fungovat.
Vyzkoušel jsem dát klauzuli if() i na konec funkce, nefunguje to stále. Nezlobil bych se, kdyby někdo mi našel o této problematice nějaký článek. Zatím jsem našel jen příspěvky ve foru


Děkuji mnohokrát.

PS: Koukám, že když to posílím GETem tak bych to měl escapovat..jen moc nevím jak by to mělo v tomhle případě vypadat...stačí

$id = addslashes($_GET[id]);
$akce = addslashes($_GET['akce']);
? nebo jsem ještě na něco zapomněl
Alphard
Profil
Delete má v MySQL jinou syntaxi, bez *.
Stačí explicitně přetypovat na integer.

mysql_query("DELETE FROM bd_koncert WHERE id=" . (int) $_GET['id']);
Taps
Profil
wasek2611
Aby ti správně fungovalo smazání tak musíš funkci
zobrazKoncertAdm
zavolat
peta
Profil
Viz Taps :) Jinymi slovy, pridej tam echo 111 a pak se sam sebe zeptej, proc se to echo nezobrazilo :)
function zobrazKoncertAdm()
{
echo 111;
...

Ale tech chyb tam mas vice. Takze doporucuji zacit pouzivat error_reporting() a html validator a program, ktery obarvuje kod, treba pspad. tam najedes treba na prvni zavorku a misto aby ukazal, kde konci, tak zobrazi zavorku cervene jako chybu

<?php function zobrazKoncertAdm() { // prvni zavorka neni ukoncena
if ($_GET['akce']=="odstran") {
    $id = $_GET[id];
    mysql_query("DELETE * FROM bd_koncert WHERE id=$id");
}
    $sql="SELECT * FROM bd_koncert WHERE vlozeno<kdy ORDER BY id DESC ";
    $res=mysql_query($sql);
    echo '<table><colgroup><col id="prvni" /><col id="druhy" /><col id="treti" /><col id="ctvrty" /></colgroup>';
while ($row = mysql_fetch_array($res)) {
    echo '<tr><td>'.$row[id].'</td><td><a href="?akce=odstran&id='.$row[id].'">[x]</a></td><td>'.$row['kdy'].'</td><td>'.$row['kde'].'</td></tr>';
}
    echo '</table>';
    ?>
} // toto neni ukonceni prvni zavorky ale html kod; ostatne ti to toto forum obarvilo zelene a ne cerne jako jine zavorky, ze?

Tady mas treba priklad petova brutalniho scriptu, kde je tez mazani odkazem
http://peter-mlich.wz.cz/web/mysql/pr/mysql_priklad.txt
wasek2611
Profil
Alphard: díky, tohle zkusim :) - moc díky upravil sem to, odstranil jsem hvězdičku a jede to :D moc díky :)
btw: ještě bych se rád zeptal, proč musim kontrolovat typ, přetypovávat? Když id je v db uložené jako int a ještě s autoincrementem
Taps: volám to v jiném souboru...v tomto mám jen funkce, které používám
Peta: používám Netbeans, díky za ty závorky, když člověk přesouvá části kodu ve funkci pomocí ctrl+c ctrl+v tak se mu to trochu přehází :D, díky za ten script
mzk
Profil *
wasek2611:
ještě bych se rád zeptal, proč musim kontrolovat typ, přetypovávat? Když id je v db uložené jako int a ještě s autoincrementem
musíš je špatné slovo - spíše bys měl (je to kůli bezpečnosti). Je málo pravděpodobný, že by ti tam počítač dal něco jiného než číslo, ale nezapomínej, že lidi jsou svin* :-P
wasek2611
Profil
mzk:
no jo to je pravda..to mně nenapadlo...to vlastně get :D ..díky...jak jinak to ještě můžu zabezpečit ? ab y mi tam někdo nepodtrčil jiný sqlko ?
jenikkozak
Profil
wasek2611:
Minimálně tak, že před smazáním ověříš, jestli ten, kdo si zobrazil „mazací adresu“, má na odstranění záznamu právo.
wasek2611
Profil
no já bych to rád ověřoval spíš heslem...na webu mám pouze heslo k administraci -> všichni správci ho používají..tedy nemám ani propojené tabulky cizími klíči...Proto bych rád věděl, jak udělat aby po odeslání se zobrazilo okénko (ne nová stránka) s výzvou "zadejte heslo". .

edit: nakonec to udělám jinak...nemusíte nad timhle už bloumat :D ...ted se jen musim naučit, jak funguje a jak používat session
peta
Profil
V tom neni problem.
<?php
session_start();
if (isset($_POST['user'])) {... ... $_SESSION['user'] = 123;}
if (isset($_SESSION['user'])) {... SELECT * FROM users WHER user=$id ...}
?>
Spis je zarazeji, ze mas prihlasovani uzivatelu a session ses rozhodl pouzit az ted...

    $id = isset($_GET['id']) ? (int) $_GET['id'] : ''; // nevim, jestli int jde takto zkombinovat s podminkou
    if ($id>0)
      mysql_query("DELETE * FROM bd_koncert WHERE id=$id");
A mozna bych pouzil slozitejsi dotaz, kdy kontroluji i opravneni uzivatele podle jeho id
... WHERE a.idkonc=$idkonc AND (b.laws>50 OR a.iduser=$iduser)

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: