MySQL, web - mazanie záznamov: Rozdiel medzi revíziami
(Vytvorená stránka „{{Skripta_dbs}} {{Draft}} Ď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…“) |
|||
(4 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.) | |||
Riadok 1: | Riadok 1: | ||
− | {{Skripta_dbs | + | {{Skripta_dbs}} |
− | Ď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 | + | Ď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žeme záznam v databázovej tabuľke. |
− | V tejto časti budeme mazať záznamy z tabuľky city, | + | V tejto časti budeme mazať záznamy z tabuľky ''city'', databázy ''world''. |
==Mazanie údajov v aplikácii phpMyAdmin== | ==Mazanie údajov v aplikácii phpMyAdmin== | ||
− | Najjednoduchší spôsob zmazať z tabuľky údaje je použiť nejaký softvér pre správu | + | Najjednoduchší spôsob ako 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, voľbe databázy a tabuľky, z ktorej chceme mazať údaje, stačí kliknúť na ikonu zmazania záznamu: |
− | [[Súbor:phpMyAdmin delete.png|frame|center]] | + | [[Súbor:phpMyAdmin delete.png|frame|center|Mazanie údajov z tabuľky city v prostredí phpMyAdmin]] |
Systém phpMyAdmin na pozadí odoslal databázovému systému nasledujúci SQL dotaz: | Systém phpMyAdmin na pozadí odoslal databázovému systému nasledujúci SQL dotaz: | ||
Riadok 15: | Riadok 15: | ||
==Mazanie údajov z tabuľky v php aplikácii== | ==Mazanie údajov z tabuľky v php aplikácii== | ||
− | Ako vzor si zoberieme súbor select.php. Štruktúra a opis | + | Ako vzor si zoberieme súbor ''select.php''. Štruktúra a opis tohto 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 | + | **Pre zobrazenie údajov z tabuľky použijeme už známe funkciu ''zobraz_vysledok_dotazu''. |
+ | **Po pridaní druhého parametra 'delete', sa zobrazí posledný stĺpec s možnosťou zmazania záznamu, | ||
*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 24: | ||
***<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, budeme 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. | ||
− | **SQL dotaz pošleme na vykonanie a | + | **SQL dotaz pošleme na vykonanie a skontrolujeme úspešnosť mazania. |
− | ===Krok 1: Zobrazenie tabuľky so stĺpcom | + | [[Súbor:web php Mazanie.png|center|frame|Výpis obsahu tabuľky ''city'' s možnosťou mazania záznamov]] |
− | 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 | + | |
− | Na riadku č.7 je použitá už známa funkcia ''zobraz_vysledok_dotazu''. Ak uvedieme | + | ===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 ''city'' vyberie záznamy podľa určitého krité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 druhý 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 46: | Riadok 49: | ||
===Krok 2: Vytvorenie SQL dotazu=== | ===Krok 2: Vytvorenie SQL dotazu=== | ||
− | V prípade mazania údajov je tvorba SQL dotazu jednoduchá. Stačí do pripraveného dotazu doplniť jednu hodnotu | + | V prípade mazania údajov je tvorba SQL dotazu jednoduchá. Stačí do pripraveného dotazu doplniť jednu hodnotu a tou je 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 60: | Riadok 63: | ||
SQL dotaz pre mazanie údajov z tabuľky city je: | SQL dotaz pre mazanie údajov z tabuľky city je: | ||
<source lang="php"> | <source lang="php"> | ||
− | DELETE FROM city WHERE ID= | + | DELETE FROM city WHERE ID=... |
</source> | </source> | ||
− | 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. | + | 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. |
<source lang="php"> | <source lang="php"> | ||
// spojenie sa s databázou | // spojenie sa s databázou | ||
Riadok 74: | Riadok 77: | ||
// 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 | + | Chceme teda zmazať údaj v tabuľke city s číslom ID ''$udaje['id']''. |
+ | |||
===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''. |
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
Riadok 113: | Riadok 117: | ||
</source> | </source> | ||
==Listingy pomocných funkcií== | ==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. | + | 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''. |
<source lang="php"> | <source lang="php"> | ||
function zobraz_vysledok_dotazu($res,$zmazat=false) | function zobraz_vysledok_dotazu($res,$zmazat=false) | ||
Riadok 174: | Riadok 178: | ||
</source> | </source> | ||
==Súbory na stiahnutie== | ==Súbory na stiahnutie== | ||
− | #http://subory.fmtnuni.sk/ki_files/databazy/dbs3.zip | + | #http://subory.fmtnuni.sk/ki_files/databazy/dbs3.zip, |
− | #* index.php - súbor obsahujúci samotnú HTML stránku (bez príkazov jazyka PHP) | + | #* 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 | + | #* 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 | + | #* 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 | + | #* 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 | + | #* 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 | + | #* 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 | + | #* delete.php - súbor obsahujúci samotnú HTML stránku pre mazanie údajov (kód php treba doplniť). |
Aktuálna revízia z 10:36, 18. január 2011
Ď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žeme záznam v databázovej tabuľke.
V tejto časti budeme mazať záznamy z tabuľky city, databázy world.
Obsah
Mazanie údajov v aplikácii phpMyAdmin
Najjednoduchší spôsob ako 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, voľbe databázy a 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 tohto 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 údajov z tabuľky použijeme už známe funkciu zobraz_vysledok_dotazu.
- Po pridaní druhého parametra 'delete', sa zobrazí posledný stĺpec s možnosťou zmazania záznamu,
- 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, budeme 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 skontrolujeme ú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 city vyberie záznamy podľa určitého krité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 druhý 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 a tou je 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ť).