Главная страница
Навигация по странице:

  • Реализация теста посредством радиокнопок

  • А как же… Реализация теста посредством чекбоксов “в лоб”

  • Пример 7 (специально с ошибкой)

  • Пример 12 Ключ Значение

  • Лекция  же именем. Но только имя это не простое, а… нет, не золотое, но особенное. Оно имеет вид $OR[]. Посмотрите на соответствующий пример

  • Основы web-программирования. Лекции 14 Сергей Львович Островский


    Скачать 1.82 Mb.
    НазваниеЛекции 14 Сергей Львович Островский
    Дата21.01.2019
    Размер1.82 Mb.
    Формат файлаpdf
    Имя файлаОсновы web-программирования.pdf
    ТипЛекции
    #64660
    страница10 из 11
    1   2   3   4   5   6   7   8   9   10   11
    1   2   3   4   5   6   7   8   9   10   11

    Таблица истинности логической операции операции "И"















      0 1
    0

    1




    
    Лекция 
    Результат работы этого скрипта показан на рис. 5.
    Рис. 5
    Как видите, все работает. Но! Взгляните-ка на рис. 6. Для пользователя не составляет никакого труда добраться до исходного кода скрипта!
    Рис. 6
    Конечно, можно применять массу ухищрений, прятать код и т.п. Но в любом случае, если речь идет не об “игру- шечных”, а о серьезных тестах, проверять их нужно именно на стороне сервера, поскольку только в этом случае у пользователя нет возможности ни добраться до исходного кода/правильных ответов, ни вмешаться в работу про- веряющей программы.
    Реализация теста посредством радиокнопок
    Таблица истинности конъюнкции хороша тем, что ее можно просто реализовать и посредством радиокнопок.
    Пользователь должен будет просто отметить единственное истинное значение в таблице (хотя это, конечно, уже серьезная подсказка ).
    Рис. 7

    
    ФОрмы Приятные и ПОЛезные: ОбрабОтка ФОрм на СтОрОне Сервера
    Сам тест на радиокнопках разместим в файле testANDradio.htm, а обработчик — в файле testANDradio.php.
    Код теста:


    Таблица истинности логической операции операции "И"















      0 1
    0

    1



    Результат теста


    Вы заполнили таблицу следующим образом:













      0 1
    0

    1



    
    Лекция 
    Как видите, здесь снова используется условная операция. В переменной
    $AND
    (напомним, что PHP-язык регистрово- зависимый, поэтому можно не опасаться такого названия переменной) передается значение value выбранной кнопки группы. Скрипт анализирует это значение и помещает его в таблицу. (Внимание! Если ни одна из кнопок не будет выбра- на, возникнет ошибка. От нее вам предстоит избавиться самостоятельно, выполняя задания к лекции.)
    А как же… Реализация теста посредством чекбоксов “в лоб”
    Мы ловко реализовали таблицу истинности конъюнкции на радиокнопках, но это, конечно, несколько искусствен- ный вариант. Реализовывать на радиокнопках дизъюнкцию уже очень неудобно (попробуйте ). Ну, можно, конечно, отмечать ложное значение, но это как-то… “криво”. Естественный вариант — флажки. Например, так (см. рис. 8):
    Рис. 8
    Однако с флажками не все так просто. Впрочем, сначала реализуем этот вариант “в лоб”. В файле testORcheckbox.htm разместим тест, а в файле testORcheckbox.php — обработчик.
    Тест:


    Таблица истинности логической операции операции "ИЛИ"















      0 1
    0

    1



    Результат теста



    
    ФОрмы Приятные и ПОЛезные: ОбрабОтка ФОрм на СтОрОне Сервера
    Вы заполнили таблицу следующим образом:













      0 1
    0

    1



    0
    Лекция 
    Исходный код
    Результат выполнения
    Комментарии и пояснения
    echo "

    Пример 2

    ";
    $arr2=array(0=>1,1=>2,2=>3,
    3=>4,4=>5);
    echo "
    ";
    print_r($arr2);
    echo "
    ";
    Пример 2
    Array
    (
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    )
    Этот пример отличается от первого лишь явным заданием значений ключей echo "

    Пример 3

    ";
    $arr3=array(2=>1,0=>2,3=>3,
    4=>4,10=>5);
    echo "
    ";
    print_r($arr3);
    echo "
    ";
    Пример 3
    Array
    (
    [2] => 1
    [0] => 2
    [3] => 3
    [4] => 4
    [10] => 5
    )
    Начинаем знакомиться с “чудесами”. Ви- дим, что ключи, как и было обещано, вов- се не обязаны идти подряд echo "

    Пример 4

    ";
    $arr4[0]=array(1,2,4);
    $arr4[1]=array(4,5,6);
    $arr4[2]=array(7,8,9);
    echo "
    ";
    print_r($arr4);
    echo "
    ";
    Пример 4
    Array
    (
    [0] => Array
    (
    [0] => 1
    [1] => 2
    [2] => 4
    )
    [1] => Array
    (
    [0] => 4
    [1] => 5
    [2] => 6
    )
    [2] => Array
    (
    [0] => 7
    [1] => 8
    [2] => 9
    )
    )
    Вариант организации двумерного мас- сива. Ключами являются числа, значе- ниями — массивы echo "

    Пример 5

    ";
    $arr5=array("abc"=>1,0=>2,
    "#ffffff"=>3,4=>4,"Петя"=>5);
    echo "
    ";
    print_r($arr5);
    echo "
    ";
    Пример 5
    Array
    (
    [abc] => 1
    [0] => 2
    [#ffffff] => 3
    [4] => 4
    [Петя] => 5
    )
    Смешанные ключи — числа и строки echo "

    Пример 6

    ";
    $arr6[0]=array(1,"Петя",true);
    $arr6["Маша"]="Вася";
    $arr6[5]=array(7,8,3.14); echo "
    ";
    print_r($arr6);
    echo "
    ";
    Пример 6
    Array
    (
    [0] => Array
    (
    [0] => 1
    [1] => Петя
    [2] => 1
    )
    [Маша] => Вася
    [5] => Array
    (
    [0] => 7
    [1] => 8
    [2] => 3.14
    )
    )
    Идейно этот пример не отличается от предыдущих. Только здесь еще больше вариантов

    1
    ФОрмы Приятные и ПОЛезные: ОбрабОтка ФОрм на СтОрОне Сервера
    Исходный код
    Результат выполнения
    Комментарии и пояснения
    echo "

    Пример 7
    (специально с ошибкой)

    ";
    echo "
    ";
    echo $arr6[1];
    echo "
    ";
    Пример 7
    (специально с ошибкой)
    Notice: Undefined offset: 1 in Q:\home\
    forms\www\arrays.php
    Чтобы увидеть представленное здесь со- общение об ошибке, необходимо подна- строить Denwer. Сделайте следующее:
    1. Остановите Denwer.
    2. Найдите файл /usr/local/php5/php.ini
    (вы уже делали это на прошлом занятии).
    3. Измените строку 305.
    Вместо error_reporting = E_ALL &
    E_NOTICE
    оставьте error_reporting = E_ALL
    Таким образом вы включите предуп- реждения. После этого снова запустите
    Denwer.
    Что касается смысла ошибки, то он прос- той: в предыдущем примере мы не задали значение элемента массива с ключом 1.
    Вот нам об этом и говорят echo "

    Пример 8

    ";
    $arr8[1][1]=3.14;
    echo "
    ";
    echo $arr8[1][1]."
    ";
    print_r($arr8);
    echo "
    ";
    Пример 8
    3.14
    Array
    (
    [1] => Array
    (
    [1] => 3.14
    )
    )
    Ничего нового. Просто показано, что можно сразу присваивать значения эле- ментам “двумерных массивов”
    echo "

    Пример 9

    ";
    $arr9[]=3.14;
    $arr9[]=32767;
    $arr9[]="php";
    echo "
    ";
    print_r($arr9);
    echo "
    ";
    Пример 9
    Array
    (
    [0] => 3.14
    [1] => 32767
    [2] => php
    )
    Наиважнейший пример! Он демон- стрирует, что если присваивать значения элементам массива без явного указания ключей, элементы будут нумероваться подряд автоматически. Эта возможность активно используется как раз при обра- ботке чекбоксов echo "

    Пример 10

    ";
    echo "
    ";
    foreach ($arr9 as $elem) echo "$elem
    ";
    echo "
    ";
    for ($i=0;$i echo "$arr9[$i]
    ";
    Пример 10
    3.14 32767
    php
    3.14 32767
    php
    В этом примере показаны два способа об- хода массива. Второй — традиционный
    (надо лишь запомнить, что функция count возвращает количество элементов в мас- сиве). Традиционный способ можно при- менять далеко не всегда. В частности, его нельзя использовать в массивах, в которых ключи не образуют упорядоченную после- довательность. Тогда остается только цикл foreach. Это специальный цикл, который позволяет перебрать элементы произволь- ного массива. На каждом шаге цикла из- влекается значение очередного элемента echo "

    Пример 11

    ";
    echo "
    ";
    foreach ($arr5 as $elem) echo "$elem
    ";
    Пример 11
    1 2
    3 4
    5
    Здесь это показано как раз применитель- но к неупорядоченному массиву $arr5
    (см. пример 5)
    echo "

    Пример 12

    ";
    echo "

    ";
    foreach ($arr5 as $key=>$value) echo "
    ";
    echo "
    КлючЗначение
    $key$value
    ";
    Пример 12
    Ключ
    Значение
    abc
    1 0
    2
    #ffffff
    3 4
    4
    Петя
    5
    Последний пример показывает, что foreach умеет извлекать не только зна- чения элементов, но и ключи
    Реализация теста посредством чекбоксов с использованием массивов
    Воспользуемся приемом, показанным в примере 9. Назовем все поля, соответствующие чекбоксам, одним и тем

    2
    Лекция 
    же именем. Но только имя это не простое, а… нет, не золотое, но особенное. Оно имеет вид
    $OR[]
    . Посмотрите на соответствующий пример:




    написать администратору сайта