Pokud jste v minulé lekci pochopili jak v PHP scriptu použít příkaz SQL pro databázi, pak vás vlastně nic nového nečeká. Budeme totiž pomocí PHP scriptu zapisovat do databáze, ale příslušný příkaz SQL jsme poznali už ve 20. lekci, takže byste úkol mohli zvládnout i bez následující ukázky (kdo si troufá, může zkusit). Přece jen jsme ale na samém začátku práce s databázemi, proto většina z vás konkrétní ukázku potřebovat asi bude.

Zápis z PHP do databáze

Pro úvodní ukázku zápisu PHP do databáze jsem vybral anketu, abyste řešení mohli porovnat s řešením pomocí souboru ve 12. lekci (to to utíká :-) ). Anketu vylepšíme o kontrolu IP adresy, ze které bylo hlasováno, aby se z jedné adresy nedalo hlasovat víckrát (na druhou stranu například z naší školní sítě by se v takové anketě dalo hlasovat jen jednou), doplníme také statistiku jednotlivých známek (což někteří z vás udělali už u starší ankety).
Při svých pokusech nezapomeňte na to, že při obnovení stránky (F5) jsou odesílány posledně použité hodnoty, takže například jakoby byl formulář už odeslaný (byl-li odeslaný před obnovením), chcete-li formulář znovu odesílat, musíte stránku také znovu otevřít (nestačí jen obnovit).
Dávejte pozor také na to, že dotazy pro databázi jsou zapsané v uvozovkách, pokud má být součástí dotazu také řetězec, ten by mohl být zapsaný také v uvozovkách jak jsme zvyklí, to by ale nebylo jasné, kde které uvozovky končí nebo začínají, proto jsou řetězce uvnitř dotazu SQL uzavřené do apostrofů (což je druhá možnost ohraničení řetězců). Týká se to i proměnných, jejichž hodnotami jsou řetězce (v ukázce proměnná '$adr').
K dalšímu vysvětlení scriptu by už měly stačit vložené komentáře, protože opravdu nic nového neobsahuje (že obsahuje dvě chyby, to už je také známá věc:-) ):

<?php
extract($_POST);
if (isset($znamka))
{
$link=mysql_connect("localhost","root","") or die ("server nepřipojen");
$db=mysql_select_db("petr",$link) or die("databáze nenalezena");
mysql_query("set names 'cp1250'");
$adr=$_SERVER["REMOTE_ADDR"]; //načtení IP adresy počítače
$dotaz="select * from anketa where IP='$adr'"; //výběr záznamů, jejichž IP je stejná jako aktuální
$result=mysql_query($dotaz,$link) or die ("dotaz neprosel");
$num=mysql_num_rows($result); //kolikrát je aktuální IP v databázi
if ($num=0) //aktuální IP v databázi není
{
$query="insert into anketa (IP, body) values ('$adr', $znamka)"; //zapíšeme adresu (řetězec) a známku
mysql_query($query,$link) or die ("návštěva nevložena"); //zapíšeme ji do databáze
} else echo"z této adresy již bylo hlasováno <br />";

$suma=0; //proměnná pro součet všech hodnot známek
for ($i=1;$i<6;$i++) { //$i se mění od 1 do 5
$dotaz="select * from anketa where body=$i"; //vybereme záznamy podle známky v $i
$result=mysql_query($dotaz,$link) or die ("dotaz neprosel");
$num=mysql_num_rows($result); //počet známek
$suma+=$i*$num; //přidáme známka*její počet
echo"počet ",$i,": ",$num,"<br />";
}

$dotaz="select * from anketa"; //tento dotaz už by nebyl nutný, šlo to jinak?
$result=mysql_query($dotaz,$link) or die ("dotaz neprosel");
$num=mysql_num_rows($result);
echo"celkový počet hlasů: ".$num."<br />";
echo"průměr: ".$suma/$num.<br />";

mysql_free_result($result);
mysql_close($link);
unset($znamka);
}
?>


Úkoly:

Úkol (3 body)

Ve své databázi vytvořte novou tabulku pro anketu s vhodnými položkami. Podle textu lekce (ve kterém jsou dvě chyby) vytvořte anketu (třeba na nové téma) a přidejte na ni do indexu nový odkaz (zachovejte i starší anketu). V této anketě by mělo být možno hlasovat z jedné IP adresy jen jednou a po každém hlasování by se měla vypsat statistika počtu jednotlivých známek a jejich celkový průměr.

Název školy:Základní škola, Hradec Králové, M. Horákové 258
Název projektu:EU peníze školám
Číslo projektu:CZ.1.07/1.4.00/21.2575
Téma:Programování v PHP
Název:VY_32_INOVACE_21_10A_PHP21
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.