1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Скрипт тестирования

Тема в разделе "Web Coding", создана пользователем Flock, 18 янв 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Flock

    Flock Постоялец

    Регистр.:
    16 июн 2007
    Сообщения:
    142
    Симпатии:
    44
    Как написать систему тестов на PHP?

    Сделал страничку, бд. Проверят на существование уже проходивших тест.

    Не могу догадаться как реализовать сам скрипт тестов,
    Чтобы пользователь выбирал(radiobutton) 3 ответа, потом сохранять это значение в массив, следущий вопрос.
    Как сохранить массив на протяжении теста и ответы менять?

    Подскажите пжалста, хорошо было б пример...
     
  2. Dogmat

    Dogmat Постоялец

    Регистр.:
    16 фев 2007
    Сообщения:
    122
    Симпатии:
    38
    знаешь что такое сессии?? - $_SESSION

    вот их и используй их для временного хранения данных между выполнениями скриптов.

    для надежности используй собственные обработчики сессий.
    которые регистрируются функцией session_set_save_handler

    для качества используй дополнительно класс для обработки сессий

    довольно старый пример из журнала phpInside
    PHP:
    <?php
    ini_set
    ("session.gc_probability"100); // "Собираем мусор" при каждом
                                            // обращении к функциям обработки сессий

    // database connection info:
    define('DB_SERVER',   'localhost');
    define('DB_DATABASE''session_data');
    define('DB_USER',     'session');
    define('DB_PASS',     '');

    class 
    SessionHandler
    {
      function 
    sess_open($save_path$session_name)
      {
        
    // ignore the PHP values for path & name
        // allocate a database connection:
        
    global $SESSION_DB_RESOURCE;  // note: can't use a member variable because the
                                      //       methods are called statically
                                      
        
    $SESSION_DB_RESOURCE mysql_connect(DB_SERVERDB_USERDB_PASS) or die("Can't connect to DB");
        
    mysql_select_db(DB_DATABASE$SESSION_DB_RESOURCE) or die("Can't select database");
        return 
    true;
      }

      function 
    sess_close()
      {
        global 
    $SESSION_DB_RESOURCE;
        if (
    is_resource($SESSION_DB_RESOURCE))
        {
          return 
    mysql_close($SESSION_DB_RESOURCE);
        }
        else
        {
          return 
    true;
        }
      }

      function 
    sess_read($id)
      {
        global 
    $SESSION_DB_RESOURCE;
        
    // get session data:
        
    $sql "
          SELECT
            session_data
          FROM
            sessions
          WHERE
            session_key = '
    $id'
            AND
            valid       = 'yes'
        "
    ;
        
    $query mysql_query($sql$SESSION_DB_RESOURCE) or die("Query failed");
        
    $row   mysql_fetch_row($query);
        return 
    $row[0];
      }

      function 
    sess_write($id$sess_data)
      {
        global 
    $SESSION_DB_RESOURCE;
        
    $sql "
          SELECT
            session_id
          FROM
            sessions
          WHERE
            session_key = '
    $id'
            AND
            valid       = 'yes'
        "
    ;
        
    $query mysql_query($sql$SESSION_DB_RESOURCE) or die("Query failed");
        if (
    mysql_num_rows($query))
        {
          
    // session exists: update
          
    $row        mysql_fetch_row($query) or die("Can't fetch row");
          
    $session_id $row[0];
          
    $sql "
            UPDATE
              sessions
            SET
              session_data = '"
    mysql_escape_string($sess_data) ."',
              create_ts    = now()
            WHERE
              session_id   = 
    $session_id
          "
    ;
        }
        else
        {
          
    // session does not exist: insert
          
    $sql "
            INSERT
            INTO
              sessions
              (
                create_ts,
                valid,
                session_key,
                session_data
                )
              VALUES
                (
                  now(),
                  'yes',
                  '"
    mysql_escape_string($id) ."',
                  '"
    mysql_escape_string($sess_data) ."'
                )
          "
    ;
        }
        
    $writeQ mysql_query($sql$SESSION_DB_RESOURCE) or die("Write query failed");
        return 
    true;
      }

      function 
    sess_destroy($id)
      {
        global 
    $SESSION_DB_RESOURCE;
        
    $sql "
          UPDATE
            sessions
          SET
            valid = 'no'
          WHERE
            session_key = '
    $id'
        "
    ;
        
    $destroyQ mysql_query($sql$SESSION_DB_RESOURCE) or die("Destroy query failed");
        return 
    true;
      }

      function 
    sess_gc($maxlifetime)
      {
        global 
    $SESSION_DB_RESOURCE;
        
    // invalidate any sessions older than $maxlifetime seconds old
        
    $sql "
          UPDATE
            sessions
          SET
            valid = 'no'
          WHERE
            valid = 'yes'
            AND
            create_ts < DATE_ADD(now(), INTERVAL -
    $maxlifetime SECOND)
        "
    ;
        
    $gcQ mysql_query($sql$SESSION_DB_RESOURCE) or die("Garbage collection query failed");
        return 
    true;
      }
    }

    session_set_save_handler(
      array(
    "SessionHandler""sess_open"),
      array(
    "SessionHandler""sess_close"),
      array(
    "SessionHandler""sess_read"),
      array(
    "SessionHandler""sess_write"),
      array(
    "SessionHandler""sess_destroy"),
      array(
    "SessionHandler""sess_gc")
    ) or die(
    "Failed to register session handler");
    ?>
    моожешь кстати скачать и почитать, очень много полезных тем для новичков.
     
    Flock нравится это.
  3. Flock

    Flock Постоялец

    Регистр.:
    16 июн 2007
    Сообщения:
    142
    Симпатии:
    44
    PHP:
    if(isset($_GET['family']) && isset($_GET['name']) && isset($_GET['grupa']))
    {
        
    $family=$_GET['family'];
        
    $name=$_GET['name'];
        
    $grupa=$_GET['grupa'];

         
    $er=false;

    if(
    preg_match("/[А-я\s]+/",$family) == 0)
    {
       
    $er=true;
    }
    if(
    preg_match("/[А-я\s]+/",$name) == 0)
    {
       
    $er=true;
    }

    if(
    preg_match("/[0-9-]+/",$grupa) == 0)
    {
       
    $er=true;
    }

    if(
    $er)
    {
       
    $_SESSION['err_f']=$family;
       
    $_SESSION['err_n']=$name;
       
    $_SESSION['err_g']=$grupa;
                
    echo 
    "<script type='text/javascript'>
    document.location.href = 'error.php?p=error&"
    .session_name().'='.session_id()."';
    </script>"
    ;
    }
    else
    {
      echo 
    "<script type='text/javascript'>
      document.location.href = 'test.php?action=start&"
    .session_name().'='.session_id()."';
    </script>"
    ;
    }
    Еще один вопрос, скрипт как видно проверяет переменные на существование, затем проверяет их на регулярное выражение и устанавливать переменную $er в истина, если нет сходства.

    Затем идет ридерект на скрипт обработки ошибки или на скрипт начала теста, если нет ошибок.

    Ввожу данные:

    Иванов (подходит по первому regexp)
    Иван(тоже)
    93-03(тоже)

    Проблема в том, что всегда ридеректит на скрипт обработки ошибок. Пробовал еще функцию header(), тоже самое.
     
  4. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    приведенный кусок кода лежит в test.php?
     
  5. Flock

    Flock Постоялец

    Регистр.:
    16 июн 2007
    Сообщения:
    142
    Симпатии:
    44
    Не, в индекс.пхп. Все работает глупая ошибка была. Переменные были заданы вот так:
    PHP:
    $_GET['family']=$family
    $_GET['name']=$name
    $_GET['grupa']=$grupa;
    :)

    Еще вопрос: Как массив в сессии сохранить и вообще допустимо такое действие...?
     
  6. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    Как и любое другое значение. $_SESSION['ключ'] = $a, где $a - твой массив. Проблемы "как сохранить" не существует, т.к. после создания сесии массив $_SESSION есть просто оботражение данных из временного файла в массив. После session_start() в $_SESSION заносится все, чтобы было ранее сохранено в соответствующем этой сесси файле. Если делаешь присваиваение $_SESSION['x'] = $x, в файл сессии дописывается соответственная пара ключ 'x', значение $x.

    Это я вроде как на пальцах объяснил
     
    Flock нравится это.
  7. Flock

    Flock Постоялец

    Регистр.:
    16 июн 2007
    Сообщения:
    142
    Симпатии:
    44
    Статичные массивы понятно объяснил. У меня другая проблема немного, нужны ответы хранить.

    Есть submit, три radiobutton. Выбираешь ответ, кликаешь на сабмит. После клика сл..вопрос, как эти ответы сохранить...что-то долго мучился ничего не получилось.., а лучше сразу в массив добавлять и присваивать переменной в сессии. Но так не выходит.

    Пока писал пост, придумал как можно это сделать...просто ответы хранить как строку, потом разбить ее на запятые...можь конечно...как-то не очень...круто, но работает.:)

    PHP:
    $_SESSION['balls']=$_SESSION['balls']."".$_SESSION['ball'].","// ball  - текущий ответ, balls - все.
     
  8. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    http://rit2007.ru/org.html

    http://rit2007.ru/paper_view.html?id=1145

    Рекомендую посмотреть.


    Внимательнее надо читать тему!!! "Тестирование скрипта" и "скрипт тестирования" - абсолютно разные вещи.
     
    moontm нравится это.
  9. slavakim

    slavakim Прохожие

    а есть ли скрипт тестирования или опросов для worpdress как плагин?
     
  10. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    А поискать на архивах плагинов для wp? Больно на набор постов смахивает :smmne:
     
Статус темы:
Закрыта.