MySQL, web - vkladanie údajov: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
d
Riadok 101: Riadok 101:
 
To, či je formulár odoslaný, alebo nie veľmi jednoducho zistíme podľa url adresy:
 
To, či je formulár odoslaný, alebo nie veľmi jednoducho zistíme podľa url adresy:
 
*<nowiki>http://localhost/DBS/insert.php</nowiki>
 
*<nowiki>http://localhost/DBS/insert.php</nowiki>
*<nowiki>http://localhost/DBS/insert.php?Name=Myjava&CountryCode=SVK&District=Tren%C4%8Diansky&Population=32142</nowiki>
+
*<nowiki>http://localhost/DBS/insert.php?Name=Myjava&CountryCode=SVK& District=Tren%C4%8Diansky&Population=32142</nowiki>
  
 
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ď...
 
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ď...

Verzia zo dňa a času 19:56, 27. december 2010

Imbox draft.png
Toto je projekt, na ktorom sa ešte stále pracuje!!

Aj keď sú v tomto dokumente použiteľné informácie, ešte nie je dokončený. Svoje návrhy môžete vyjadriť v diskusii o tejto stránke.

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.

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:

PhpMyAdmin insert.png

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:

HTML 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& District=Tren%C4%8Diansky&Population=32142

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