MySQL, web - vkladanie údajov
Jednou z úloh, ktoré je treba v prostredí webu pri práci s databázou vyriešiť je vkladanie údajov do tabuliek. V tejto časti bude opísaný a názorne ukázaný spôsob ako z web stránky vložím do tabuľky nové údaje. Celý postup si rozdelíme na niekoľko jednoduchých krokov.
V tejto časti budeme vkladať nové záznamy do tabuľky city, z databázy world.
Obsah
Vkladanie údajov v aplikácii phpMyAdmin
Najjednoduchší spôsob ako vložiť do tabuľky údaje je použiť nejaký softvér pre správu databází. Aj toto dokáže webová aplikácia phpMyAdmin. Po prihlásení sa do systému, vybratí databázy a vybratí tabuľky, do ktorej chceme údaje vkladať môžeme údaje vkladať pomocou jednoduchého formulára:
Po odoslaní formulára, prostredie phpMyAdmin informuje o výsledkoch vloženia, výpíše SQL dotaz, ktorý sa o vloženie postaral a zobrazí tabuľku, do ktorej sme údaje vkladali. SQL dotaz, ktorý vloží do tabľuky city údaje z predchádzajúceho formulára je:
INSERT INTO `student`.`city` (
`ID` ,
`Name` ,
`CountryCode` ,
`District` ,
`Population`
)
VALUES (
NULL , 'Trnava', 'SVK', 'Trnavský', '533123'
);
V informačnom bloku SQL dotazu sú možnosti: upraviť dotaz, zobraziť php kód. Keďže pracujeme v jazyku php, predchádzajúci SQL dotaz bude prepísaný do jazyka PHP nasledovne. Ešte poznamenajme, že sa stále jedná o SQL príkaz, ktorý sme uložili do premennej sql. Týmto zápisomm v jazyku PHP nič nevložíme, dotaz obsiahnutý v premennej sql musíme ešte vykonať pomocou funkcie mysq_query.
$sql = "INSERT INTO `student`.`city` (`ID`, `Name`, `CountryCode`, `District`, `Population`)
VALUES (NULL, \'Trnava\', \'SVK\', \'Trnavský\', \'533123\');";
Vkladanie údajov do tabuľky v php aplikácii
Krok 1: Vytvorenie vstupného formulára
Pre vytvorenie formulára v jazyku HTML existuje značka <form>. Použitie je nasledovné:
<form action="" method="get">
... obsah formulára...
</form>
Značka <form> má 2 atribúty:
- action - adresa skriptu, ktorý bude spracovávať údaje z formulára. Ak neuvedieme nič, údaje bude spracovávať ten istý php skript z ktorého boli údaje odoslané.
- method - metóda posielanie formulárových dát.
- get - všetky formulárové údaje sú pri odoslaní viditeľné v url adrese web stránky
- post - údaje sú posielané v hlavičke HTTP protokolu a štandardne sú neviditeľné.
... obsah formulára...
Obsah formulára budú jednotlivé vstupné textové polia. Pre krajšie zobrazenie, použijeme tabuľku na zarovnanie políčok.
<table>
<tr>
<td>Názov mesta</td>
<td>
<input name="Name" type="text">
</td>
</tr>
<tr>
<td>Kód krajiny</td>
<td>
<input name="CountryCode" type="text">
</td>
</tr>
<tr>
<td>Kraj</td>
<td>
<input name="District" type="text">
</td>
</tr>
<tr>
<td>Počet obyvateľov</td>
<td>
<input name="Population" type="text">
</td>
</tr>
</table>
<input type="submit" value="Uložiť">
Výsledkom bude nasledujúci formulár:
Pre jednoduchosť vytváranie podobných formulárov je v časti 'Na stiahnutie' pripravená pomocná funkcia formular. Táto funkcia sa postará o kompletné vykreslenie formulára. Stačí jed predať informáciu o názvoch vstupných boxov (Name, CountryCode, ...) a popiskov, ktoré budú zobrazené v prvom stĺpci tabuľky. Predchádzajúcu tabuľku vytvoríme pomocou funkcie formular nasledovne:
<?php
$polia=array(
"Name"=>"Názov mesta",
"CountryCode"=>"Kód krajiny",
"District"=>"Kraj",
"Population"=>"Počet obyvateľov"
);
formular($polia);
?>
Zmenou hodnôt v premennej polia, môžeme vytvoriť ľubovoľný formulár.
Krok 2: Vytvorenie SQL dotazu
Údaje môžeme do tabuľky vkladať až po odoslaní formulára. Inak povedané, až keď odošleme formulár, môžeme údaje vkladať. Pretože o vkladanie údajov sa bude starať ten istý php súbor (insert.php) v ktorom je aj formulár na pridávanie údajov, treba rozlíšiť či bol formulár odoslaný (v tom prípade sa pokúsime údaje vložiť) alebo ešte nebol odoslaný a vkladanie údajov ešte nebudeme riešiť.
To, či je formulár odoslaný, alebo nie veľmi jednoducho zistíme podľa url adresy:
- http://localhost/DBS/insert.php
- http://localhost/DBS/insert.php?Name=Myjava&CountryCode=SVK...
V prvom prípade formulár nebol ešte odoslaný, v druhom prípade už áno. V url adrese sú rozoznateľné jednotlivé časti fomulára: Name, CountryCode, District a Population. Každej časti je pridelená určité hodnota. V našom prípade je to Name=Myjava, atď...
Po odoslaní formulára sú tieto údaje uložené v špeciálnej premennej $_GET. Premenná $_GET je vlastne pole, kde ako index poľa je použitý názov prvku formulára a hodnota na tomto indexe je hodnota, ktorú sa do formulára vpísali. To, či bol formulár odoslaný vieme teda jednoducho zistiť: ak je veľkosť premennej $_GET väčšia ako 1, tak bol formulár odoslaný:
<?php
if(sizeof($_GET)>0)
{
//vloženie formulárových údajov do databázy
}
?>
Ak teda zistíme, že formulár bol odoslaný, ak prvé sa spojíme s databázovým serverom a vyberieme vhodnú databázu.
<?php
if(sizeof($_GET)>0)
{
$link=mysql_connect("db.server","login","heslo") or die("Nespojene");
mysql_query("SET NAMES 'utf8'") or die("charset");
mysql_select_db("student") or die("Nevybrana DB");
//vloženie formulárových údajov do databázy
}
?>
Keďže s premmou $_GET sa pracuje trocha komplikovanejšie, použijeme pripravenú funkciu getUdaje, ktorá nám bezpečne prečíta údaje z premennej $_GET. V nasledujúcom príklade je funkcia getUdaje použitá. Funkcia spracuje hodnoty v premennej $_GET a uloží ich do novej premennej udaje. Formát premennej údaje je nasledujúci:
Array (
[Name] => Myjava
[CountryCode] => SVK
[District] => Trenčiansky
[Population] => 32142
)
Teda je to pole, ktorého indexy sú názvy atribútov v tabuľke city. Je tu priama súvislosť s poľom $polia z časti #Krok 1: Vytvorenie vstupného formulára.
<?php
if(sizeof($_GET)>0)
{
$link=mysql_connect("db.server","login","heslo") or die("Nespojene");
mysql_query("SET NAMES 'utf8'") or die("charset");
mysql_select_db("student") or die("Nevybrana DB");
//pomocna funkcia pre precitanie udajov odoslanych cez formular
$udaje=getUdaje($_GET);
//vloženie formulárových údajov do databázy
}
?>
V premennej udaje sú teda údaje, ktoré chceme vložiť do tabuľky. Pre vloženie údajov existuje SQL príkaz INSERT.
Prvá časť SQL príkazy v jazyku php bude:
$sql='INSERT INTO city (Name, CountryCode, District, Population) VALUES ';
V druhej časti budú samotné údaje, ktoré sme napísali do formulára. Tieto údaje sú uložené v premennej udaje. Musíme pamätať na to, že ak vkladáme textové údaje, tak ich musíme vložiť do úvodzoviek. Tu sa nám ale práca značne skomplikuje, pretože úvodzovky sú v jazyku php špeciálny znak. Musíme byť teda patrný pri vytváraní druhej časti dotazu.
Informácie o meste, ktoré ideme vložiť sú v $udaje['Name'], kód krajiny je $udaje['CountryCode'], okres je $udaje['District'] a populácia $udaje['Population']. Všetky údaje okrem populácie musia byť uzatvorené v úvodzovkách. Kompletný SQL príkaz v jazyky php bude nasledujúci:
$sql='INSERT INTO city (Name, CountryCode, District, Population) VALUES ';
$sql.='( "'.$udaje["Name"].'",
"'.$udaje["CountryCode"].'",
"'.$udaje["District"].'",
'.$udaje["Population"].'
)';
Pre kontrolu si môžeme SQL príkaz vypísať:
echo "<p class='dotaz'>";
echo $sql;
echo "</p>";
Výsledok bude:
INSERT INTO city (Name, CountryCode, District, Population) VALUES ( 'Myjava', 'SVK', 'Trenčiansky', 32142)
Krok 3: Vykonanie SQL dotazu
SQL dotaz máme pripravený v premennej $sql. Pomocou funkcie mysql_query SQL príkaz pošleme na databázový server, kde sa vykoná. Ak pomocou funkcie mysql_query posielame SQL príkaz INSERT, UPDATE, DELETE alebo DROP funkcia vráti hodnotu false alebo true. Podľa tejto hodnoty môžeme vypísať informáciu, či sa vloženie údajov podarilo alebo nie:
$vklad=mysql_query($sql);
if($vklad==true)
{
echo "Záznam sa podarilo vložiť";
}
else
{
echo "Záznam nebol vložený. MySQL hlási:<br/>";
echo mysql_error();
}
mysql_close($link);
V prípade neúspechu ešte vypíšeme chybu, ako ju vypíše databáza mySQL - pomocou funkcie mysql_error(). Na koniec ešte ukončíme spojenie s databázovým serverom - mysql_close($link).
Listingy pomocných funkcií
Uvádzame výpisy zdrojových kódov pomocných funkcií formular a getUdaje.
<?php
function formular($polia)
{
$atributy=array_keys($polia);
$hodnoty=array_values($polia);
$n=sizeof($hodnoty);
echo "<form action=\"\" method=\"get\">";
echo "<table>";
for($i=0;$i<$n;$i++)
{
echo "<tr>";
echo "<td class=\"nazvy\">$hodnoty[$i]</td>";
echo '<td><input type="text" name="'.$atributy[$i].'" /></td>';
echo "</tr>";
}
echo "</table>";
echo '<input type="submit" value="Uložiť" />';
echo "<form>";
}
function getUdaje($get)
{
$atributy=array_keys($get);
$n=sizeof($atributy);
for($i=0;$i<$n;$i++)
{
if(isset($get[$atributy[$i]]))
$udaje[$atributy[$i]]=$get[$atributy[$i]];
else
$udaje[$atributy[$i]]="";
}
return $udaje;
}
?>
Súbory na stiahnutie
http://subory.fmtnuni.sk/ki_files/databazy/dbs2.zip
- index.php - súbor obsahujúci základnú (domovskú) stránku
- insert.php - súbor obsahujúci samotnú HTML stránku pre vloženie údajov. Kód php treba doplniť.
- funkcie.php - súbor s pomocnými funkciami pre uľahčenie práce
- dbs_styl.css - súbor s definíciou zobrazenia HTML stránky