PHP - 28. díl – vložení nového řádku pomocí PHP

28. díl seriálu o PHP bude věnován tomu, jak vkládat nové řádky do databáze pomocí PHP

Databázové funkce v PHP jsou přímo ideální pro použití formulářů. Zejména zadávání nových hodnot, které se ukládají do databáze, po využití formulářů přímo volají. Jeden skript slouží k zadání nových hodnot a druhý skript slouží k uložení zadaných dat. Pro další text budu předpokládat, že máme databázi pokus a databázovou tabulku Osoby, kterou jsme vytvořili ve 26. díle tohoto seriálu.

Formulář k zadání nové osoby

Nejdříve vytvoříme formulář, který bude sloužit k zadání nové osoby. Tento formulář pak později napojíme na skript, který provede uložení nové osoby do databáze.

<html>
<head>
<title>Příklad 1. z 28. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<form action="uloz_radek.php" method="post">
<table>
<tr>
<td>Jméno:</td>
<td><input type="text" name="Jmeno"></td>
</tr>
<tr>
<td>Rodné číslo:</td>
<td><input type="text" name="RodneCislo"></td>
</tr>
<tr>
<td>Adresa:</td>
<td><input type="text" name="Adresa"></td>
</tr>
<tr>
<tr>
<td>Telefon:</td>
<td><input type="text" name="Telefon"></td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="Přidání osoby"></th>
</tr>
<tr>
</form>
</body>
</html>

Tento skript je v podstatě čistý HTML kód, který obsahuje pole pro zadání nové osoby a tlačítko pro odeslání údajů skriptu s názvem uloz_radek.php. PHP skript s názvem uloz_radek.php napíšeme později.

PHP skript k uložení řádku

Vlastní PHP skript, který přijímá data od předchozího formuláře a uloží řádek, je zde (uložte jej do čistého txt souboru s názvem uloz_radek.php):

<html>
<head>
<title>Příklad 2. z 28. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$id_spojeni = mysql_connect(`localhost`,`root`,``);
if (!$id_spojeni)
  die(`Spojení s MySQL databází se nezdařilo.`);
 
$vysledek_vybrani = mysql_select_db(`pokus`,$id_spojeni);
if (!$vysledek_vybrani)
  die(`Databázi pokus se nám nepodařilo vybrat.`);
 
$Jmeno = $_POST[`Jmeno`];
$RodneCislo = $_POST[`RodneCislo`];
$Adresa = $_POST[`Adresa`];
$Telefon = $_POST[`Telefon`];
 
$sql = "INSERT INTO Osoby VALUES(`$Jmeno`,`$RodneCislo`,`$Adresa`,`$Telefon`)";
$vysledek = mysql_query($sql,$id_spojeni);
if (!$vysledek)
  die(`Nepodařilo se vložit nový řádek.`);
 
$sql = "SELECT * FROM Osoby";
$id_vysledku = mysql_query($sql,$id_spojeni);
if (!$id_vysledku)
  die(`Nepodařilo se nám načíst řádky z databáze.`);
?>
<table border="1">
<tr>
<th>Jméno</th>
<th>Rodné číslo</th>
<th>Adresa</th>
<th>Telefon</th>
</tr>
<?php
while($radek = mysql_fetch_row($id_vysledku))
{
  echo `<tr>`;
  for ($i=0; $i<4; ++$i)
    echo `<td>`, $radek[$i], `</td>`;
  echo `</tr>`;
}
?>
</table>
<?php
mysql_close($id_spojeni);
?>
</body>
</html>

Samotný skript na uložení řádku už je docela složitý, ale je to tím, že kromě ukládání řádků ještě vypisuje, co už je všechno uloženo. Pokud budete přidávání řádku zkoušet, buďte si vědomi toho, že databázová tabulka "Osoby" požaduje jedinečné rodné číslo. Budete-li chtít uložit osobu s rodným číslem, které už je v databázi, vložení nového řádku se nepodaří.

Jak vlastně skript na přidání nového řádku funguje? V podstatě docela jednoduše. Na začátku jsou nejdříve povinné tanečky, tedy připojení se k databázovému serveru MySQL a poté vybrání databáze s názvem "Pokus". Potom přečteme všechny údaje předané z formuláře pomocí pole $_POST. V dalším kroku vytvoříme z těchto údajů SQL příkaz INSERT. A pomocí mysql_query jej pošleme do databáze. Protože SQL příkaz INSERT nevrací žádná data, použijeme návratovou hodnotu funkce mysql_query pouze k otestování, zda příkaz proběhl správně. Následuje výpis všech řádků z tabulky Osoby.

Ačkoli uvnitř skriptů používáme SQL příkazy, navenek jsme vytvořili poměrně příjemnou aplikaci k zadávání nových řádků. Takto pracuje naprostá většina databázových aplikací. Ačkoli uvnitř se pracuje s SQL příkazy, které mohou být pro uživatele složité, navenek jsou skryty a uživatel se s nimi nesetkává.

Diskuze (12) Další článek: Telecom ohlásil další kolo boje proti dialerům

Témata článku: , , , , , , , , , , , , ,