02. Форми

02. Форми

Форми

Основния таг е form и има няколко атрибута.

<form method="get" action="/url_to_handle_the_request">
  <!--- ... --->
</form>

Изпраща GET заявка към http://localhost/url_to_handle_the_request

Method

Пример за форма

<form method="post" action="">
  <label for="title">Заглавие</label>
  <input type="text" name="title" id="title">
  <input type="submit" value="Запази">
</form>

Полета

<form type="post" action="/save_course">
  <input type="text" name="prepopulated" value="Текстово поле">
  <input type="text" name="title" placeholder="Заглавие">
  <input type="email" name="email_field">
  <input type="number" name="number_field">
  <input type="password" name="password_field">
  <input type="url" name="url_field">
  <input type="hidden" value="предварителнозададено" name="hidden_field">
</form>

Полета

<form>
  <label for="group">Група</label>
  <select name="select" id="group" name="group">
    <option value="value1">ОКН</option>
    <option value="value2" selected>ЯКН</option>
    <option value="value3">ПМ</option>
  </select>
  <textarea name="textarea" rows="10" cols="50" name="description">Описнаие</textarea>
</form>

Полета

<form>
  <p>
    <input type="checkbox" id="homeworks" value="homeworks">
    <label for="homeworks">Домашни</label>
  </p>
  <p>
    <input type="checkbox" id="exam" value="exam" checked="checked">
    <label for="exam">Устен изпит</label>
  </p>
</form>

Обработка на GET заявки

Обработка на GET заявки

http://localhost/?name=Misho

<?php
echo 'Welcome '.htmlentities($_GET["name"]).'!';
?>
GET /index.php?name=Misho HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: 127.0.0.1
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

Обработка на POST заявки

Обработка на POST заявки

<?php
echo 'Welcome '.htmlentities($_POST["name"]).'!';
?>
POST /index.php HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

title=WebGL&credits=6&group=3

Добавяне на курсове

Искаме да направим форма за добавяне на специалност и създаваме файл resources/templates/add_course.hbs

<!DOCTYPE html>
<html>
<head>
  <title>Добавяне на курс</title>
  <meta charset="utf-8">
</head>
<body>
  <h1>Добавяне на курс</h1>
  <form method="post" action="/add_course.php">
    <!--- ... --->
  </form>
</body>
</html>

Добавяне на курсове

<label for="title">Заглавие</title>
<input type="text" name="title" id="title">
<!--- ... --->
<input type="submit" value="Добави">

Добавете всички полета които са нужни за описане на курс.

Обаботка на формуляр

<?php
  $clean_data = array();
  $errors = array();

  if ($_POST) {
    $input_title = $_POST['title'];
    if ($input_title && strlen($input_title) < 150) {
      $clean_data['title'] = $title;
    } else {
      $errors['title'] = 'Името е задължително поле с максимална дължина 150 символа.'
    }
  }

Валидация в големи проекти

<?php
class Elective extends CActiveRecord {
  public function rules()
  {
    return array(
      array('title, lecturer, status', 'required'),
      array('title', 'length', 'max'=>128),
      array('lecturer', 'length', 'max'=>150),
      array('status', 'in', 'range'=>array(1,2,3)),
    );
  }
}

Задача

Направете форма за добавяне на избираеми дисциплини и сървърна част, която да показва, валидира и записва формата. Тя трябва да съдържа:

Всяко поле трябва да отговаря на посочения тип и да има валидация по зададените правила.

Вашето решение трябва да представлява архив на проекта с всички необходими файлове в него.