Перемикач сторінок PHP. PHP та форми

У всіх мовах світу є слово "включач",
і лише російською - «вимикач»!
Михайло Задорнов

Сьогодні ми поговоримо про такий елемент синтаксису PHPяк перемикачі. Не варто плутати його з HTML-тегом , який також створює перемикачі. Отже,

Оператор switch

Завдання: залежно від цього, що вибирає користувач, вивести йому необхідний варіант. Дивимося код:

Приклад 1. HTML-сторінка з формою:

Соцопитування

Введіть Вашу оцінку з російської мови:



А ось код оброблювача:

Приклад 2. Обробник форми (файл cup6.php):

if (! $ score ) (
echo();
) elseif ($score == 1 ) (
echo ("Жах!");
) elseif ($score == 2 ) (
echo ("Неуд %-(");
) elseif ($score == 3 ) (
echo ("Уд ...");
) elseif ($score == 4 ) (
echo ("Добре");
) elseif ($score == 5 ) (
echo ("Чудово!");
) else (
echo ( "Цікава оцінка...");
}
?>

Думаю, що всі ви легко розібралися з кодом і зрозуміли, як він діє. Взагалі кажучи, код цей правильний, і в ньому немає помилок (начебто...), але дуже він незручний: ціла купа умов, встежити де що досить важко. Що ж робити? Зараз нам і знадобиться перемикач switch.

Зовнішній вигляд перемикача такий:

Приклад 3. Зовнішній вигляд перемикача switch:

switch (вираз) (
case значення1 :
// команди, які виконуються, якщо вираз = значення1
break; // не обов'язково
case значення2 :
// команди, які виконуються, якщо вираз = значення2
break; // не обов'язково
...
default:
// команди, які виконуються, якщо не було знайдено
// Жодного збігу
break; // не обов'язково
}

Як діє весь цей блок:

  1. Обчислюється значення виразу.
  2. Значення виразу звіряється зі значенням 1 . Якщо вони рівні, то виконується код після команди case значення1:
  3. Якщо значення виразу не дорівнює значенню 1 воно звіряється зі значенням 2, 4 тощо.
  4. Якщо не знайдено жодного збігу, то виконується код блоку default .

Блок default не обов'язковий: його можна не вказувати.

Команда break(); після кожного блоку коду потрібна для того, щоб після того, як код був виконаний, всі наступні case-и просто пропускалися.

Тепер давайте змінимо код другого прикладу зручніший! Наприклад, такий:

Приклад 4. Змінений код прикладу 2 (файл cup6.php):

switch ($score) (
case 0 :
echo ( "Ви все-таки введіть оцінку...");
break;
case 1 :
echo ("Жах!");
break; case 2 :
echo ("Неуд %-(");
break;
case 3 :
echo ("Уд ...");
break;
case 4 :
echo ("Добре");
break;
case 5 :
echo ("Чудово!" );
break;
default:
echo (
"Цікава оцінка...");
}
?>

Ось так. Просто та зручно. Результати цієї роботи зображені на малюнках:

До після

Підключення

Найчастіше набагато зручніше розбити код на кілька частин та виводити їх у потрібних місцях. Щоб увімкнути вміст одного файлу в інший файл, ми можемо користуватися двома командами: require(); та include();

require()

Зовнішній вигляд команди:

Приклад 6. Зовнішній вигляд команди require():

require("ім'я файлу");

Перед початком виконання скрипту PHPзнаходить усі команди require(); і замінює їх (команди) на вміст вказаного файлу.

Заміна відбувається лише один раз перед початком роботи скрипта, тому Ви не зможете включити команду require(); у тіло циклу!

Файл, який Ви підключаєте командою require(); може містити в собі PHP-код. Цей код буде виконано.

include()

Зовнішній вигляд команди:

Приклад 7. Зовнішній вигляд команди include():

include("ім'я файлу");

Команда include(); вставляє та виконує вміст зазначеного файлу, причому відбувається це під час виконання скрипту щоразу при зустрічі команди inlcude(); .

Незважаючи на явну схожість команди require(); та include(); серйозно різняться: команда require(); виконується один раз перед початком виконання скрипту, а команда inlcude(); кожен раз, коли зустрічається в коді і Ви легко можете поміщати команду inlcude(); у цикли.

Як це може допомогти в житті: майже на кожному сайті є такі частини сторінки, які не змінюються у всьому сайті - це, наприклад, header (заголовок, шапка) сайту та footer (підвал, низ) сайту. Щоб не друкувати їх у кожній сторінці, заново варто винести їх у два окремі файли (наприклад, header.php і footer.php) і підключати при необхідності.

Код такої сторінки може виглядати, наприклад, так:

Приклад 8. Підключення заголовка та низу сторінки із зовнішніх файлів:

require("header.php"); // тут знаходиться текст поточної сторінки
require("footer.php");
?>

Використання require() у цьому прикладі краще: адже ми включаємо ці файли тільки один раз.

require_once() та inlcude_once()

Якщо Вам потрібно зробити так, щоб деякий файл включався до коду лише один раз, то замість require(); та include(); потрібно використовувати require_once(); та require_once();

Подивіться приклади:

Приклад 9. Подвійне використання include_once():

include_once("top.php");
// тут якийсь код include_once("top.php");
?>

У попередньому прикладі файл top.php буде включений у код сторінки лише один раз, незважаючи на те, що код має дві команди.

От і все...

Ну от, начебто б і все, що я хотів розповісти Вам на сьогодні. Будуть якісь проблеми з PHP- Пишіть мені, я допоможу!

Як домашнє завдання: зробити найпростіший калькулятор. Як підказка, ось Вам малюнок:

І ось ще що: чи варто взагалі ставити подібні «домашні завдання»?

У цьому уроці ми створимо простий перемикач шаблонів оформлення за допомогою PHP змінних та CSS.

Існує безліч подібних перемикачів, і кілька разів я вже перекладав уроки на цю тему. Можна змінювати оформлення повністю за допомогою спеціальних PHP скриптів, можна використовувати JavaScript. При цьому скрипти просто змінюють таблиці стилів. А якщо нам необхідно змінити всього кілька стилів на сторінці? Не будемо ми через це створювати кілька різних CSS файлів.

На щастя, є вихід із цієї ситуації. У цьому нам допоможуть PHP змінні, які змінюватимуть деякі рядки в таблиці стилів і відповідно у нас змінюватиметься оформлення.

Насамперед нам необхідно створити PHP файл для змісту нашої сторінки. Ми зробимо його гранично простим, але Ви можете розробити складніші схеми застосування. Зверніть увагу, що таблиця стилів має розширення .php, і знаходиться в папці CSS.


< html >

PHP Variables In CSS Demo
< meta http -equiv="Content -Type" content="text /html; charset = utf-8" />










Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor у reprehenderit в voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.







Я створив трохи контенту з невеликою навігацією, яка дозволить нам змінювати шаблон (у нашому випадку змінюватиметься шапка).

Ми будемо використовувати рядок запиту для того, щоб змінити поточну тему оформлення, передаючи значення імені до того ж PHP файлу. Нам також необхідно, щоб скрипт пам'ятав, яке оформлення ми зараз використовуємо і воно залишалося на всьому сайті.

Вставте наступний код перед вказівкою doctype:

session_start();


$_SESSION["template"] = $_GET["template"];

) elseif (isset($_SESSION["template"])) (
$template = "?template=".$_SESSION["template"];
) else (
$template = "";
}
?>

Отже, ось що цей код робить. Оскільки ми використовуємо сесії, спочатку нам необхідно розпочати сесію. Далі ми перевіряємо, чи не містить рядок запиту значення змінної шаблону. Якщо не містить, ми тоді надаємо змінній сесії значення шаблону. Далі ми створюємо локальну змінну з рядком, який ми додамо до розташування CSS файлу. Вона дозволить нам передати назву шаблону, який ми хочемо використовувати у PHP файл, створювати стилі CSS.

Тепер ми можемо створити перемикач шаблонів. Ми використовуємо цифри 1-3 для ідентифікації потрібного шаблону:

switch theme:
1
2
3

Нам також необхідно змінити розташування PHP файлу, який відповідає за створення CSS.

Тепер ми готові створити файл PHP, який буде відповідати за створення нашого шаблону. Нам необхідно на початку файлу дати знати браузеру, що тут будуть міститися CSS стилі. Допоможе нам у цьому наступний рядок коду:

Header("Content-type: text/css; charset: UTF-8");

Тепер Ви можете просто використовувати цей файл як нормальну таблицю стилів з можливістю вставляти PHP змінні. Це відкриває перед Вами великі можливості не лише зміни зовнішнього вигляду сторінки, а й динамічної заміни вмісту.

Оскільки у нас всього 3 можливі шаблони, нам необхідно переконатися, щоб можна було використовувати лише ці 3 цифри. Якщо хтось у рядку запиту спробує передати інше значення, у нього перед очима відкриється шаблон за замовчуванням (у нашому випадку - це "1").

$numberoftemplates = 3;
if (isset($_GET["template"])) (
$template = $_GET["template"];
if ((!is_numeric($template)) || ($template > $numberoftemplates) || ($template< 0)) {
$ template = 1;
) else (
$ template = round ($ template);
}
) else (
$ template = 1;
}

Тепер ми маємо локальну змінну $template, яка містить номер шаблону для використання. Для ясності можете перевірити це, використовуючи її як коментар до CSS коду:

Echo "/*====== template used: ".$template." ======*/";

Можете після цього звернутися до файлу style.php і побачите у вихідному коді такий напис: “/*====== template used: 1 ======*/”. Якщо звернутися до брайзера до style.php?template=2, тоді буде інше значення.

Оскільки ми не створюємо окремо таблицю стилів для кожного шаблону, достатньо вказати лише різницю між нашими оформленнями в одному файлі. Можемо вписати ці зміни до масиву:

$css = array(
"header-background" => array(
1 => "url(../images/header-bg-1.jpg) no-repeat",
2 => "url(../images/header-bg-2.jpg) no-repeat",
3 => "url(../images/header-bg-3.jpg) no-repeat"
),
"header-h1-colour"=> array(
1 => "#fff",
2 => "#fff",
3 => "#666"
),
"header-h1-font"=> array(
1 => "bold normal 35px Helvetica, Arial, sans-serif",
2 => "bold normal 35px Trebuchet MS, Arial, sans-serif",
3 => "normal normal 35px Georgia, serif"
);

Як Ви бачите, я виділив 3 елементи в масиві кожного CSS селектора.

Тепер у потрібному місці нам достатньо підставити:

Background:;

і в нас, залежно від шаблону, буде різне зображення фону.

Ось все, що необхідно. Використовуйте такі конструкції у всьому файлі. Таким чином, можна замінити безліч різних елементів на сторінці. Повна таблиця стилів:

* {
margin:0;
padding:0;
}
body (
font-size:.8em;
background:#F3F4F9;
font-family:Arial;
text-align:center;
}
# wrap (
width:990px;
margin:0 auto;
text-align: left;
}
#nav (
padding:10px 0;
width:990px;
overflow:auto;
}
#logo (
float:left;
}
# switcher (
float:right;
width:170px;
text-align:right;
padding:45px 20px 0 0;
}
# switcher span (
float:left;
padding:6px 10px 0 0;
}
#switcher a (
display:block;
float:left;
padding:4px 8px;
border:1px solid #ccc;
background: # eee;
margin:0 0 0 2px;
}
#switcher a:hover (
background: #fff;
}
#header (
clear:both;
background:;
height: 206px;
}
#header h1 (
text-align:right;
padding:155px 25px 0 0;
color:;
font:;
}
#col1 (
width:450px;
float:left;
margin:20px 0 0 0;
}
#col2 (
width:450px;
float:right;
margin:20px 0 0 0;
}

Ось і все готове! Насолоджуйтесь!

Ні для кого не секрет, що найбільш поширеним способом взаємодії html-сторінки з сайтом є форма. Форма (тобто html-елемент утворений тегом form) використовується і безкоштовними поштовими службами, електронними магазинами та багатьма іншими типами сайтів.

Обробка простих форм за допомогою PHP не становить жодних труднощів. Однак іноді виникає потреба обробити форму, що містить кілька однотипних полів, при тому, що їх кількість може змінюватися в широкому діапазоні і їх кількість заздалегідь не відома. У PHP передбачено таких випадків обробка однотипних полів як масиву значень.


Розглянемо докладніше варіанти щодо різних типів полів.

Текстові поля

Під текстовими полями в цій статті розуміються елементи, що створюються тегам input зі значенням параметра type рівним text і тегом textarea . Організувати обробку форми, що складається з декількох таких полів, найпростіше. На лістингу нижче наведено листинг із html-розміткою для такої форми.






Як видно з лістингу, імена для елементів форми, з точки зору PHP є елементами масиву. Тому PHP -сценарій, який оброблятиме цю форму, сприйматиме все безліч текстових полів цієї форми як єдиний масив. До окремих елементів можна звертатися за індексами або використовувати перерахування за допомогою команд list і each, як це зроблено в прикладі.

n"; ?>

Перемикачі

Перемикачами (checkbox) у цій статті називаються елементи, створювані тегам input зі значенням параметра type рівним checkbox. Форма для використання змінної кількості перемикачів будується абсолютно так само. Зверніть увагу, що вибір конкретного значення перемикача (тобто значення властивості value) не є важливим. Приклад наведений у лістингу нижче:






Однак, обробка такої форми відрізняється від обробки, описаної для текстових полів. В даному випадку необхідно визначити, увімкнув чи ні відвідувач сайту той чи інший перемикач. Якщо увімкнув – то відповідний елемент масиву існує, якщо ні – то відсутня. У наступному лістингу наведено приклад PHP сценарію, який друкує увімкнені перемикачі:

Радіо-кнопки

Перед тим, як описувати обробку радіо-кнопок, необхідно згадати, як вони працюють. Суть радіо-кнопок (елементи створені тегами input зі значенням параметра type рівним radio) полягає в тому, що, вибираючи одну кнопку, користувач автоматично знімає виділення з іншої кнопки з того ж набору. Кнопки об'єднуються в набір дуже просто: у всіх кнопок у наборі одне й те саме ім'я.

А ось значення (тобто параметри value) у кнопок у наборі різні. І на сайт буде надіслано значення вибраної кнопки з назвою набору. Так само як і у випадку з текстовими полями та перемикачами імена наборів радіокнопок повинні оформлятися як імена елементів масиву в PHP. Приклад такої форми наведено у наступному лістингу:

// перший набір кнопок
// другий набір кнопок
// третій набір кнопок

Обробка радіо-кнопок поєднує ідеї, використання при обробці як текстових полів, так і перемикачів. Якщо автор html-сторінки не встановив значення за замовчуванням, а користувач не вибрав певну кнопку в наборі радіо-кнопок, цей елемент буде відсутній в масиві (як для перемикачів).

Якщо ж кнопка обрана, то відповідний елемент масиву міститиме її значення (як текстових полів). Нижче наведено листинг прикладу, який обробляє форму з кількома наборами радіокнопок.

n"; ?>

Таким чином, нічого складного у обробці складних форм немає.

Найчастіше на Web-сайтах можна зустріти сторінки з розміщеними на них HTML-формами. Веб-форми – зручний спосіб отримання інформації від відвідувачів вашого сайту. Приклад тому – гостьова книга, – яка забезпечує зворотний зв'язок із відвідувачами та розробниками сайту. Форми також зручні і для розробників сайту при розробці CMS, яка дозволяє підтримувати головну властивість сайту - актуальність. Ця стаття присвячена основам створення HTML-форм, їх обробці та способам передачі даних з екранних форм у PHP-сценарії.

1) Створення простої форми

Теги

і
задають початок та кінець форми. Початківець форму тег
містить два атрибути: actionі метод. Атрибут action містить адресу URL сценарію, який має бути викликаний для обробки сценарію. Атрибут методвказує браузеру, який вид HTTP запиту необхідно використовувати для надсилання форми; можливі значення POSTі GET.

Зауваження

Головна відмінність методів POST та GET полягає у способі передачі інформації. У методі GET параметри передаються через рядок адреси, тобто. по суті в HTTP-заголовку запиту, у той час як у методі POST параметри передаються через тіло HTTP-запиту і ніяк не відображаються у вигляді адресного рядка.

$text = nl2br ($_POST ["mytext"]);
?>

Завдання:Нехай необхідно створити список, що випадає, з роками з 2000 по 2050.
Рішення:Необхідно створити HTML форму з елементом SELECT та PHP – сценарій для обробки форми.

Обговорення:

Для початку створимо два файли: form.htmlі action.php. У файлі form.htmlбуде міститися html-форма з списком, що випадає. Причому значення у списку можна вказати двома способами:

I. Введення даних вручну:

ІІ. Введення даних через цикл:

Як видно, другий приклад із циклом, більш компактний. Думаю, не варто наводити скрипт оброблювача даної форми, тому що він обробляється так само як текстове поле, тобто. значення списку можна отримати з суперглобального масиву $_POST.

Опис:

Створимо HTML-форму для надсилання файлу на сервер.




У даній html-формі є елемент browse, який відкриває діалогове вікно, щоб вибрати файл для завантаження на сервер. При натисканні на кнопку "Передати файл"файл передається сценарію-обробнику.

Потім необхідно написати сценарій обробник action.php. Перед написанням обробника необхідно визначитися в який каталог ми копіювати файл:

if(isset($_FILES ["myfile"]))) // Якщо файл існує
{
$catalog = "../image/"; // Наш каталог
if (is_dir ($catalog )) // Якщо такий каталог є
{
$myfile = $_FILES [ "myfile" ][ "tmp_name" ]; // Часовий файл
$myfile_name = $_FILES [ "myfile" ][ "name" ]; // Ім'я файлу
if(! copy ($myfile , $catalog )) echo "Помилка при копіюванні файлу". $myfile_name // Якщо не вдалося скопіювати файл
}
else mkdir ("../image/"); // Якщо такого каталогу немає, ми його створимо
}
?>

Зауваження

Якщо ви довіряєте користувачам закачувати на сервер будь-які файли, потрібно бути гранично обережним. Зловмисники можуть впровадити "нехороший" код у картинку або файл і відправити на сервер. У таких випадках необхідно жорстко контролювати завантаження файлів.

Даний приклад демонструє створення каталогу та копіювання файлу до цього каталогу на сервер.

Також хотів би продемонструвати приклад із елементом checkbox. Цей елемент трохи відрізняється від інших елементів тим, що якщо не один із елементів checkboxЯ не обраний, то суперглобальна змінна $_POSTповерне порожнє значення:


Синій
Чорний
Білий

if (!empty($_POST ["mycolor"])) echo $_POST ["mycolor"]; // Якщо обрано хоч 1 елемент
else echo "Виберіть значення";
?>




Є ще питання чи щось незрозуміло - ласкаво просимо на наш