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

Статус
В этой теме нельзя размещать новые ответы.

Flock

Постоялец
Регистрация
15 Июн 2007
Сообщения
139
Реакции
45
Как написать систему тестов на PHP?

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

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

Подскажите пжалста, хорошо было б пример...
 
знаешь что такое сессии?? - $_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_SERVER, DB_USER, DB_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");
?>

моожешь кстати скачать и почитать, очень много полезных тем для новичков.
 
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(), тоже самое.
 
приведенный кусок кода лежит в test.php?
 
Не, в индекс.пхп. Все работает глупая ошибка была. Переменные были заданы вот так:
PHP:
$_GET['family']=$family; 
$_GET['name']=$name; 
$_GET['grupa']=$grupa;
:)

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

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

Это я вроде как на пальцах объяснил
 
Статичные массивы понятно объяснил. У меня другая проблема немного, нужны ответы хранить.

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

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

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

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


Внимательнее надо читать тему!!! "Тестирование скрипта" и "скрипт тестирования" - абсолютно разные вещи.
 
а есть ли скрипт тестирования или опросов для worpdress как плагин?
 
А поискать на архивах плагинов для wp? Больно на набор постов смахивает :smmne:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху