Лабораторная работа 13 (LAB13 Машеров Д.Е.)

Посмотреть архив целиком

Национальный исследовательский институт

Московский Энергетический Институт (Технический Университет)

Институт автоматики и вычислительной техники

Кафедра Прикладной математики









Лабораторная работа №13

по дисциплине ВМСС

по темам: «Разработка страниц с серверными скриптами: Разработка страниц с формами и элементами управления. Разработка страниц с применением языка PHP»

Выполнил:

Машеров Дмитрий Евгеньевич

Проверил:

к.т.н., доц. Куриленко Иван Евгеньевич













Москва

2012 г.

Оглавление

1. Основные сведения 2

Формы 2

PHP 2

2. Выполнение заданий 3

Страница для тестирования знаний 3

Форма с тестом (knowledge.php): 3

Обработка результатов теста (testResult.php) 5

Функция таймера (JavaScript) 6

Счетчик скачиваний файла. 6

Форма для скачивания (downloadForm.php) 6

Увеличение числа скачиваний (download.php) 6

Регистрация пользователей на сайте 7

Таблица БД 7

Главная старница (knowledgeTest.php) 7

Подключение к базе данных(dbConnect.php) 8

Регистрация пользователя (registration.php) 8

Вход(Файл login.php) 9

Выход(Файл logout.php) 9

Голосование 10

Таблицы БД. 10

Старница с голосованием (polls.php) 10





  1. Основные сведения

Формы

Формы предназначены для обмена данными между пользователем и сервером. Область применения форм не ограничена отправкой данных на сервер, с помощью клиентских скриптов можно получить доступ к любому элементу формы, изменять его и применять по своему усмотрению.

Документ может содержать любое количество форм, но одновременно на сервер может быть отправлена только одна форма. По этой причине данные форм должны быть независимы друг от друга.

Форма устанавливается с помощью тега

. Для отправки формы на сервер используется кнопка Submit, того же можно добиться, если нажать клавишу Enter в пределах формы. Если кнопка Submit отсутствует в форме, клавиша Enter имитирует ее использование, но только в том случае, когда в форме имеется только один элемент . Если таких элементов два и более, нажатие на не вызовет никакого результата.

Когда форма отправляется на сервер, управление данными передается программе, заданной атрибутом action тега . Предварительно браузер подготавливает информацию в виде пары «имя=значение», где имя определяется атрибутом name тега , а значение введено пользователем или установлено в поле формы по умолчанию. Если для отправки данных используется метод GET, то адресная строка может принимать следующий вид.

http://www.htmlbook.ru/cgi-bin/handler.cgi?nick=%C2%E0%ED%FF+%D8%E0%EF%EE%F7%EA%E8%ED&page=5

Параметры перечисляются после вопросительного знака, указанного после адреса CGI-программы и разделяются между собой символом амперсанда (&). Нелатинские символы преобразуются в шестнадцатеричное представление (в форме %HH, где HH — шестнадцатеричный код для значения ASCII-символа), пробел заменяется на плюс (+).

Допускается внутрь контейнера помещать другие теги, при этом сама форма никак не отображается на веб-странице, видны только ее элементы и результаты вложенных

Все данные из HTML-формы в PHP сценарий обрабатываются с помощью суперглобальных массивов $_POST или $_GET, в зависимости от указанного в атрибуте method метода передачи данных.

PHP

PHP — скриптовый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.

  1. Выполнение заданий

Страница для тестирования знаний

Разработать страницу для тестирования знаний (страницы содержат вопросы и варианты ответов, есть таймер для ограничения времени ответа).

Форма с тестом (knowledge.php):

<div class="head">

<div class="center">

Тест по русскому языку:

div>

<form id="Test" action="testResults.php" method="POST" name="test">

<div id="countDown" onload="countDown();">

div>

<ol>

<li>

Часть речи, являющееся наименованием предмета, субъекта, живого существа - это

<div>

<label>

<input name="q1" type="radio" value="true"/>Глагол

label>

div>

<div>

<label>

<input name="q1" type="radio" value="false"/>Существительное

label>

div>

<div>

<label>

<input name="q1" type="radio" value="false"/>Наречие

label>

div>

<div>

<label>

<input name="q1" type="radio" value="false"/>Междометие

label>

div>

li>

<li>

Укажите пример с ошибкой в образовании формы слова.

<div>

<label>

<input name="q2" type="radio" value="true"/>Cемьюстами пятидесяти пяти шутками

label>

div>

<div>

<label>

<input name="q2" type="radio" value="false"/>Высочайший

label>

div>

<div>

<label>

<input name="q2" type="radio" value="false"/>Шесть грузин

label>

div>

<div>

<label>

<input name="q2" type="radio" value="false"/>Вкусные торты

label>

div>

li>

<li>

Какое из нижеперечисленных словосочетаний является союзом?

<div>

<label>

<input name="q3" type="radio" value="true"/>Как будто

label>

div>

<div>

<label>

<input name="q3" type="radio" value="false"/>Лишь бы

label>

div>

<div>

<label>

<input name="q3" type="radio" value="false"/>В продолжение

label>

div>

<div>

<label>

<input name="q3" type="radio" value="false"/>Не спеша

label>

div>

li>


<li>

В каких словах пишется две буквы Н?

<div>

<label>

<input name="q4[]" type="checkbox" value="true"/>Моще(н)ая булыжником дорога

label>

div>

<div>

<label>

<input name="q4[]" type="checkbox" value="false"/>Краше(н)ый пол

label>

div>

<div>

<label>

<input name="q4[]" type="checkbox" value="false"/>Мы увере(н)ы в победе

label>

div>

<div>

<label>

<input name="q4[]" type="checkbox" value="false"/>Жёва(н)ый

label>

div>

<div>

<label>

<input name="q4[]" type="checkbox" value="true"/>Рифмова(нн)ый

label>

div>

li>


<li>

Укажите варианты, в котором правильно указаны все примеры, где на месте пропуска пишется Ь.

<div>

<label>

<input name="q5[]" type="checkbox" value="false"/>Старик только шевелит губами и крестит_ся, отец же громко шепчет и конец каждой молитвы произносит вслух и отчётливо.

label>

div>

<div>

<label>

<input name="q5[]" type="checkbox" value="false"/>Машинист и его помощ_ник, люди очень хладнокровные и равнодушные, делают какие-т непонятные движения и не спешат.

label>

div>

<div>

<label>

<input name="q5[]" type="checkbox" value="true"/>На другой день утром к следователю был приведён из Кляузовки молодой парень с большой головой и заяч_ей губой.

label>

div>

<div>

<label>

<input name="q5[]" type="checkbox" value="true"/>Юноша ни на минуту не мог отделат_ся от странного, неприятного чувства.

label>

div>

li>


<input type="submit" value="Проверить"/>

ol>

form>

div>


Обработка результатов теста (testResult.php)

php

session_start();

if (!isset($_SESSION['id']))

header('Location: knowledgeTest.php');

$questionnumber ="q";

$rightAnswerNumber = 0;


for ($i=1;$i<=3;$i++)

{

$questionnumber ="q".$i;

if(isset($_POST[$questionnumber]) && $_POST[$questionnumber] == "true")

{

$rightAnswerNumber++;

}

}

for ($i=4;$i<=5;$i++)

{

$questionnumber ="q".$i;

if(isset($_POST[$questionnumber]) && (!in_array("false", $_POST[$questionnumber])))

{

if ( count($_POST[$questionnumber]) == 2)

$rightAnswerNumber++;

}

}

echo "

Ваш результат: ".$rightAnswerNumber."
";

echo 'Вернуться'

?>



Функция таймера (JavaScript)

function countDown(count){

document.getElementById('countDown').innerHTML = "Таймер: " + count;

if (count == 0)

{

document.getElementById('countDown').innerHTML = "Время закончилось";

document.getElementById('Test').innerHTML = '<input type="submit" value="Проверить"/>';

return;

}

count = count-1;

t = setTimeout(function () {countDown(count);}, 1000);

}



Счетчик скачиваний файла.

Был создан текстовый файл filecount.txt для хранения числа скачиваний.

Форма для скачивания (downloadForm.php)

php

$handle = fopen("filecount.txt", "r");

$count = fread($handle, filesize("filecount.txt"));

echo '<div id="count">Количество скачек картинки: '.$count.'div>';


echo "<div>

<img src='pics/stickman.gif' alt='GIF Animation'>

div>";

echo '<div><a href="download.php">Скачать гифкуa>div><br/>';

?>

Увеличение числа скачиваний (download.php)

php

$handle = fopen("filecount.txt", "r+");

$count = fread($handle, filesize("filecount.txt"));

fseek($handle, 0);

fwrite($handle, $count+1);


$file = ("files/stickman.gif");

header ("Content-Type: application/octet-stream");


header ("Accept-Ranges: bytes");


header ("Content-Length: ".filesize($file));


header ("Content-Disposition: attachment; filename=".$file);


readfile($file);

?>

Регистрация пользователей на сайте

Вид страницы для не вошедшего на сайт пользователя:

Вид страницы для вошедшего на сайт пользователя:

Вид страницы для регистрации:

Таблица БД

users

  • Id

  • Name

  • Password

Пароль сохраняется в базу данных в зашифрованном с помощью алгоритма md5 виде.

Главная старница (knowledgeTest.php)

. . .

if (!isset($_SESSION['name']))

{

echo '<div>Войдите,чтобы пройти тестa>div>';

include_once 'login.php';

echo '<div><a href="registration.html">Зарегистрироватьсяa>div>';

}

else

{

echo "<div class='Greetings'><div>Привет, {$_SESSION['name']}!div>";

echo '<div><a href="logout.php">Выйтиa>div>div>';

include_once 'downloadForm.php';

include_once 'polls.php';

. . .

Подключение к базе данных(dbConnect.php)

php

$db = mysql_connect('localhost', 'root', 'winducom74');

if (!$db) {

die('Could not connect: ' . mysql_error());

}

mysql_select_db('site', $db);


?>



Регистрация пользователя (registration.php)

php

$name = $_POST['name'];

$password = md5($_POST['password']);

$errors = '';


if (empty($name))

{

$errors .= '

Введите имя
';

}

if (empty($_POST['password']))

{

$errors .= '

Введите пароль
';

}


include_once 'dbConnect.php';


$query = "select id from users where name='{$name}'";

$result = mysql_query($query);

if (mysql_num_rows($result) != 0)

$errors .= "

Пользователь с таким именем уже существует
";


if (empty($errors))

{

$query = "INSERT INTO `users` (`name`, `password`) VALUES ('$name', '$password')";

if (!mysql_query($query))

$errors .= "

Не удалось зарегистрировать
";

}

if (empty($errors))

{

echo"<div>

Регистрация завершена

div>

<div>

Ваше имя на сайте: $name

div>

<div>

Ваш пароль: {$_POST["password"]}

div>;

<a href='knowledgeTest.php'>Перейти на страницу с тестомa>";

session_start();

$_SESSION['name'] = $_POST['name'];

$_SESSION['id'] = mysql_insert_id();

echo $_SESSION['name'];

echo $_SESSION['id'];

header('Location: knowledgeTest.php');

}

else

{

echo $errors;

}

mysql_close($db);

echo "body>html>";

?>

Вход(Файл login.php)

php

if(!empty($_POST['name'])&&!empty($_POST['password']))

{

include_once 'dbConnect.php';

$password = md5($_POST['password']);

$query = "SELECT id FROM users WHERE name='{$_POST['name']}' AND password='{$password}'";

$result = mysql_query($query);

if (mysql_num_rows($result) == 0)

$wrong = "<div> Неверно указаны имя или парольdiv>";

else

{

session_start();

$_SESSION['name'] = $_POST['name'];

$_SESSION['id'] = mysql_result($result, 0);

header('Location: knowledgeTest.php');

}

}

if (isset($wrong))

echo $wrong;

echo "<form action='login.php' method='POST' name='logForm'>

<div>

Имя:

<input name='name' type='text' >

div>

<div>

Пароль:

<input name='password' type='text' >

div>

<input type='submit' value='Войти''>

form>

div>";

?>

Выход(Файл logout.php)

php

session_start();

session_unset();

header('Location: knowledgeTest.php');

?>




Голосование

Таблицы БД.

poll_questions

  • questionID

  • Text

poll_answers

  • poll_answers

  • Text

  • questioned

polls

  • questionID

  • userID

  • answerID

Старница с голосованием (polls.php)



php

include_once 'dbConnect.php';

$voting = false;

$revote = false;

if (!isset($_SESSION['id'])) // Неизвестный пользователь

{

echo "

Вы должны войти на сайт чтоб голосовать
";

}

else

{

if (isset($_POST['revote'])) // Пользователь решил переголосовать

{

$query = "DELETE FROM `polls` WHERE `userID`='{$_SESSION['id']}';";

$result = mysql_query($query);

$voting = true;

}

elseif (isset($_POST['vote'],$_POST['questionID'])) // Пользователь голосует

{

$query = "INSERT INTO `polls` (`questionID`, `userID`, `answerID`) VALUES ({$_POST['questionID']}, {$_SESSION['id']}, {$_POST['vote']})";

$result = mysql_query($query);

$revote = true;

}

else

{

// Проверка голосовал ли пользователь

$query = "select userid

from polls

where userID={$_SESSION['id']}";

$result = mysql_query($query);

if(mysql_num_rows($result) == 0)

$voting = true;

else

$revote = true;

}

}

echo '

Опросы:
';

echo '

    ';



    $query = "select questionID,Text from poll_questions";

    $questions = mysql_query($query);

    while ($question = mysql_fetch_assoc($questions)) {

    echo '

  • '.$question['Text'].'
  • ';


    $query = "select poll_answers.answerID,poll_answers.Text,count(polls.answerID) as count

    from poll_answers

    left OUTER join polls on poll_answers.answerID = polls.answerID

    where poll_answers.questionID ='{$question['questionID']}'

    group by poll_answers.answerID";

    $answers = mysql_query($query);

    if ($voting === true)

    echo "";

    else

    {

    echo '

      ';

      }

      while ($row = mysql_fetch_assoc($answers)) {

      if ($voting === true)

      {

      echo "".$row['Text'].'
      '
      ;

      echo $row['count'].'
      '
      ;

      }

      else

      {

      echo '

    • '.$row['Text'].'
      '
      ;

      echo $row['count'].'

    • ';

      }

      }

      if ($voting === true)

      {

      echo "";

      echo "";

      echo '';

      }

      else

      echo "

    ";

    if ($revote == true)

    {

    echo "<form action='knowledgeTest.php' method='POST' name='revote'>

    <input type='submit' name ='revote' value='Переголосовать'>

    form>";

    }

    }


    echo 'ul>';

    ?>





Случайные файлы

Файл
ref-15824.DOC
4.DOC
80104.doc
737.doc
28015.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.