Въведение в PHP и MySQL
Синтаксисът на PHP много наподобява този на C или Perl. Хора, запознати с програмирането, много бързо могат да започнат да пишат програми на PHP. В този език няма строга типизация на данните и отпада необходимоста от действията по заделяне/освобождаване на памет.Програмите, написани на PHP, са достатъчно лесночитаеми. Написаният PHP – код е зрително лесно разбираем и запомнящ се, за разлика от Perl-програмите.
Въведение в PHP и MySQL.
Източници на информацията.
Основни източници – ръководство по PHP (www.php.net) и MySQL (www.mysql.com).
Какво е PHP?
PHP – скриптов език (scripting language), вграждащ се в HTML, който се интерпретира и изпълнява на сървъра. Пример:
<html>
<head>
<title>Example</title>
</head>
<body>
<?php echo "Здравей, както виждаш и това вече го можеш!"; ?>
</body>
</html>След изпълнение на скрипта получаваме страница, на която ще бъде написано:
Здравей, както виждаш и това вече го можеш!
Основна разлика от CGI-скриптовете, написани на други езици, като Perl или C – е, че в CGI-програмите Вие сами пишете изходния HTML – код, а използвайки PHP – вграждате своята програма в готовата HTML-страница, използвайки отварящите и затварящите тагове(в примера <?php и ?>).
Разликата между PHP и JavaScript, се състои в това, че PHP-скрипта се изпълнява на сървъра и резултата от работата се предоставя на клиента, докато JavaScript кода напълно се предоставя на клиентската машина и само там се изпълнява.
Любителите на Internet Information Server ще открият, че PHP много прилича на Active Server Pages (ASP), а тези на Java ще кажат, че PHP прилича на Java Server Pages (JSP). И трите езика позволяват вграждане на код, изпълним на Web-сървъра, вътре в HTML страница.
Възможности на PHP.
С няколко думи – на PHP може да се направи всичко, което може да се направи със CGI-програмите. Например: обработка на данните от формата, генериране на динамични страници, получаване и изпращане на cookies.
Освен това в PHP е включена подръжка на много бази данни (databases), което прави писането на Web-приложения с исползуване на БД изключително опростено.
Ето непълния списък от поддържани БД:
Adabas D InterBase Solid
dBase mSQL Sybase
Empress MySQL Velocis
FilePro msSQL-odbc Unix dbm
Informix PostgreSQL Oracle
В добавка към всичко това PHP разпознава протоколите IMAP, SNMP, NNTP, POP3 и даже HTTP, а така също има възможност за работа със сокети (sockets) и да комуникира с други протоколи.
Кратка история на PHP.
За начало на PHP може да се счита есента на 1994 год., когато Rasmus Lerdorf решава да разшири възможностите на своята Home-page и написва неголям интерпретатор за изпълнение на по-простите задачи. Този интерпретатор готов в началото на 1995 година с названието Personal Home Page Tools. Възможностите му са ограничени – разпознавал опростен език и няколко макроса.
В средата на 1995 година се появява втора версия, с названието PHP/FI Version 2. Приставката FI – е присъединена от друг пакет на Rasmus, който умее да обработва форми (Form Interpritator). PHP/FI се компилира в Apache и използва стандартно API Apache. PHP скриптовете се оказали по-бързи от аналогичните CGI – скриптове.На сървъра не било необходимо да поражда нов процес. Езикът PHP по възможности започнал да доближава Perl, най-популярният език за написване на CGI-програми. Добавена е подръжка на много от известните БД (например, MySQL и Oracle). Интерфейсът към GD – библиотеката, позволявал генериране на картинки на лету. От този момент започва широкото разпространение на PHP/FI.
В края на 1997 Zeev Suraski и Andi Gutmans решават да пренапишат ядрото, с цел коригиране грешките на интерпретатора и повишаване скоростта на изпълнение на скриптовете. На 6 юни 1998 година излиза нова версия, която е наречена PHP 3.
До лятото на 1999 година PHP 3 е включен в няколко комерсиални продукта. По данни на NetCraft до ноември 1999 PHP се използва в повече от 1 млн. домейна.
Защо да изберем PHP ?
На разрабтващите Web-приложения, не е необходимо да бъде обяснявано, че web-страниците – не са само текст и картинки. Сайтът достоен за внимание е длъжен да подържа някакво ниво на интерактивност с потребителите: искане на информации, продажба на продукти, конференции и т.н. Традиционно всичко това се реализира от CGI-скриптовете, написани на Perl. Но CGI- скриптовете са лошо мащабирани. Всяко ново CGI запитване, изисква от ядрото пораждане на нов процес, а това отнема процесорно време и затормозява оперативната памет. PHP предлага друг вариант – той работи в часта Web-сървър и по това прилича на ASP от Microsoft.
Синтаксисът на PHP много наподобява този на C или Perl. Хора, запознати с програмирането, много бързо могат да започнат да пишат програми на PHP. В този език няма строга типизация на данните и отпада необходимоста от действията по заделяне/освобождаване на памет.
Програмите, написани на PHP, са достатъчно лесночитаеми. Написаният PHP – код е зрително лесно разбираем и запомнящ се, за разлика от Perl-програмите.
Какво е MySQL.
MySQL – компактен многопоточен сървър за БД. MySQL се характеризира с голяма скорост , устойчивост и лекота в използването.
MySQL е разработен от компанията TcX за вътрешни нужди, които се заключават в бързата обработка на много големи бази данни. Компанията отбелязва, че използва MySQL от 1996 година на сървър с повече от 40 БД, които съдържат 10,000 таблици, от които повече от 500 имат повече от 7 милиона реда.
MySQL е идеално решение за малки и средни приложения. Най-пълно разкриване на възможностите на сървъра, се проявяват на Unix-сървъри, където многопоточната подръжка, дава значителен прираст на производителността .
Възможности на MySQL.
MySQL подържа езика SQL в стандарта ANSI 92, и освен това има много разширения в този стандарт, които ги няма в друга СУБД.
Кратък преглед на возможностите на MySQL.
Поддържа неограничено количество потребители, едновременно работещи с базата данни.
Количеството редове в таблиците може да достига 50 млн.
Бързо изпълнение на командите. MySQL е най-бързият сървър от съществуващите.
Проста и ефективна система за безопасност. MySQL наистина е много бърз сървър, но за постигането на това разработчиците са жертвали някои изисквания към релационната СУБД.
По думите на създателите именно точки 2-4 са дали възможност за достигане на високо бързодействие. Релацията съществено понижава скоростта на сървъра, но тези неща не се явяват критични при създаването на Web-приложения. Комбинацията от високо бързодействие и ниска цена дава на сървъра изключителна популярност.
Примери с използване на PHP
Работа с форми.
В този пример е показано как в PHP леко се обработват данни с HTML – форма.
Създаваме прост HTML файл.
<HTML>
<HEAD>
<TITLE>Въвеждане на нформация за запитване</TITLE>
<BODY>
<CENTER>
Искате ли да научите повече за нашите продукти?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php3" METHOD="POST">
Вашето име:<BR>
<INPUT TYPE="text" NAME="name" SIZE=20 MAXLENGTH="30">
<P>
Вашият email:<BR>
<INPUT TYPE="text" NAME="email" SIZE=20 MAXLENGTH="30">
<P>
Мен ме интересува:
<SELECT NAME="preference">
<OPTION value = "Ябълки">Ябълки
<OPTION value = "Портокали">Портокали
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Изпрати запитване!">
</FORM>
</TD></TR></TABLE></CENTER>
</BODY>
</HTML>Назоваваме този файл request.html. В него указваме, че данните от формата ще бъдат обработвани от файл email.php3. Ето неговото съдържание:
<?
/* Този скрипт получава променливи от request.html */
PRINT "<CENTER>";
PRINT "Здравей, $name.";
PRINT "<BR><BR>";
PRINT "Благодаря за вашият интерес.<BR><BR>";
PRINT "Интересувате се от $preference. Информацията за тях ще Ви изпратим на email: $email.";
PRINT "</CENTER>";
?>Сега, ако потребителя извика request.html и въведе във формата „Пешо“, email: pesho@pupkin.com и отбележи, че го интересуват „Ябълки“, а след това натисне „Отправи запитване!“, то в отговор ще се извика email.php3, който ще изведе на екрана следното:
Здравей, Пешо
Благодаря за Вашият интерес.
Интересувате се от Ябълки. Информацията за тях ще Ви изпратим на email: pesho@pupkin.com
Сега сме длъжни да спазим обещанието и да изпратим email.
За това в PHP съществува функцията MAIL.
Синтаксис: void mail(string to, string subject, string message, string add_headers);
to – email адрес на получателя.
subject – тема на писмото.
message – самият текст на съобщението.
add_headers – други параметри (незадължителен параметър).
Дописваме в края на файла email.php3 следният код:
<?
mail($email, "Запитване за информация", "$name
Благодаря за вашият интерес!
Интересувате се от $preference
Разпространяваме ги безплатно. Обърнете се към най близкият филиал на нашата фирма и ще получите предвиденото количество.
");
mail("administration@me.com",
"има запитване за информация.",
"$name се интерусва от $preference
email-адрес: $email. ");
?>Сега потребителят ще получи писмо с по-подробна информация относно нашите продукти. Писмото ще получи и администратора на сайта.
Когато интересуващите се от нашите продукти станат много, желаеме да ги подредиме и да съхраняваме информацията за тях в база данни. За това в следващият пример.
Работа с MySQL (съхранение на данните в база данни).
За начало създаваме база данни и таблица. Влизаме в MySQL, и изпълняваме командата:
CREATE DATABASE products;
CREATE TABLE clients (name VARCHAR(25), email VARCHAR(25), choise VARCHAR(Cool;
за връзка с MySQL от PHP са необходими следните функции.
int mysql_connect(string hostname, string username, string password);
Създава връзка с MySQL.
Параметри:
Hostname – име на хоста, където се намира базата данни.
Username – име на потребителя.
Password – парола на потребителя.
Функцията връща параметър от тип int, който е по-голям от 0, ако връзката е протекла успешно, и равен на 0 в противен случай.
int mysql_select_db(string database_name, int link_identifier);
Избира база данни за работа.
Параметри:
Database_name – име на базата данни.
link_identifier – ID на връзката, получено във функцията mysql_connect. (параметъра не е задължителен, ако не е указан, се използва ID от последното извикване на mysql_connect)
Функцията връща стойнос true или false
int mysql_query(string query, int link_identifier);
Функцията изпълнява запитване към базата данни.
Параметри:
Query – ред, съдържащ запитване
link_identifier – виж предишната функция.
Функцията връща ID резултата или 0, ако е произтекла грешка.
int mysql_close(int link_identifier);
Функцията закрива връзката с MySQL.
Параметри
link_identifier – виж горе.
Функцията връща стойност true или false
Сега нашият файл email.php3 ще има следният вид:
<?
/* Този скрипт получава променливи от request.html */
/* Някои променливи */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица в MySQL, в която се съхраняват данните */
$userstable = "clients";
/* email на администратора */
$adminaddress = "administration@me.com";
/* създаване на връзка */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не мога да създам връзка ");
@mysql_select_db("$dbName") or die("Не мога да избера базата данни ");
PRINT "<CENTER>";
PRINT "Здравей, $name.";
PRINT "<BR><BR>";
PRINT "Благодаря за вашият интерес.<BR><BR>";
PRINT "Интересувате се от $preference. Информацията за тях ще Ви изпратим на email: $email.";
PRINT "</CENTER>";
/* Изпращаме email */
mail($email, "Запитване за информация", "$namen
Благодаря за вашият интерес.!
Интересувате се от $preference
Разпространяваме ги безплатно. Обърнете се към най близкият филиал на нашата фирма и ще получите предвиденото количество.
");
mail("administration@me.com",
"Има запитване за информация.",
"$name се интересува от $preference
email-адрес: $email. ");
/* Въвеждане на информацията за клиента в таблица */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
$result = MYSQL_QUERY($query);
PRINT "Информацията за вас е въведена в базата данни.";
/* Затваряне на връзката */
MYSQL_CLOSE();
?>
Ето колко леко се работи с база данни в PHP. Сега писменото уведомяване, информацията за клиента и неговите интереси ще бъдат предадени в MySQL таблица.
Работа с MySQL (получаване на данни от базата данни).
Съхранявайки данните, в един момент ще си зададем въпроса " Кой от нашите клиенти се интересуваше от "Ябълки" ?"
Написваме скрипта apple.php3
<?/* Показва тези които обичат повече ябълки, отколкото портокали */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";
/* Таблица MySQL, в която се съхраняват данни */
$userstable = "clients";
/* създава връзка */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не мога да създам връзка ");
@mysql_select_db("$dbName") or die("Не мога да избера база данни ");
/* Избиране на всички почитатели на ябълките */
$query = "SELECT * FROM $userstable WHERE choice = 'Ябълки'";
$result = MYSQL_QUERY($query);
/* Колко много има от тях */
$number = MYSQL_NUMROWS($result);
/* Напечатване в красив вид*/
$i = 0;
IF ($number == 0) {
PRINT "<CENTER><P>Няма любители на ябълки</CENTER>";
} ELSEIF ($number > 0) {
PRINT "<CENTER><P>Брой на любителите на ябълки: $number<BR><BR>";
WHILE ($i < $number){
$name = mysql_result($result,$i,"name");
$email = mysql_result($result,$i,"email");
PRINT "Клиент $name обича ябълки.<BR>";
PRINT "Неговият Email: $email.";
PRINT "<BR><BR>";
$i++;
}
PRINT "</CENTER>";
}
?>Тук сме използвали две нови функции:
int mysql_num_rows(int result);
Функцията връща броя редове в резултат от запитването.
Параметъра result – съдържа ID резултата от запитването.
int mysql_result(int result, int i, column);
Функцията връща стойноста на полето в колона column и в ред i.
Урока е изготвен от www.transcode.org


