Добрый день. Можно ли как-то сохранять данные, введенные пользователем, в базу данных или текстовый файл? Например, если пользователь в анкете или тесте указал имя, возраст, прошел какой-то тест и т.д. И по нажатию на кнопку введенные данные и результат обработки этих данных (результат тестирования) писались в базу.
Комментарии
Можно.
Прошу прощения за, возможно, глупый вопрос, но как создать в Друпале базу для этого? Базу с единственной таблицей для хранения результатов теста, которую может посмотреть админ.
Конечно можно.
И в базу можно,и в файл.
А как? Есть какой-то модуль? Или писать придется? Мне нужен тест, где помимо вопросов (вопрос и несколько вариантов в виде радиокнопок) заполняется еще личная информация. У меня уже есть джаваскрипты, которые обрабатывают значения радиокнопок и считают характеристику (обычная строка) в зависимости от суммы баллов. Нужно личную информацию и полученную характеристику записать в базу.
Друпал вообще то и так работает с БД.
Создай в ней таблицу.
Если хочешь-пиши свой модуль.Вот примерно так.(можешь здесь исходник скачать,если начать трудно) Тут смотри более детально,в частности тебе понадобятся Form API и DataBase API.
если не судьба-то извращаться с готовыми модулями..подстраивать и подправлять их под то,что тебе нужно..
Спасибо за ссылки. Мне интересен способ создания таких таблиц - это можно сделать только кодом или через интерфейс какой-нибудь тоже можно? И можно ли обращаться к этой таблице из других модулей? И как можно посмотреть ее содержимое, где она физически располагается?
hook_schema
phpmyadmin если база mysql
Спасибо. А я могу создать эту таблицу в phpmyadmin и использовать ее везде, где захочу? Например, выбрать в basic page режим теста php code и обращаться к ней в коде? А не только в модуле.
ну можно конечно, работать будет, но это не совсем корректно.
Идея такова что друпал управляет сайтом и соответственно его таблицами в БД.
Модуль устанавливается - таблица создается, деинсталируется - таблица удаляется. Так правильно.
Ну эту таблицу не нужно в общем-то удалять - она будет нужна для статистики: пользователь проходит тест - результаты заносятся в базу, админ может их посмотреть. Она не будет напрямую связана с модулями.
а почему бы просто не использовать Webform? или не подходит?
Не подходит, т.к. там нет обработки результатов. Я использую [module=personality-test] и обычные html-формы.
Таблицы можно как в install файле модуля описать,так и тупо в phpmyadmin`е вручную создать..
первый случай кропотливей,но зато будет "связь" с Друпалом.
а пользоваться таблицей в любом случае будете одинаково,неважно как она была создана.
А как добавлять запись в таблицу? Интересует конкретно как добавлять значения полей с автоинкрементом.
Я пробую так:
<?php
db_insert('test_statistics')
->fields(array('id' => 1, 'user_personality' => strval($result->description)))
->execute();
?>
Поле id типа int(11) с автоинкрементом. Первая запись с id=1 добавляется, потом ошибки. Если просто игнорировать вставку записи в это поле, тоже ошибки.
Вставляй всегда id=NULL
Если таблица добавлена стандартно по друпаловски(hook_schema, hook_install)
то можно просто drupal_write_record ( http://api.drupal.org/api/drupal/includes!common.inc/function/drupal_wri... )
А вообще, если данные в таблице не чисто "служебные", а планируется организовывать их вывод.. то проще, как минимум, просто добавить спец.тип материала с нужными полями, как максимум, создать свою сущность(Entity API) со своей таблицей..
А если создать таблицу в phpMyAdmin, как потом можно организовать к ней доступ из basic page?
Я пробую так, но не получается:
<script>
function calc(){
var username;
var faculty;
var personality;
/* далее формируются строки username, faculty, personality */
$.ajax({
type: "POST".
url: "php-file.php",
data: {"username="+username, "faculty="+faculty, "personality="+personality}
});
</script>
Вот содержимое php-file.php:
<?php
$username = $_POST[username];
$faculty = $_POST[faculty];
$personality = $_POST[personality];
db_insert('DB_table')
->fields(array('Name' => $username, 'Faculty' => $faculty, 'Personality' => $personality))
->execute();
?>
Вам бы какую-нибудь книжку почитать... хотябы по ОСНОВАМ программирования для Друпал..
Сэкономите себе кучу времени..
Я не программист, просто вышло так, что мне нужно сделать эти тесты (передать параметры-строки из джаваскрипта в php файл для записи их в базу). Если у вас эта задача не займет так много времени, как у меня, мне будет очень приятно, если вы поможете.
мда приехали, работу программиста поручают("просто вышло так") непонятно кому. Безопасность сайта, ошибки и т.д. - кого это волнует?
Может это и не работа вовсе,а так,проверка навыков чтоли?
ТС,подход верный,только все эти действия упакуй в модуль.Но никак не засовывай в ноду с форматом ввода php...