MySQL, web - mazanie záznamov: Rozdiel medzi revíziami
d |
d |
||
Riadok 17: | Riadok 17: | ||
Ako vzor si zoberieme súbor select.php. Štruktúra a opis tohoto súboru je v časti [[MySQL a web]]. Princíp funkcionality je nasledovný: | Ako vzor si zoberieme súbor select.php. Štruktúra a opis tohoto súboru je v časti [[MySQL a web]]. Princíp funkcionality je nasledovný: | ||
*Údaje tabuľky zobrazíme podobne ako pri príkaze SELECT. | *Údaje tabuľky zobrazíme podobne ako pri príkaze SELECT. | ||
− | **Pre zobrazenie posledného stĺpca použijeme už známu funkciu ''zobraz_vysledok_dotazu'', avšak pridáme druhý parameter | + | **Pre zobrazenie posledného stĺpca použijeme už známu funkciu ''zobraz_vysledok_dotazu'', avšak pridáme druhý parameter 'delete' |
*Funkcia ''zobraz_vysledok_dotazu'' zobrazí všetky záznamy v tabuľke a do posledného stĺpca pridá odkaz na zmazanie. | *Funkcia ''zobraz_vysledok_dotazu'' zobrazí všetky záznamy v tabuľke a do posledného stĺpca pridá odkaz na zmazanie. | ||
**Všimnite si, že pri prechode myšou nad tieto obrázky sa mení adresa odkazu: | **Všimnite si, že pri prechode myšou nad tieto obrázky sa mení adresa odkazu: | ||
Riadok 23: | Riadok 23: | ||
***<nowiki>http://localhost/vyuka/das/fm/delete.php?id=2</nowiki> | ***<nowiki>http://localhost/vyuka/das/fm/delete.php?id=2</nowiki> | ||
***<nowiki>http://localhost/vyuka/das/fm/delete.php?id=3</nowiki> | ***<nowiki>http://localhost/vyuka/das/fm/delete.php?id=3</nowiki> | ||
− | **Rozdiel v adrese je len v poslednej časti | + | **Rozdiel v adrese je len v poslednej časti 'id=...'. Práve toto číslo odkazuje na záznam, ktorých chceme zmazať. |
− | *Ak v php aplikácii zistíme, že existuje parameter | + | *Ak v php aplikácii zistíme, že existuje parameter 'id' a že má nejakú hodnotu, ideme tento záznam zmazať: |
**Kontrola url adresy je rovnaká ako v prípade [[MySQL, web - vkladanie údajov|vkladania údajov]]. | **Kontrola url adresy je rovnaká ako v prípade [[MySQL, web - vkladanie údajov|vkladania údajov]]. | ||
**Vytvoríme SQL dotaz: DELETE FROM city WHERE ID=XXX, kde XXX bude hodnota z URL parametra ID. | **Vytvoríme SQL dotaz: DELETE FROM city WHERE ID=XXX, kde XXX bude hodnota z URL parametra ID. | ||
Riadok 31: | Riadok 31: | ||
===Krok 1: Zobrazenie tabuľky so stĺpcom 'zmazať'=== | ===Krok 1: Zobrazenie tabuľky so stĺpcom 'zmazať'=== | ||
Na riadku 1 až 3 je spojenie sa s databázou, nastavenie správnej znakovej sady a výber databázy. Nasleduje vytvorenie SQL dotazu, ktorý z tabuľky vyberie záznamy podľa určitého krtéria (všetky slovenské mestá). Na riadku 5 je odoslanie dotazu na databázu. | Na riadku 1 až 3 je spojenie sa s databázou, nastavenie správnej znakovej sady a výber databázy. Nasleduje vytvorenie SQL dotazu, ktorý z tabuľky vyberie záznamy podľa určitého krtéria (všetky slovenské mestá). Na riadku 5 je odoslanie dotazu na databázu. | ||
− | Na riadku č.7 je použitá už známa funkcia ''zobraz_vysledok_dotazu''. Ak uvedieme 2-hý parameter hodnotu | + | Na riadku č.7 je použitá už známa funkcia ''zobraz_vysledok_dotazu''. Ak uvedieme 2-hý parameter hodnotu 'delete', vo výslednej tabuľke sa objaví posledný stĺpec, kde bude odkaz na zmazanie riadku. |
Upozornenie: Nasledujúca aplikácia ráta s tým, že prvý stĺpec je vždy ID. | Upozornenie: Nasledujúca aplikácia ráta s tým, že prvý stĺpec je vždy ID. | ||
Riadok 48: | Riadok 48: | ||
V prípade mazania údajov je tvorba SQL dotazu jednoduchá. Stačí do pripraveného dotazu doplniť jednu hodnotu (ID mazaného záznamu). | V prípade mazania údajov je tvorba SQL dotazu jednoduchá. Stačí do pripraveného dotazu doplniť jednu hodnotu (ID mazaného záznamu). | ||
− | Nastáva tu však rovnaký problém, ako pri pridávaní údajov. Údaje chceme mazať len v tom, prípade, ak sme klikli na ikonu zmazania záznamu. Potrebujeme teda skontrolovať URL adresu, či obsahuje časť | + | Nastáva tu však rovnaký problém, ako pri pridávaní údajov. Údaje chceme mazať len v tom, prípade, ak sme klikli na ikonu zmazania záznamu. Potrebujeme teda skontrolovať URL adresu, či obsahuje časť 'id=hodnota'. Už vieme, že tieto parametre sú uložené v špeciálnej premennej $_GET. |
<source lang="php"> | <source lang="php"> | ||
// spojenie sa s databázou | // spojenie sa s databázou | ||
Riadok 74: | Riadok 74: | ||
// ostatný kód | // ostatný kód | ||
</source> | </source> | ||
− | Po zavolaní funkcie getUdaje bude obsahovať premenná $udaje jeden údaj. Poznamenajme, že premenná $udaje je asociatívne pole, preto tento jeden údaj bude na indexe | + | Po zavolaní funkcie getUdaje bude obsahovať premenná $udaje jeden údaj. Poznamenajme, že premenná $udaje je asociatívne pole, preto tento jeden údaj bude na indexe 'id' (hodnota indexu je daná URL parametrom). |
− | Chceme teda zmazať údaj v tabuľke city s číslom ID <nowiki>$udaje[ | + | Chceme teda zmazať údaj v tabuľke city s číslom ID <nowiki>$udaje['id']</nowiki>. |
===Krok 3: Vykonanie SQL dotazu=== | ===Krok 3: Vykonanie SQL dotazu=== | ||
Pripravený dotaz ($SQL_delete) stačí odoslať na databázu a skontrolovať odpoveď databázového servera. V prípade úspechu (zmazania) vráti funkcia mysql_query hodnoru true, v prípade neúspechu vráti hodnotu false. | Pripravený dotaz ($SQL_delete) stačí odoslať na databázu a skontrolovať odpoveď databázového servera. V prípade úspechu (zmazania) vráti funkcia mysql_query hodnoru true, v prípade neúspechu vráti hodnotu false. |
Verzia zo dňa a času 21:24, 27. december 2010
Ďalšou úlohou, ktoré je treba v prostredí webu pri práci s databázou vyriešiť je mazanie údajov z tabuliek. V tejto časti bude opísaný a názorne ukázaný spôsob ako z prostredia web stránky vymažem záznam v databázovej tabuľke.
V tejto časti budeme mazať záznamy z tabuľky city, z databázy world.
Obsah
Mazanie údajov v aplikácii phpMyAdmin
Najjednoduchší spôsob zmazať z tabuľky údaje je použiť nejaký softvér pre správu databází. Ukážeme si postup v prostredí phpMyAdmin. Po prihlásení sa do systému, vybratí databázy a vybratí tabuľky, z ktorej chceme mazať údaje, stačí kliknúť na ikonu zmazania záznamu:
Systém phpMyAdmin na pozadí odoslal databázovému systému nasledujúci SQL dotaz:
DELETE FROM city WHERE ID=6
Mazanie údajov z tabuľky v php aplikácii
Ako vzor si zoberieme súbor select.php. Štruktúra a opis tohoto súboru je v časti MySQL a web. Princíp funkcionality je nasledovný:
- Údaje tabuľky zobrazíme podobne ako pri príkaze SELECT.
- Pre zobrazenie posledného stĺpca použijeme už známu funkciu zobraz_vysledok_dotazu, avšak pridáme druhý parameter 'delete'
- Funkcia zobraz_vysledok_dotazu zobrazí všetky záznamy v tabuľke a do posledného stĺpca pridá odkaz na zmazanie.
- Všimnite si, že pri prechode myšou nad tieto obrázky sa mení adresa odkazu:
- http://localhost/vyuka/das/fm/delete.php?id=1
- http://localhost/vyuka/das/fm/delete.php?id=2
- http://localhost/vyuka/das/fm/delete.php?id=3
- Rozdiel v adrese je len v poslednej časti 'id=...'. Práve toto číslo odkazuje na záznam, ktorých chceme zmazať.
- Všimnite si, že pri prechode myšou nad tieto obrázky sa mení adresa odkazu:
- Ak v php aplikácii zistíme, že existuje parameter 'id' a že má nejakú hodnotu, ideme tento záznam zmazať:
- Kontrola url adresy je rovnaká ako v prípade vkladania údajov.
- Vytvoríme SQL dotaz: DELETE FROM city WHERE ID=XXX, kde XXX bude hodnota z URL parametra ID.
- SQL dotaz pošleme na vykonanie a skotrolujeme úspešnosť mazania.
Krok 1: Zobrazenie tabuľky so stĺpcom 'zmazať'
Na riadku 1 až 3 je spojenie sa s databázou, nastavenie správnej znakovej sady a výber databázy. Nasleduje vytvorenie SQL dotazu, ktorý z tabuľky vyberie záznamy podľa určitého krtéria (všetky slovenské mestá). Na riadku 5 je odoslanie dotazu na databázu. Na riadku č.7 je použitá už známa funkcia zobraz_vysledok_dotazu. Ak uvedieme 2-hý parameter hodnotu 'delete', vo výslednej tabuľke sa objaví posledný stĺpec, kde bude odkaz na zmazanie riadku.
Upozornenie: Nasledujúca aplikácia ráta s tým, že prvý stĺpec je vždy ID.
1 $link=mysql_connect("student.fmtnuni.sk","student","student") or die("Nespojene");
2 mysql_query("SET NAMES 'utf8'") or die("charset");
3 mysql_select_db("student") or die("Nevybrana DB");
4 $sql="SELECT * FROM city WHERE CountryCode = 'SVK'";
5 $res=mysql_query($sql) or die ("zly dotaz");
6 //zobraznie výsledkov dotazu aj so stĺpcom "delete"
7 zobraz_vysledok_dotazu($res,"delete");
Krok 2: Vytvorenie SQL dotazu
V prípade mazania údajov je tvorba SQL dotazu jednoduchá. Stačí do pripraveného dotazu doplniť jednu hodnotu (ID mazaného záznamu).
Nastáva tu však rovnaký problém, ako pri pridávaní údajov. Údaje chceme mazať len v tom, prípade, ak sme klikli na ikonu zmazania záznamu. Potrebujeme teda skontrolovať URL adresu, či obsahuje časť 'id=hodnota'. Už vieme, že tieto parametre sú uložené v špeciálnej premennej $_GET.
// spojenie sa s databázou
if(sizeof($_GET)>0)
{
// samotné mazanie údajov
}
echo "<h3>Výpis tabuľky</h3>";
// ostatný kód - predchádzajúci výpis
SQL dotaz pre mazanie údajov z tabuľky city je:
DELETE FROM city WHERE ID=
Tu stačí doplniť len hodnotu ID. Použijeme funkciu, ktorú sme použili aj v časti MySQL, web - vkladanie údajov, a to: getUdaje, ktorá nám prečíta všetky URL parametre a vytvorí nám z nich jednoduché pole.
// spojenie sa s databázou
if(sizeof($_GET)>0)
{
$udaje=getUdaje($_GET);
$SQL_delete="DELETE FROM city where ID=".$udaje["id"];
// samotné mazanie údajov
}
echo "<h3>Výpis tabuľky</h3>";
// ostatný kód
Po zavolaní funkcie getUdaje bude obsahovať premenná $udaje jeden údaj. Poznamenajme, že premenná $udaje je asociatívne pole, preto tento jeden údaj bude na indexe 'id' (hodnota indexu je daná URL parametrom). Chceme teda zmazať údaj v tabuľke city s číslom ID $udaje['id'].
Krok 3: Vykonanie SQL dotazu
Pripravený dotaz ($SQL_delete) stačí odoslať na databázu a skontrolovať odpoveď databázového servera. V prípade úspechu (zmazania) vráti funkcia mysql_query hodnoru true, v prípade neúspechu vráti hodnotu false.
<?php
$link=mysql_connect("db.server","user","password") or die("Nespojene");
mysql_query("SET NAMES 'utf8'") or die("charset");
mysql_select_db("databaza") or die("Nevybrana DB");
if(sizeof($_GET)>0)
{
$udaje=getUdaje($_GET);
$SQL_delete="DELETE FROM city where ID=".$udaje["id"];
$vysledok=mysql_query($SQL_delete);
if($vysledok==true)
{
echo "<p class='dotaz_vysledok'>";
echo "Záznam (".$udaje["id"].") sa podarilo zmazať";
echo "</p>";
}
else
{
echo "<p class='dotaz_vysledok2'>";
echo "Záznam nebol zmazaný. MySQL hlási:<br/>";
echo mysql_error();
echo "</p>";
}
echo "<hr/>";
}
//Výpis tabuľky city bude zobrazený vždy.
echo "<h3>Výpis tabuľky</h3>";
$sql="SELECT * FROM city WHERE CountryCode = 'SVK'";
$res=mysql_query($sql) or die ("zly dotaz");
zobraz_vysledok_dotazu($res,"delete");
mysql_close($link);
?>
Listingy pomocných funkcií
V tento časti sú použité funckie getUdaje a zobraz_vysledok_dotazu, ktoré boli definované v predchádzajúcich častiach. Pre doplnenie výpisu stĺpca s ikonou zmazania riadku bola zmenená funkcia zobraz_vysledok_dotazu.
function zobraz_vysledok_dotazu($res,$zmazat=false)
{
// zistenie, kolko je vo vysledku stlpcov
$field = mysql_num_fields( $res );
for ( $i = 0; $i < $field; $i++ ) {
//nazvy stlpcov si ulozime do pola $names
$names[] = mysql_field_name($res, $i);
}
// ak sa jedná o tabuľku s posledným stĺpcom "zmazať"
if($zmazat=="delete")
{
$names[$field-1] = "Zmazať";
$field++;
}
// informativny vypis o pocte riaadkov vysledku
echo "<p>";
echo "Počet riadkov: ".mysql_num_rows($res);
echo "</p>";
//vysoledok bude formatovany v tabulke
echo "<table border='1'>";
//hlavicka tabulky
echo "<tr class='tabulka_hlavicka'>";
for ( $i = 0; $i < $field; $i++ )
{ //pocet hlaviciek sme si zistili v riaku c. 5
echo "<th>".$names[$i]."</th>";
}
echo "</tr>";
//data tabulky
//prikazom mysql_fetch_array vyberieme jeden (dalsi) zaznam vysledku dotazu
//ak uz dalsi zaznam neexistuje funkcia vrati prazdnu hodnotu a cyklus sa zastavi
while($data=mysql_fetch_array($res,MYSQL_NUM))
{
// zaciatok riadka
echo "<tr>";
//v kazdom riadku bude tolko buniek, kolko je stlpcov vo vysledku
for ( $i = 0; $i < $field; $i++ )
{
//v premennej $data su vysledky dotazu pre jeden riadok
// stĺpec zmazať zobrazím len v prípade, ak má argument funckie $zmazat hodnotu "delete"
// a jedná sa o poslednú bunku v riadku
if($i==$field-1 && $zmazat=="delete")
{
echo "<td><a href=\"delete.php?id=".$data[0]."\"><img src=\"img/drop.png\" alt=\"zmazat\" border=\"0\"/></td>";
}
//v opačnom prípade sa jedná o záznam z databázovej tabuľky
else
{
echo "<td>".$data[$i]."</td>";
}
}
// koniec riadka
echo "</tr>";
}
// koniec tabulky
echo "</table>";
}
Súbory na stiahnutie
- http://subory.fmtnuni.sk/ki_files/databazy/dbs3.zip
- index.php - súbor obsahujúci samotnú HTML stránku (bez príkazov jazyka PHP)
- select.php - súbor obsahujúci samotnú HTML stránku pre výpis obsahu tabuľky
- funkcie.php - súbor s pomocnými funkciami pre uľahčenie práce
- insert.php - súbor obsahujúci samotnú HTML stránku pre vloženie údajov. Kód php treba doplniť.
- dbs_styl.css - súbor s definíciou zobrazenia HTML stránky
- img - adresár s obrázkom použitým ako ikona pre zmazanie záznamu
- delete.php - súbor obsahujúci samotnú HTML stránku pre mazanie údajov. Kód php treba doplniť.