Professional Documents
Culture Documents
Основи PHP
Основи PHP
ОСНОВИ PHP
Навчальний посібник
Спеціальність
122 - "Комп'ютерні науки та
інформаційні технології"
Одеса-2018
2
ЗМІСТ
ВВЕДЕННЯ ....................................................................................................................................4
1 ЗМІННІ, КОНСТАНТИ, ОПЕРАТОРИ. ТИПИ ДАНИХ .......................................................7
1.1 Основи синтаксису ..............................................................................................................7
1.2 Змінні ....................................................................................................................................8
1.3 Константи ........................................................................................................................... 10
1.4 Оператори ........................................................................................................................... 11
1.5 Типи даних .........................................................................................................................12
2 КЕРУЮЧІ КОНСТРУКЦІЇ ......................................................................................................21
2.1 Умовні оператори ..............................................................................................................21
2.2 Цикли ..................................................................................................................................23
2.3 Оператори передачі керування.........................................................................................26
2.4 Оператори включення .......................................................................................................27
3 ОБРОБКА ЗАПИТІВ ЗА ДОПОМОГОЮ PHP .....................................................................28
3.1 Основи клієнт-серверних технологій ..............................................................................28
3.2 Протокол HTTP і способи передачі даних на сервер .....................................................29
3.3 Методи ................................................................................................................................ 29
3.4 Використання HTML-форм для передачі даних на сервер ...........................................30
3.7 Обробка запитів за допомогою PHP ................................................................................33
4 РОБОТА З МАСИВАМИ ДАНИХ .........................................................................................36
4.1 Операції з масивами ..........................................................................................................36
4.2 Сортування масивів ...........................................................................................................41
4.3 Виділення підмасива .........................................................................................................46
5 РОБОТА З РЯДКАМИ .............................................................................................................49
5.1 Пошук елемента в рядку ...................................................................................................49
5.2 Виділення підрядка ...........................................................................................................51
5.3 Заміна входження підрядка .............................................................................................. 54
5.4 Поділ і з'єднання рядка .....................................................................................................57
5.5 Рядки, що містять html-код ............................................................................................... 58
6 ВЗАЄМОДІЯ PHP Й MYSQL..................................................................................................60
6.1 Установка з'єднання ..........................................................................................................61
6.2 Вибір бази даних................................................................................................................62
6.3 Одержання списку полів таблиці .....................................................................................62
6.4 Відображення списку полів в html-форму ......................................................................64
6.5 Запис даних у базу даних ..................................................................................................66
6.6 Відображення даних, що зберігаються в MySQL........................................................... 68
7 АВТОРИЗАЦІЯ ДОСТУПУ ЗА ДОПОМОГОЮ СЕСІЙ .....................................................72
7.1 Авторизація доступу .........................................................................................................72
7.2 Механізм сесій ...................................................................................................................74
7.3 Настроювання сесій ...........................................................................................................75
7.4 Робота з сесіями .................................................................................................................77
ЛІТЕРАТУРА ............................................................................................................................... 83
4
ВВЕДЕННЯ
Історія PHP
Можливості PHP
Об'єднання з HTML
2)
<?
echo ("Це найпростіший спосіб\n");
?>
або
3)
<script language="php">
8
4)
<%
echo ("Можна використати теги в стилі ASP");
%>
Розділення інструкцій
Коментарі
1.2 Змінні
$my_var
<?php
$first = ' Text '; // Привласнюємо $first
значення ' Text '
$second = $first; // Привласнюємо $second
значення змінної $first
$first = ' New text '; // Змінюємо значення $first
на ' New text '
echo "Змінна з ім'ям first ".
"дорівнює $first <br>"; // Виводимо значення
$first
echo "Змінна з ім'ям second ".
"дорівнює $second"; // Виводимо значення
$second
?>
<?php
$first = ' Text '; // Присвоюємо $first значення '
Text '
10
1.3 Константи
define("Ім'я_константи",
"Значення_константи",
[Нечутливість_до_регістра])
<?php
// визначаємо константу PASSWORD
define("PASSWORD","qwerty");
// визначаємо регістронезалежну
// константу PI зі значенням 3.14
define("PI","3.14", True);
// виведемо значення константи PASSWORD, тобто qwerty
echo (PASSWORD);
// теж виведе qwerty
echo constant("PASSWORD");
echo (password);
/* виведе password, оскільки ми ввели регістрозалежну
константу PASSWORD */
echo pi;
// виведе 3.14, оскільки константа PI
// регістронезалежна по визначенню
?>
1.4 Оператори
Арифметичні оператори
+ Додавання
- Віднімання
* Множення
/ Ділення
% Залишок від ділення
Строкові оператори
Оператори присвоювання
Логічні оператори
and І
&& І
or Або
|| Або
xor Виключаюче або (Оператор повертає значення true, якщо один і
тільки один з операндів має значення true. Якщо обоє операнда мають
значення true, оператор поверне значення false.)
! Заперечення (Інверсія NOT)
Оператори порівняння
boolean (логічний);
integer (цілий);
float (з плаваючою крапкою);
string (строковий).
Два змішаних типи:
array (масив);
object (об'єкт).
І два спеціальних типи:
resource (ресурс);
NULL.
В PHP не прийняте явне оголошення типів змінних. Переважніше, щоб
це робив сам інтерпретатор під час виконання програми залежно від
контексту, у якому використовується змінна. Розглянемо по порядку всі
перераховані типи даних.
<?php
$test = True;
?>
<?php
if ($test == False) {
echo "Вивчай PHP!";
}
?>
14
Цей тип задає число з множини цілих чисел Z = {..., -2, -1, 0, 1, 2, ...}.
Цілі можуть бути зазначені в десятковій, шестнадцатеричній або
восьмеричній системі числення, за бажанням з попереднім знаком «-» або
«+».
Якщо ви використовуєте восьмеричну систему числення, ви повинні
випередити число 0 (нулем), для використання шестнадцатеричної системи
потрібно поставити перед числом 0x.
<?php
# десяткове число
$a = 1234;
# негативне число
$a = -123;
# восьмеричне число (еквівалентно 83 у десятковій
системі)
$a = 0123;
# шестнадцатеричне число (еквівалентно 26 у десятковій
системі)
$a = 0x1A;
?>
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
Одинарні лапки
<?php
echo 'Також ви можете вставляти в рядки
символ нового рядка';
// Виведе: Щоб вивести ' треба перед нею поставити \
echo 'Щоб вивести \' треба перед '.
'нею поставити \\';
// Виведе: Ви хочете видалити C:\*.*?
echo 'Ви хочете видалити C:\\*.*?';
// Виведе: Це не вставить: \n новий рядок
echo 'Це не вставить: \n новий рядок';
// Виведе: Значення змінних $expand й $either не
підставляються
echo 'Значення змінних $expand й $either'.
' не підставляються';
?>
Подвійні лапки
Керуючі послідовності
<?php
$books = array ("php" =>"PHP users guide",
12 => true);
echo $books["php"]; //виведе "PHP users guide"
echo $books[12];
?>
<?php
// масиви $arr й $arr1 еквівалентні
$arr = array(5 => 43, 32, 56, "b" => 12);
$arr1 = array(5 => 43, 6 => 32,
7 => 56, "b" => 12);
?>
<?php
$books["key"]= value; // додали в масив $books значення
// value з ключем key
$books[] = value1; /* додали в масив значення value1 з
ключем 13, оскільки максимальний
ключ був 12 */
?>
<?php
$books = array ("php" =>"PHP users guide",
12 => true);
<?php
19
<?php
//створюємо клас людей
class Person
{
// метод, що навчає людину PHP
function know_php()
{
echo "Тепер я знаю PHP";
}
}
$bob = new Person; // створюємо об'єкт класу людина
$bob -> know_php(); // навчаємо його PHP
?>
Тип Null
2 КЕРУЮЧІ КОНСТРУКЦІЇ
Оператор if
if (вираз) блок_виконання
Оператор else
Оператор elseif
if (вираз) блок_виконання
elseif(вираз1) блок_виконання1
...
else блок_ виконанняN
Оператор switch
блок_дій_за_замовчуванням}
<?php
$names = array("Іван","Петро","Семен");
switch ($names[0]){
case "Іван":
echo "Привіт, Іван!";
break;
case "Петро":
echo "Привіт, Петро!";
break;
case "Семен":
echo "Привіт, Семен!";
break;
default:
echo "Привіт, $names[0]!";
}
?>
2.2 Цикли
while
Структура оператора:
<?php
$i = 1;
while ($i < 10) {
if ($i % 2 == 0) print $i;
// друкуємо цифру, якщо вона парна
$i++;
// збільшуємо $i на одиницю
}
?>
do... while
<?php
// ця програма надрукує число 12, незважаючи на те,
// що умова циклу не виконана
$i = 12;
do{
if ($i % 2 == 0) print $i;
25
for
Структура оператора:
<?php
for ($i=0; $i<10; $i++){
if ($i % 2 == 0) print $i;
// друкуємо парні числа
}
?>
<?php
for ($i=0; $i<10; print $i, $i++)
/* Якщо блок_виконання не містить команд
або містить тільки одну команду,
фігурні дужки, у які він укладений,
можна опускати */
?>
foreach
26
або
<?php
$names = array("Іван","Петро","Семен");
foreach ($names as $val) {
echo "Привіт, $val <br>";
// виведе всім вітання
}
foreach ($names as $k => $val) {
//крім вітання, виведемо номери в списку, тобто ключі
echo "Привіт, $val!
Ти в списку під номером $k <br>";
}
?>
include 'ім'я_файлу';
include $file_name;
include ("ім'я_файлу");
3.3 Методи
Метод GET
action?name1=value1&name2=value2&name3=value3
http://phpbook.info/test.php?id=10&user=pit
Метод POST
Вміст форми кодується точно так само, як для методу GET, але замість
додавання рядка до URL вміст запиту посилається блоком даних як частина
операції POST. Якщо є присутнім атрибут ACTION, то значення URL, що
там перебуває, визначає, куди посилати цей блок даних. Цей метод, як ми
вже відзначали, рекомендується для передачі великих за обсягом блоків
даних.
Інформація, введена користувачем і відправлена серверу за допомогою
методу POST, подається на стандартне введення програмі, зазначеній в
атрибуті ACTION, або поточному скрипту, якщо цей атрибут опущений.
Довжина файлу, що посилається, передається в змінній оточення
CONTENT_LENGTH, а тип даних - у змінній CONTENT_TYPE.
Передати дані методом POST можна тільки за допомогою HTML-
форми, оскільки дані передаються в тілі запиту, а не в заголовку, як в GET.
Відповідно й змінити значення параметрів можна, тільки змінивши значення,
введене у форму. При використанні POST користувач не бачить передані
серверу дані.
Основна перевага POST запитів - це їхня більша безпека й
функціональність у порівнянні з GET-запитами. Тому метод POST частіше
використовують для передачі важливої інформації, а також інформації
великого обсягу. Проте не варто цілком покладатися на безпеку цього
механізму, оскільки дані POST запиту також можна підробити, наприклад
створивши html-файл на своїй машині й заповнивши його потрібними
даними. Крім того, не всі клієнти можуть застосовувати метод POST, що
обмежує варіанти його використання.
33
<?php
$str = "Здрастуйте, ".$_REQUEST["first_name"]. "
".$_REQUEST["last_name"]."! <br>";
$str .="Ви вибрали для вивчення курс по
".$_REQUEST["kurs"];
echo $str;
?>
<?php
$str = "Здрастуйте, ".$_POST["first_name"]."
".$_POST["last_name"] ."! <br>";
$str .= "Ви вибрали для вивчення курс по
".$_POST["kurs"];
echo $str;
?>
<?php
getenv('REQUEST_METHOD');
// поверне використаний метод
echo getenv('REMOTE_ADDR');
// виведе IP-адресу користувача, що послав запит
?>
getenv('QUERY_STRING');
getenv('HTTP_REFERER');
36
Масиви
<?php
$del_items = array("10"=>"Програмування на Perl",
"12"=>"Інформатика");
$del_items["13"] = "Програмування на Php";
// додаємо елемент у масив
?>
<?php
$a = array("і"=>"Інформатика",
"м"=>"Математика");
$b = array("і"=>"Історія","м"=>"Біологія",
37
"ф"=>"Фізика");
$c = $a + $b;
$d = $b + $a;
print_r($c);
/* одержимо: Array([і]=>Інформатика
[м]=>Математика [ф]=>Фізика) */
print_r($d);
/* одержимо: Array([і]=>Історія
[м]=>Біологія [ф]=>Фізика) */
?>
<?php
$a = array("і"=>"Інформатика",
"м"=>"Математика");
$b = array("м"=>"Математика",
"і"=>"Інформатика");
if ($a == $b) echo "Масиви рівні й";
else echo "Масиви НЕ рівні й ";
if ($a === $b) echo " еквівалентні";
else echo " НЕ еквівалентні";
// одержимо echo "Масиви рівні й НЕ еквівалентні"
?>
Функція count
<?php
$del_items = array("langs" => array(
"10"=>"Python", "12"=>"Lisp"),
"other"=>"Інформатика");
echo count($del_items)."<br>";
// виведе 2
38
echo count($del_items,COUNT_RECURSIVE);
// виведе 4
?>
Функція in_array
<?php
$langs = array("Lisp","Python","Java",
"PHP","Perl");
if (in_array("PHP",$langs,true))
echo "Треба б вивчити PHP<br>";
// виведе повідомлення "Треба б вивчити PHP"
if (in_array("php",$langs))
echo "Треба б вивчити php<br>";
// нічого не виведе, оскільки в масиві
// є рядок "PHP", а не "php"
?>
<?php
$langs =
array("Lisp","Python",array("PHP","Java"),"Perl");
if (in_array(array("PHP","Java"),$langs))
echo "Треба б вивчити PHP й Java<br>";
?>
Функція array_search
<?php
$langs = array("","Lisp","Python","Java",
"PHP","Perl");
if (!array_search("PHP",$langs))
echo "Треба б вивчити PHP<br>";
else {
$k = array_search("PHP",$langs);
echo "Мову PHP я вивчила $k-ою";
}
?>
Функція array_keys
<?php
$langs = array("Lisp","Python","Java","PHP",
"Perl","Lisp");
$lisp_keys = array_keys($langs,"Lisp");
echo "Lisp входить у масив ".
count($lisp_keys)." рази:<br>";
foreach ($lisp_keys as $val){
echo "під номером $val <br>";
}
?>
У результаті одержимо:
Функція array_unique
Одержимо наступне:
Array ( [0] => Lisp [1] => Java [2] => Python [4] =>
PHP [5] => Perl )
Функція sort
Приклад. Нехай у нас є два масиви: ціни товарів - їхні назви й, навпаки,
назви товарів - їхні ціни. Упорядкуємо ці масиви по зростанню:
<?php
$items = array(10 => "хліб", 20 => "молоко",
30 => "бутерброд");
sort($items);
// рядки сортуються в алфавітному
// порядку, ключі губляться
42
print_r($items);
Одержимо:
Array ( [0] => бутерброд [1] => молоко [2] => хліб )
Array ( [0] => 10 [1] => 20 [2] => 30)
<?php
$books = array("Еккель Б."=>"Філософія Java",
"Прохоренок Н."=>"Новий стиль програмування на
JavaScript",
"Вейл Е."=>"Розробка додатків для мобільних
пристроїв");
asort($books);
// сортуємо масив, зберігаючи значення ключів
print_r($books);
43
echo "<br>";
rsort($books);
// сортуємо масив у зворотному порядку,
// ключі будуть замінені
print_r($books);
?>
<form action="task.php">
<table border=1>
<tr><td>Назва </td><td><input type="text"
name="title" size=5> </td></tr>
<tr><td>Короткий зміст </td><td><input
type="text" name="description" size=5>
</td></tr>
<tr><td>Автор </td><td><input type="text"
name="author" size=5> </td></tr>
<tr><td>Дата публікації </td><td><input
type="text" name="published" size=5></td></tr>
</table>
<input type="submit" value="Відправити">
</form>
<?php
print_r($_GET); echo "<br>";
arsort ($_GET); // сортуємо масив у зворотному порядку,
зберігаючи ключі
print_r($_GET); echo "<br>";
$ordered_names = array_keys($_GET); // складаємо новий
масив
foreach($ordered_names as $key => $val)
echo "$key :$val <br>"; // виводимо елементи
нового масиву
?>
<?php
$books = array("Еккель Б."=>"Філософія Java",
"Прохоренок Н."=>"Новий стиль програмування на
JavaScript",
"Вейл Е."=>"Розробка додатків для мобільних
пристроїв");
ksort($books);
// сортуємо масив, зберігаючи значення ключів
print_r($books);
?>
Одержимо:
<?php
// масив виглядає в такий спосіб:
$books = array("Філософія Java" =>
array ("Еккель Б.", 2009),
"Новий стиль програмування на JavaScript" =>
array("Прохоренок Н.",2010),
"Розробка додатків для мобільних пристроїв" => array
("Вейл Е.",2008));
/* можна, звичайно переписати цей масив
по-іншому, зробивши рік видання, наприклад,
індексом, але набагато зручніше написати свою
функцію для сортування */
46
uasort($books,"cmp");
// сортуємо масив за допомогою функції cmp
У результаті одержимо:
Функція array_slice
<?php
$arr = array(1,2,3,4,5);
$sub_arr = array_slice($arr,2);
print_r($sub_arr);
/*
виведе Array ( [0] => 3 [1] =>4 [2] => 5 ),
47
<?php
$arr = array(1,2,3,4,5);
$sub_arr = array_slice($arr, 2, 2);
// містить масив з елементів 3, 4
$sub = array_slice($arr,-3, 2);
// теж містить масив з елементів 3, 4
$sub1 = array_slice($arr,0, -1);
// містить масив з елементів 1, 2, 3, 4
$sub2 = array_slice($arr,-4, -2);
// містить масив з елементів 2, 3
?>
Функція array_chunk
<?php
$persons = array("Бондарчук", "Петренко",
"Тарасюк","Ткаченко", "Пасічник");
$triples = array_chunk($persons,3);
// ділимо масив на підмасиви по три елементи
foreach ($triples as $k => $table){
// виводимо отримані трійки
echo "За столиком номер $k сидять: <ul>";
foreach ($table as $pers)
echo "<li>$pers";
echo "</ul>";
}
?>
У результаті одержимо:
• Бондарчук
• Петренко
• Тарасюк
• Ткаченко
• Пасічник
49
5 РОБОТА З РЯДКАМИ
Рядки
<?php
echo 'У такому рядку НЕ обробляються
змінні й більшість послідовностей';
echo "Тут змінні й послідовності обробляються";
?>
<?php
echo "Прийшов ", "побачив ", "переміг ";
// виведе рядок "Прийшов побачив переміг"
echo "Прийшов " . "побачив " . "переміг ";
// теж виведе рядок "Прийшов побачив переміг"
echo("Прийшов ", "побачив ", "переміг ");
// видасть помилку: unexpected ','
?>
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
Функція strstr
<?php
$str = "Автор: Ткаченко Іван (<a
href=mailto:van@ukr.net>написати лист</a>),
Назва: 'Дослідження мов програмування' ";
echo "<b>Вихідний рядок: </b>",$str;
if (!strstr($str, "Назва"))
echo "Рядок не знайдений<br>";
else echo "<p><b>Отриманий підрядок: </b>",strstr($str,
"Назва");
?>
У результаті одержимо:
Функція substr
<?php
$word = "<b>Hello, world!</b>";
echo $word , "<br>";
$pure_str = substr($word, 3, -4);
/* виділяємо підрядок,
починаючи з 3-го символу,
не включаючи 4 символи з кінця рядка */
echo $pure_str;
?>
Hello, world!
Hello, world!
53
<?php
$string = "<b>Bold text</b>
<i>Italic text</i>";
$str = strip_tags($string);
// видаляємо всі теги з рядка
$str1 = strip_tags($string, '<b>');
// видаляємо всі теги крім тегу <b>
$str2 = strip_tags($string, '<i>');
// видаляємо всі теги крім тегів <i>
echo $str,"<br>",$str1,"<br>", $str2;
?>
У результаті одержимо:
Функція str_replace
<?php
$greeting = array("Привіт", "Привіт всім!",
"Привіт, друзі!"); // об'єкт
$new_greet = str_replace("Привіт",
"Добрий ранок", $greeting);
// робимо заміну
print_r($new_greet);
/* одержимо: Array ([0]=>Добрий ранок [1]=>Добрий ранок
всім!
[2]=>Добрий ранок, друзі!) */
?>
<?php
$greeting = array("Привіт", "Привіт всім!",
"Привіт, друзі!","Здрастуйте", "Hi");
// об'єкт
$search = array ("Привіт", "Здрастуйте", "Hi");
// значення, які будемо заміняти
$replace = array ("Добрий ранок", "День добрий");
// значення, якими будемо заміняти
$new_greet = str_replace($search, $replace, $greeting);
// робимо заміну
print_r($new_greet);
//виводимо отриманий масив
?>
Array ([0] => Добрий ранок [1] => Добрий ранок всім!
[2] => Добрий ранок, друзі! [3] => День добрий [4] =>)
<?php
$greeting = array("Привіт", "Привіт всім!",
"Привіт, друзі!", "Здрастуйте");
// об'єкт
$search = array ("Привіт","Здрастуйте");
// значення, які будемо заміняти
$replace = "День добрий";
// значення, яким будемо заміняти
$new_greet = str_replace($search, $replace, $greeting);
// робимо заміну
print_r($new_greet);
//виводимо отриманий масив
?>
Одержимо:
Array ([0] => День добрий [1] => День добрий всім! [2]
=> День добрий, друзі!
[3] => День добрий)
56
<?php
$text = "Мене кличуть Андрій.";
echo "Вихідний рядок: $text<hr>";
/* Наступні два рядки замінять
вихідний рядок рядком 'А мене - Олексій' */
echo substr_replace($text, 'А мене - Олексій', 0) .
"<br>\n";
echo substr_replace($text, 'А мене - Олексій', 0,
strlen($text)) . "<br>\n";
// Наступний рядок додасть слово 'Привіт! '
// у початок вихідного рядка
echo substr_replace($text, 'Привіт! ', 0, 0) .
"<br>\n";
?>
<form action="exp.php">
Введіть варіанти для вибору автора статті
через двокрапку (":"):<br>
<input type="text" name="author" size=40>
<br>
<input type="submit" value="Створити елемент">
</form>
<?php
58
$str = $_GET["author"];
$names = explode(":",$str);
// розбиваємо рядок, введений користувачем за
допомогою ":"
$s = "<select name=’author’>";
// створюємо список, що випадає
foreach ($names as $k => $name) {
$s .= "<option value=$k>$name";
// додаємо елементи до списку
}
$s .= "</select>";
echo $s;
?>
<?php
$data = array("Ткаченко","Іван","Борисович");
$str = implode(" ", $data);
echo $str;
?>
<?php
$new = htmlspecialchars("<a href='mailto:au@ukr.net'>
Написати лист</a>", ENT_QUOTES);
echo $new;
У браузері ми побачимо:
server = 'localhost:3306'
username = ім'я користувача власника процесу сервера
password = порожній пароль
<?php
$conn = mysql_connect("localhost", "nina","123")
or die("Неможливо встановити з'єднання:
".mysql_error());
echo "З'єднання встановлене";
mysql_close($conn);?>
62
mysql>use book;
<?php
$conn = mysql_connect("localhost","nina","123")
or die("Неможливо встановити
з'єднання: ".mysql_error());
echo "З'єднання встановлене";
mysql_select_db("book");
?>
<?php
$conn = mysql_connect("localhost","nina","123")
or die("Неможливо встановити
з'єднання: ".mysql_error());
echo "З'єднання встановлене";
mysql_select_db("book");
$list_f = mysql_list_fields("book","Artifacts",$conn);
$n = mysql_num_fields($list_f);
for($i=0;$i<$n; $i++){
$type = mysql_field_type($list_f, $i);
$name_f = mysql_field_name($list_f,$i);
$len = mysql_field_len($list_f, $i);
$flags_str = mysql_field_flags($list_f, $i);
64
Ім'я поля: id
Тип поля: int
Довжина поля: 11
Рядок прапорів поля:
not_null primary_key auto_increment
_________________________________________________
Ім'я поля: title
Тип поля: string
Довжина поля: 255
Рядок прапорів поля:
<?php
$conn=mysql_connect("localhost","nina","123");
// установлюємо з'єднання
$database = "book";
$table_name = "Artifacts";
mysql_select_db($database); // вибираємо базу даних для
роботи
$list_f = mysql_list_fields($database,$table_name);
// одержуємо список полів у таблиці
$n = mysql_num_fields($list_f); // число рядків у
результаті
// попереднього запиту (тобто скільки всього
// полів у таблиці Artifacts)
echo "<form method=post action=insert.php>";
// створюємо форму для уведення даних
echo " <TABLE BORDER=0 CELLSPACING=0 width=50%
><tr>
<TD BGCOLOR='#005533' align=center><font
color='#FFFFFF'>
<b> Add new row in
$table_name</b></font></td></tr><tr><td></td></tr></TAB
LE>";
echo "<table border=0 CELLSPACING=1 cellpadding=0
width=50% >";
// для кожного поля одержуємо його ім'я, тип, довжину й
прапори
for($i=0;$i<$n; $i++){
$type = mysql_field_type($list_f, $i);
$name_f = mysql_field_name ($list_f,$i);
$len = mysql_field_len($list_f, $i);
$flags_str = mysql_field_flags ($list_f, $i);
// з рядка прапорів робимо масив,
// де кожен елемент масиву - прапор поля
$flags = explode(" ", $flags_str);
foreach ($flags as $f){
if ($f == 'auto_increment') $key = $name_f;
// запам'ятовуємо ім'я автоінкремента
}
/* для кожного поля, що не є автоінкрементом, в
залежності від його типу виводимо підходящий елемент
форми */
if ($key <> $name_f){
echo "<tr><td align=right bgcolor='#C2E3B6'><font
size=2>
66
<b> ".$name_f."</b></font></td>";
switch ($type){
case "string":
$w = $len/5;
echo "<td><input type=text name=\"$name_f\"
size = $w ></td>";
break;
case "int":
$w = $len/4;
echo "<td><input type=text name=\"$name_f\"
size = $w ></td>";
break;
case "blob":
echo "<td><textarea rows=6 cols=60
name=\"$name_f\"></textarea></td>";
break;
}
}
echo "</tr>";
}
echo "</table>";
echo "<input type=submit name='add' value='Add'>";
echo "</form>";
?>
<?php
$conn=mysql_connect("localhost","nina","123");//
установлюємо з'єднання
$database = "book";
$table_name = "Artifacts";
mysql_select_db($database); // вибираємо базу даних
$list_f = mysql_list_fields($database,$table_name);
// одержуємо список полів у таблиці
$n = mysql_num_fields($list_f); // число рядків у
результаті
// попереднього запиту
// складемо один запит відразу для всіх полів таблиці
$sql = "INSERT INTO $table_name SET "; // починаємо
створювати
// запит, перебираємо всі поля таблиці
for($i=1;$i<$n; $i++){
$name_f = mysql_field_name ($list_f,$i); //
обчислюємо імена поля
$value = $_POST[$name_f]; // обчислюємо значення
поля
$j = $i + 1;
$sql = $sql.$name_f." = '$value'"; // дописуємо в
// рядок $sql пари ім'я=значення
if ($j <> $n) $sql = $sql.", "; // якщо поле не
// останнє в списку, то ставимо кому
}
// перед тим як записувати щось у базу,
68
<?php
/ * спочатку робимо те ж, що й раніше: установлюємо
з'єднання, вибираємо базу й одержуємо список і число
полів у таблиці Artifacts */
$conn=mysql_connect("localhost","nina","123");
$database = "book";
$table_name = "Artifacts";
mysql_select_db($database);
$list_f = mysql_list_fields($database,$table_name);
$n1 = mysql_num_fields($list_f);
// збережемо імена полів у масиві $names
for($j=0;$j<$n1; $j++){
$names[] = mysql_field_name ($list_f,$j);
}
$sql = "SELECT * FROM $table_name"; // створюємо SQL
запит
$q = mysql_query($sql,$conn) or die(); // відправляємо
// запит на сервер
$n = mysql_num_rows($q); // одержуємо число рядків
результату
//малюємо HTML-таблицю
echo " <TABLE BORDER=0 CELLSPACING=0 width=90%
align=center><tr><TD BGCOLOR='#005533'
align=center>
<font
color='#FFFFFF'><b>$table_name</b></font></td>
</tr></TABLE>";
echo "<table cellspacing=0 cellpadding=1 border=1
width=90% align=center>";
// відображаємо назви полів
echo "<tr>";
foreach ($names as $val){
echo "<th ALIGN=CENTER BGCOLOR='#C2E3B6'>
<font size=2>$val</font></th>";
}
// відображаємо значення полів
echo "</tr>";
for($i=0;$i<$n; $i++){ // перебираємо всі рядки в
// результаті запиту на вибірку
echo "<tr>";
foreach ($names as $val) { // перебираємо всі
71
// імена полів
$value = mysql_result($q,$i,$val); // одержуємо
// значення поля
echo "<td><font
size=2> $value</font></td>";
// виводимо значення поля
}
echo "</tr>";
}
echo "</table>";
?>
<?php
/* ... початок те ж, що й у попередньому прикладі */
// відображаємо значення полів
// одержуємо значення поля у вигляді асоціативного
масиву
while($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
echo "<tr>";
foreach ($names as $val){
echo "<td><font
size=2> $row[$val]</font></td>";
// виводимо значення поля
}
echo "</tr>";
}
echo "</table>";
?>
<html>
<head><title>My home page</title></head>
<body>
Привіт всім! Мене кличуть Андрій Петров й це моя
домашня сторінка.
<a href="secret_info.html">Для Петра</a>
</body>
</html>
<html>
<head><title>Secret info</title></head>
<body>
<p>Тут я хочу ділитися секретами з другом Петром.</p>
</body>
</html>
<html>
<head><title>My home page</title></head>
<body>
<p>Привіт всім! Мене кличуть Андрій Петров й це моя
домашня сторінка.
</p>
<a href="authorize.php">Для Петра</a>
</body>
74
</html>
<?php
if (!isset($_GET['go'])){
// перевіряємо, чи відправлені дані формою
// форма для авторизації (введення логіна й пароля)
echo "<form>
Login: <input type='text' name='login'>
Password: <input type='password' name='passwd'>
<input type='submit' name='go' value='Go'>
</form>";
}else {
// якщо форма заповнена, то порівнюємо логін
// і пароль із правильними логіном і паролем
if ($_GET['login']=="pit" &&
$_GET['passwd']=="123") {
Header("Location: secret_info.html");
//і перенаправляємо на секретну сторінку
}else echo "Невірне введення,
спробуйте ще раз<br>";
}
?>
http:// example.com/test.php?PHPSESSID=
c4f4a45bdc893434c95dcaffb1c1811
session_start();
<?php
session_start();
// створюємо нову сесію або відновлюємо поточну
echo session_id();
// виводимо ідентифікатор сесії
?>
<html>
<head><title>My home page</title></head>
... // домашня сторінка
78
</html>
<?php
echo session_name();
// виводимо ім'я поточної сесії.
// У цьому випадку це PHPSESSID
?>
Однак від самих ідентифікатора й імені сесії нам користі для рішення
наших задач небагато. Ми ж хочемо передавати й зберігати протягом сесії
наші власні змінні (наприклад, логін і пароль). Для того, щоб цього
домогтися, потрібно просто зареєструвати свої змінні:
$_SESSION['ім'я_змінної'] = 'значення_змінної';
<?php
session_start();
// створюємо нову сесію або відновлюємо поточну
if (!isset($_GET['go'])){
echo "<form>
Login: <input type='text' name='login'>
Password: <input type='password'
name='passwd'>
<input type='submit' name='go' value='Go'>
</form>";
}else {
$_SESSION['login']=$_GET['login'];
// реєструємо змінну login
$_SESSION['passwd']=$_GET['passwd'];
// реєструємо змінну passwd
// тепер логін і пароль - глобальні змінні для цієї
сесії
if ($_GET['login']=="pit" &&
$_GET['passwd']=="123") {
Header("Location: secret_info.php");
// перенаправляємо на сторінку secret_info.php
}else echo "Невірне введення,
спробуйте ще раз<br>";
}
print_r($_SESSION);
// виводимо всі змінні сесії
?>
<?php
session_start();
// створюємо нову сесію або відновлюємо поточну
print_r($_SESSION); // виводимо всі змінні сесії
80
?>
<html>
<head><title>Secret info</title></head>
<body>
<p>Тут я хочу ділитися секретами з другом Петром.
</p>
</body>
</html>
<?php
session_start();
// створюємо нову сесію або відновлюємо поточну
print_r($_SESSION); // виводимо всі змінні сесії
if (!($_SESSION['login']=="pit" &&
$_SESSION['passwd']==123))
// перевіряємо правильність пароля-логіна
Header("Location: authorize.php");
// якщо помилка, то перенаправляємо на
// сторінку авторизації
?>
<html>
<head><title>Secret info</title></head>
... // тут розташовується
//секретна інформація :)
</html>
<?php
// ... php код
?>
<html>
<head><title>Secret info</title></head>
... // тут розташовується
// секретна інформація :)
<a href="index.php">На головну</a>
</html>
<?php
session_start();
unset($_SESSION['passwd']);
// знищуємо пароль
unset($_SESSION['login']);
// знищуємо логін
print_r($_SESSION);
// виводимо глобальні змінні сесії
?>
<html>
<head><title>My home page</title></head>
... // домашня сторінка
</html>
Для того щоб скинути значення всіх змінних сесії, можна використати
функцію session_unset().
Знищити поточну сесію цілком можна командою
session_destroy(). Вона не скидає значення глобальних змінних сесії й
не видаляє cookies, а знищує всі дані, асоційовані з поточною сесією.
<?php
session_start(); // ініціалізуємо сесію
$test = "Змінна сесії";
$_SESSION['test']= $test;
// реєструємо змінну $test.
print_r($_SESSION);
// виводимо всі глобальні змінні
echo session_id();
// виводимо ідентифікатор сесії
echo "<hr>";
session_unset();
// знищуємо всі глобальні змінні сесії
print_r($_SESSION);
echo session_id();
echo "<hr>";
session_destroy(); // знищуємо сесію
print_r($_SESSION);
echo session_id();
?>
ЛІТЕРАТУРА