Archiv rubriky „PHP“
SimpleXML - jednoduše na XML v PHP 2.díl
Jsem tu opět s povídáním o používání SimpleXML v PHP. V minulém díle jste se dozvěděli základy používání a hlavně také jakým způsobem číst jednoduše dokument XML. Dnes bychom se měli zabývat čtením smíšeného obsahu.
11. 12. 2009 | gisat_cz | 0
SimpleXML - jednoduše na XML v PHP 1.díl
Hlavním tématem tohoto článku je pokus o jednoduchý exkurz do práce s XML. Určitě mnohokrát se Vám stalo, že jste při svém programování v PHP narazili na potřebu komunikovat se souborem v tomto formátu. Právě jednou možnou cestou je použití tzv. SimpleXML.
8. 12. 2009 | gisat_cz | 0
Cachování dat do mezipaměti v PHP
Pokud se věnujete programování webových aplikaci formou jazyka PHP určitě jste vycítili potřebu uchovat tu a tam nějakou proměnnou či funkci na později a v klidu ji použít. Právě touto problematikou se bude zaobírat tento článek. Pokusím se Vám nastínit základní techniku cachování do mezipaměti v PHP.
7. 8. 2009 | gisat_cz | 0
Jak na generátor náhodných znaků v PHP
Generátor náhodných znaků je mnohdy velmi užitečným prvkem internetového programátora. Jeho princip spočívá v náhodném vytváření skupiny znaků: znaky, čísla i řetězce o předem stanoveném počtu. K čemu takový generátor náhodných znaků vlastně je?
Jeho využití je velmi pestré. Můžeme ním například generovat uživatelská hesla nebo vytvářet podklady pro tzv. captchu. Tvorba základního generátoru znaků je velmi jednoduchá.
Popíšeme si tedy podrobný postup kódu generátoru znaků:
Vytvoříme funkci, která bude generovat náhodné znaky, jako parametr dodáme délku generovaných znaků:
function generuj_znaky($delka_hesla) {
Vytvoříme si proměnou do které uložíme všechny znaky, ze kterých chceme aby generátor generoval: $skupina_znaku = ‘abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
Stanovíme si proměnou, do které vložíme vygenerované znaky
$vystup = ”;
Stanovíme si proměnou do které uložíme počet možných znaků uložených v proměné $skupina_znaku:
$pocet_znaku = strlen($skupina_znaku)-1;
For cyklem projdeme všechny znaky :
for ($i=0;$i<$delka_hesla;$i++) {
Do proměné $vystup uložíme jednotlivé vygenerované znaky:
$vystup .= $skupina_znaku[mt_rand(0,$pocet_znaku)];}
Proměnou $vystup, do které jsme uložili dané znaky nakonec ve funkci navrátíme příkazem return:
return $vystup;}
Tímto je skript pro generování náhodných znaků hotový, výslednou funkci můžete pak volat takto:
generuj_znaky(10);
bude se generovat deset náhodných znaků.
25. 7. 2009 | gisat_cz | 5
Vkládání javascriptu do PHP a naopak
Určitě jste se při svém programování setkali s problémem vkládání javascriptového kódu do PHP a naopak. Já jsem se s tím setkal mnohokrát. Naprogramoval jsem si nějakou funkci v javascriptu a potřeboval jsem její vypsání. Tento problém není až tak těžké vyřešit. My si to ukážeme jednoduše takto:
Máme javascriptový kód, který chceme vložit do PHP:
<script>
function zkouska(){
var promena=”Toto je pokusný text”;
document.write (promena + ” vložený do PHP”);
}
</script>
Do PHP můžeme javascriptový kód vložit jednoduše tín, že v PHP vyůíšeme javascriptový kód vypsat:
<?php
echo “<script>zkouska(); </script>”;
?>
Trošku složitější bude vložení PHP kódu nebo funkce do javascriptu. Jisté řešení nám nabízí například staronová technika AJAXu. Díky ní můžeme jakoukoli reakci vyvolanou PHP kódem vkládat do Javascriptu a také v něm reakci pracovat a zpracovávat. Příklad by mohl vypadat takto:
Dejme tomu, že budete mít nějakou stránku a na té formulářový prvek text, prvek div s názvem divek ve kterém se zobrazí phpčkový kód, a tlačítko odeslat, když kliknete na tlačítko odeslat tak AJAX pošle asynchronní dotaz PHP souboru. Důelsdný popis AJAXového kódu zde uvádět nebudu. Kdo by chtěl znát detaily o AJAXu tak si může prohlédnou detailní popis v některém z mých článků o AJAXu:
PHP soubor soubor.php:
<?php
if( $_REQUEST["jmeno"]){
echo “Vaše jméno je “.$_REQUEST["jmeno"];
?>
Javascriptový soubor pomocí techniky AJAXu:
function policko(){
var XMLHttpRequestObjekt = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObjekt = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObjekt = new ActiveXObject(”Microsoft.XMLHTTP”);
}
//————————————————————
var input1=document.getElementById(”textik”);
var cilovyDiv = document.getElementById(”divek”);
if(XMLHttpRequestObjekt) {
XMLHttpRequestObjekt.open(”POST”,”soubor.php”, true);
XMLHttpRequestObjekt.setRequestHeader(’Content-Type’,
‘application/x-www-form-urlencoded’);
XMLHttpRequestObjekt.onreadystatechange = function()
{
if (XMLHttpRequestObjekt.readyState == 4 &&
XMLHttpRequestObjekt.status == 200) {
var obsah=XMLHttpRequestObjekt.responseText;
cilovyDiv.innerHTML = obsah;
}}
XMLHttpRequestObjekt.send(”jmeno=”+input1.value);}}
20. 7. 2009 | gisat_cz | 0
Vytváříme anketu
S anketou se na internetu setkáte prakticky na každém kroku. Umožňuje dozvědět se mínění čtenářů na různá palčivá témata.
Jak takovou anketu vytvoříme? Existuje opět mnoho způsobů a technik, asi tou nejjednodušší je využít služeb některých opensource projektů, jedním z nich je například projekt Blueboard. Velkou nevýhodou využívání takových onlinových produktů je zejména to, že nejste stoprocentním pánem nad ovládáním takového ankety.
My si zde ukážeme jakým způsobem bychom si mohli takovou anketu vytvořit sami, a to od samých základů. Co je k tomu potřeba: no zejména základní znalosti CSS, PHP, SQL, AJAXu a HTML kódování. Vypadá to složitější než to ve skutečnosti je.
Ještě bych dodal, že pro objemnost kódu jsem neošetřil například databázové chyby při volání. Snad Vám popis tvorby ankety bude srozumitelný, opravdu na ní není nic těžkého. Dejme se tedy do díla:
VYTVOŘÍME OBRÁZKOVÝ PODKLAD NAŠEHO ANKETNÍHO GRAFU:
V některém z grafických editorů, postačí klidně freewarový GIMP či windowsovský program Malování, si vytvoříme jednobarevný proužek o šířce 1 pixel a výšce 10 pixelů: ![]()
VYTVOŘÍME DATABÁZI:
Vytvoříme si databázi, například v phpmyadmin. Databáze se bude jmenovat anketa a tabulka také anketa, vytvoříme tam jeden řádek kteřý se bude jmenovat velikost a bude formátu varchar o velikosti 220
VYTVOŘÍME SI HLAVNÍ STRÁNKU, NA KTERÉ BUDE ANKETA:
naskriptování této stránky skutečně není nic těžkého. Bude se skládat ze samého HTML kódu:
Do tagu head napíšeme napojení na javascriptový soubor a php soubor a případný stylový předpis:
<head>
<script src=”anketa.js”</script>
<?php include_once “anketka.php” ?>
<style type=”text/css”>
<!–
#dotaz1 {
color: #990000;
}
#graf1 {
position: absolute;
top: 82px;
left: 170px;
}
–>
</style>
</head>
Do tagu body napíšeme tělo naší ankety, bude velmi jednoduché:
<h1>ANKETA</h1>
<span id=”dotaz1″ name=”dotaz1″ onclick=”nacist_data(); return false;”>Používáte službu Twitter?</span>
<div id=”obr”><img src=”prouzek.png” id=”graf1″ name=”graf1″ width=”<?php aktual()?>” height=”10″/></div>
Jak sami vidíte kód stránky je jednoduchý, skládá se z nadpisu, věty na kterou můžeme klikat a tím pádem hlasovat a malého obrázku představující primitivní verzi grafu.
VYTVOŘÍME ONEN JAVASCRIPTOVÝ SOUBOR anketa.js:
Tento soubor tvoří pomyslné jádro naší ankety. Myšlenka je velmi jednoduchá, jestliže uživatel zařne hlasovat, tak tak se metodou post pomocí AJAXu pošle dokumentu php, respektive souboru anketka.php proměná s názvem velikost a hodnotou deset.
Tato hodnota se bude následně v souboru anketka.php přičítat ke stavu v databázi. Blíže vysvětlovat strukturu AJAXového kódu zde nebudu, protože popis vytváření AJAXu jsem uvedl v některém z minulých článků.
Podívejme se tedy na AJAXový kód:
function nacist_data(){var XMLHttpRequestObjekt = false;if (window.XMLHttpRequest) {
XMLHttpRequestObjekt = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObjekt = new ActiveXObject(”Microsoft.XMLHTTP”);
}//————————————————————var cilovyDiv = document.getElementById(”obr”);
if(XMLHttpRequestObjekt) {
XMLHttpRequestObjekt.open(”POST”,”anketka.php”, true);
XMLHttpRequestObjekt.setRequestHeader(’Content-Type’,
‘application/x-www-form-urlencoded’);XMLHttpRequestObjekt.onreadystatechange = function()
{
if (XMLHttpRequestObjekt.readyState == 4 &&
XMLHttpRequestObjekt.status == 200) {
var obsah=XMLHttpRequestObjekt.responseText;cilovyDiv.innerHTML = obsah;
}
else{cilovyDiv.innerHTML=”NEKONALO SE”;}}XMLHttpRequestObjekt.send(”velikost=10″);
}}
VYTVOŘÍME SOUBOR anketka.php:
Kód je vysvětlen uvnitř v komenářích(šedivý text):
<?php
//napojíme se na soubor s databázovou konfigurací
include_once ‘db.php’;
//jestliže došlo k předání proměné velikost
if($_REQUEST["velikost"]){
//vytvoříme objekt k přístupu do databáze
$napoj_db=new databaze();
//tento krok je možná zbytečný
$hod=$_REQUEST["velikost"];
//jestliže došlo k napojení do databáze
if($napoj_db->napojeni()==1){
//vytvoří se nová proměná a předanou hodnotu zvýší o 10
$nova_vel=$hod+10;
//údaje zapíše do tabulky, tedy přepíše předchozí údaje
$dotaz=mysql_query(”UPDATE anketa SET velikost=’$nova_vel’”);
}
//jestliže byly údaje přepsány
if($dotaz){
$dotaz2=mysql_query(”SELECT * FROM anketa “);
$stav=mysql_num_rows($dotaz2);
//i když máme pouze jeden výskyt tak provedeme iteraci nalezených prvků
for($i=0;$i<$stav;$i++){
//výsledek uložíme do proměnné $vysledek
$vysledek=mysql_fetch_array($dotaz2);
//vypíšeme obrázek s danou šířkou uvedenou v databázi
echo “<img src=’prouzek.png’id=’graf1′name=’graf1′width=”.$vysledek[0].” height=’10′/>”;
}
}}
Tvorba souboru db.php:
Dále vytvoříme funkci pro zadání úvodní šířky do doby než začne uživatel hlasovat:
function aktual() {
//vytvoříme objekt na napojení do databáze
$napoj_db=new databaze();
//jestliže došlo k napojení do databáze
if($napoj_db->napojeni()==1){
//provedeme dotaz, vyhledáme všecjny výskyty v tabulce
$dotaz_poc=mysql_query(”SELECT * FROM anketa “);
//vytvoříme pomocnou funkci, určující počet nalezených prvků
$pocet=mysql_num_row($dotaz_poc);
//jestliže tabulka neobsahuje žádné nálezy
if($pocet<1){
//tak do tabulky vložíme úvodní hodnotu o velikosti 1
$vlozit=mysql_query(”INSERT INTO anketa (’velikost’)
VALUES (1)”);}
//jestliže tabulka obsahuje data
elseif ($pocet>0) {
//projdeme všechna data
for($i=0;$i<$stav;$i++){
//vysledek uložíme do proměnné
$vysledek=mysql_fetch_array($dotaz_poc);
//a navrátíme její hodnotu
return $vysledek[0];};
}}}?>
Dále mi ještě zbývá dovysvětlit soubor db.php:
Uživatel databáze nemá heslo , takže také do přihlášení není uvedeno.
<?php
//Vytvoříme třídu
class databaze{
private $jmeno; //jméno uživatele
private $pocitac; //druh počítače, tedy adresa počítače
private $db; //název databáze
public $napoj; //proměnná pomocí níž se napojíme na databázový stroj
//konstruktor třídy, ve kterém uložíme hodnoty do proměnných
public function __construct() {
$this->jmeno=”blog”;
$this->pocitac=”localhost”;
$this->db=”anketa”;}
//————————————————-
//veřejná funkce, pomocí níž se napojíme na databázový stroj a databázi
public function napojeni() {
//napojíme se na databázový stroj
@$this->napoj=mysql_connect($this->pocitac, $this->jmeno);
//napojíme se na databázi
@$this->oznac_db=mysql_select_db($this->db,$this->napoj);
//jestliže nedošlo k napojení na databází a databázový stroj, je vrácena hodnota nula
if(!$this->napoj && !$this->oznac_db){
return 0;
}
//jestliže došlo k napojení na databází a databázový stroj, je vrácena hodnota jedna
else{return 1;}
}}
?>
19. 7. 2009 | gisat_cz | 1
Čtení XML v PHP pomocí parseru
Před tím, než začnu popisovat základní principy nakládání se soubory XML v prostředí programovacího jazyka PHP, si musíme ujasnit co to vlastně soubory XML jsou.
Soubory ve formátu XML jsou v současnosti velmi hojně využívány. Jedná se totiž o univerzální typ. Moderní technologie jsou hojně založeny na tomto formátu. Je velmi jednoduchý a přehledný. Narozdíl od HTML není tak spjatý s konvencemi, můžete vytvářet tagy podle svého. To co si nemůžete dovolit v HTML si můžete naopak dovolit zde. XML nám umožňuje vytvářet sktrukturované dokumenty. “Sktrukturované” znamená, že budou obsahovat “značky” a “znaky”.
Existuje spoustu technik zpracování XML v jazyku PHP. My si zde ukážeme jeden z možných způsobů. Budeme číst dokument XML pomocí parseru .
První co si vytvoříme bude XML soubor:
<?xml version=”1.0″ encoding=”UTF-8″?>
<adresy stav_k=”26. červnu 2009″ typ=”obce s rozsirenou pusobnosti,obce”>
<oblast typ=”obec_s_rozsir_pusob” nazev=”AŠ” kraj=”KARLOVARSKÝ” okres=”CHEB”>
<obec nazev=”AŠ” muzi=”6638″ zeny=”6858″/>
<obec nazev=”HAZLOV” muzi=”846″ zeny=”834″/>
<obec nazev=”HRANICE” muzi=”1097″ zeny=”1168″/>
</oblast>
<oblast typ=”obec_s_rozsir_pusob” nazev=”BENEŠOV” kraj=”STŘEDOČESKÝ” okres=”BENEŠOV”>
<obec nazev=”BENEŠOV” muzi=”8011″ zeny=”8646″/>
<obec nazev=”BUKOVANY” muzi=”351″ zeny=”350″/>
</oblast>
</adresy>
XML soubory můžete vytvářet v jakémkoli editoru, například v Notepadu, Dreamweavru, či nějakém dalším. Co výše uvedený kód znamená? Postupně si projdeme jednotlivé řádky našeho kódu:
<?xml version=”1.0″ encoding=”UTF-8″?>
Tímto deklarujete dokument XML a také u něj stanovíte patřičné kódování. Stanovení kódování je velmi důležité, zařídíte tak, aby se text zobrazoval správně. Abych byl přesný ono kódování nemusí být uvedené v dokumentu XML, ale můžeme ho uvést v onom “tajemném” parseru.
Každý XML dokument má tzv. kořenový element, zde element <adresy>, ostatní elementy jsou vloženy do těla kořenového elementu. Vytváření XML dokumentů se pokusím nastínit v některém pozdějším článku.
Vytvoření souboru zpracuj_xml.php:
Druhým krokem vytvoříte soubor zpracuj_xml.php, v něm budeme číst obsah XML dokumentu, respektive zobrazíme atribut nazev elementu obec:
Nejprve vytvoříme XML parser pomocí funkce xml_parser_create. Pokud by došlo k nějaké chybě, parser by vrátil false. Zde, jak bylo řečeno, také do závorek funkce můžeme uvést patřičné kódování(ISO-8859-1 nebo UTF-8).
$parser=xml_parser_create();
//—————————————————-
Vytvoříme obsluhu počátečního tagu elementu, tedy co se má po počáteční značce udělat. V našem případě zjistíme pomocí funkce PHP (pro regulární výrazy:eregi) jestli název elementu obsahuje slovo obec a pokud ano tak se vypíše hodnota jeho atributu označeného slovem název.
Funkce pro obsluhu počátečního tagu elementu, by měla ve svých argumentech obsahovat na prvním místě proměnou pro paeser, dále proměnou pro jméno počátečního tagu elementu a naposled proměnou pro atributy .
function zacatek_elem($parser,$jmeno,$atributy) {
if(eregi(”obec”, $jmeno)){
echo $atributy["NAZEV"].”<br/>”;
}
}
//——————————————————
Vytvoříme obsluhu koncového tagu elementu. Možná se Vám tento krok zdá být zbytečným, ale rozhodně tomu tak není. Uvedení funkcí pro obsluhy počátečních i koncových tagů elementů musí být vždy uvedeny. Funkce pro obsluhu koncového tagu elementu by měla ve svých argumentech obsahovat ma prvním místě proměnou parseru a poté jméno koncového tagu elementu:
function konec_elem($parser,$nazev) {}
//——————————————————-
Parser bude číst tento kód a narazí na počáteční a konečný tag elementu a proto musíme tzv. zaregistrovat obslužné funkce daného elementu. Registraci provedeme pomocí funkce xml_set_element_handler, opět jeho parametry jsou, proměná parseru, funkce pro obsluhu počátečního a koncového tagu elementu. Obě dvě funkce uvedeme v uvozovkách bez parametrů:
xml_set_element_handler($parser,”zacatek_elem”,”konec_elem”);
//——————————————————–
Dále nás čeká jen načíst XML soubor a umožnit tak vypsání atributů nazev elementu obec:
Otevřeme XML dokument
$nazev_souboru_xml=”acko.xml”;
Pokud nedojde k otevření dokumentu vypíše se varovná hláška
if(!($soubor = fopen($nazev_souboru_xml,”r”))) {
die(”Nelze otevřít soubor “.$nazev_souboru_xml.”!”);
}
else {
A pak budeme predavat data parseru (treba po 4096 bytech):
while ($d = fread($soubor, 4096)) {
if(!xml_parse($parser, $d, feof($soubor))) {
die(”Chyba XML”);
}}}
//————————————————-
Pokud jste vše dělali správně, výsledek by měl vypadat takto: pod sebou napsány jména měst uvedených v atributech název elementu obec.
17. 7. 2009 | gisat_cz | 0


