Добавлено: 23.02.2020 / 22:41
# ДоХтор (23.02.2020 / 22:23)
Ок )
Т.е., эти вопросы должны меняться после каждого нажатия на "Сохранить"?
Да
Добавлено: 23.02.2020 / 22:44
И если не трудно последняя просьба добавьте чтобы и картанки менялись, т.е. картинка в соотвествии с вопросом
Не усложняй браток, давно придуманы Гугл формы опрос
Сделай как тебе надо ,и встрой страницу пусть введут не имейл а ник например и собирай все чекбоксы в одно место
# sl6972 (23.02.2020 / 22:44)
Да
И если не трудно последняя просьба добавьте чтобы и картанки менялись, т.е. картинка в соотвествии с вопросом
Я не много переписал скрипт. Теперь он состоит из файла с вопросами
questions.txt:
Примеры вопросов (+/-)
1. Первый
2. Второй
3. Третий
4. Четвёртый
5. Пятый
6. Шестой
7. Седьмой
8. Восьмой
9. Девятый
10. Десятый
11. Одиннадцатый
12. Двенадцатый
Файла, куда скрипт будет писать ответы
answers.txt, и файла с php-кодом и html-формой:
code (+/-)
<?php
session_start();
$questionsFile = 'questions.txt'; // Файл с вопросами
$answersFile = 'answers.txt'; // Файл с ответами
$quantity = 4; // Количество вопросов на одну страницу
$flash = '';
if (! file_exists($questionsFile)) {
die("<h4>Файл '$questionsFile' не найден!</h4>");
}
if (! empty($_SESSION['flash'])) {
$flash = $_SESSION['flash'] . '<hr/>';
unset($_SESSION['flash']);
}
$offset = $_SESSION['offset'] ?? 0;
$questions = file($questionsFile, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);
$questions = array_slice($questions, $offset, $quantity);
if (! $questions) {
$answers = file($answersFile, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);
}
if (! empty($_POST)) {
if (isset($_POST['submit'])) {
file_put_contents($answersFile, false);
$_SESSION['offset'] = 0;
}
if (isset($_POST['save'])) {
$data = [];
foreach ($_POST as $key => $item) {
strpos($key, 'ch_') === false ?: $data[] = $item;
}
$data = join(PHP_EOL, $data);
file_put_contents($answersFile, "$data\n", FILE_APPEND|LOCK_EX);
$_SESSION['flash'] = '<p>Выбраны варианты:<br><b>' . nl2br($data) . '</b></p>';
$_SESSION['offset'] += $quantity;
}
header('Location: '. basename(__FILE__));
die;
}
?>
<?= $flash ?>
<form method="post">
<?php if (! empty($questions)) { ?>
<p><b>Выберите вариант</b></p>
<p>
<?php foreach ($questions as $i => $question) { ?>
<input type="checkbox" name="ch_<?= $i ?>" value="<?= $question ?>" /><?= $question ?><br>
<?php } ?>
</p>
<p><input type="submit" name="save" /></p>
<?php } else { ?>
<p><b>Результаты Ваших ответов</b></p>
<ul>
<?php foreach ($answers as $answer) { ?>
<li><?= $answer ?></li>
<?php } ?>
</ul>
<input type="submit" name="submit" value="Повторный тест" />
<?php } ?>
</form>
Текст вопросов будет меняться после каждого ввода (клик по кнопке), а по достижении конца - тест можно будет пройти повторно.
P.S.: Про картинки я не понял, что нужно.
ДоХтор, Как раз то что нужно, а картинки чтобы у разных вопросов были разные картинки
# sl6972 (24.02.2020 / 01:51)
чтобы у разных вопросов были разные картинки
Т.е., 12-ть вопросов, 12-ть картинок? Или 12-ть вопросов / 4 = 3 картинки? (по одной на страницу с четырьмя вопросами)
Дописать смогу только вечером.
ДоХтор, По одной на страницу
Добавлено: 24.02.2020 / 11:57
sl6972, ок, вечером допишу.
Добавлено: 24.02.2020 / 22:16
sl6972, создай папку
img рядом с php-файлом
(в котором этот код), и загрузи в неё свои три картинки. Названия этих картинок выбери таким образом, что бы они соответствовали своим страницам
(что бы шли по порядку). Например
icon-1.png,
icon-2.png, и т.д.
(можно вообще 1.png, 2.png, и т.д.).
code (+/-)
<?php
session_start();
$questionsFile = 'questions.txt'; // Файл с вопросами
$answersFile = 'answers.txt'; // Файл с ответами
$quantity = 4; // Количество вопросов на одну страницу
const IMG = 'img'; // Папка с картинками
const DS = DIRECTORY_SEPARATOR;
$flash = '';
if (! file_exists($questionsFile)) {
die("<h4>Файл '$questionsFile' не найден!</h4>");
}
if (! empty($_SESSION['flash'])) {
$flash = $_SESSION['flash'] . '<hr/>';
unset($_SESSION['flash']);
}
$offset = $_SESSION['offset'] ?? 0;
$questions = file($questionsFile, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);
$questions = array_slice($questions, $offset, $quantity);
if (! $questions) {
$answers = file($answersFile, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES);
}
if (! empty($_POST)) {
if (isset($_POST['submit'])) {
file_put_contents($answersFile, false);
$_SESSION['offset'] = 0;
}
if (isset($_POST['save'])) {
$data = [];
foreach ($_POST as $key => $item) {
strpos($key, 'ch_') === false ?: $data[] = $item;
}
if (! empty($data)) {
$data = join(PHP_EOL, $data);
file_put_contents($answersFile, "$data\n", FILE_APPEND|LOCK_EX);
$_SESSION['flash'] = '<p>Выбраны варианты:<br><b>' . nl2br($data) . '</b></p>';
$_SESSION['offset'] += $quantity;
}
}
header('Location: '. basename(__FILE__));
die;
}
$images = glob(__DIR__ . DS . IMG . DS . '*');
$key = $offset / $quantity;
$path = $images[$key] ?? '';
$image = IMG . DS . basename($path);
?>
<?= $flash ?>
<form method="post">
<?php if (! empty($questions)) { ?>
<?php if (file_exists($path)) { ?>
<p><img src="<?= $image ?>" width="100" height="100" /></p>
<?php } ?>
<p><b>Выберите вариант</b></p>
<p>
<?php foreach ($questions as $i => $question) { ?>
<input type="checkbox" name="ch_<?= $i ?>" value="<?= $question ?>" /><?= $question ?><br>
<?php } ?>
</p>
<p><input type="submit" name="save" /></p>
<?php } else { ?>
<p><b>Результаты Ваших ответов</b></p>
<ul>
<?php foreach ($answers as $answer) { ?>
<li><?= $answer ?></li>
<?php } ?>
</ul>
<input type="submit" name="submit" value="Повторный тест" />
<?php } ?>
</form>
ДоХтор, У меня там просто белый экран?
# sl6972 (24.02.2020 / 23:34)
ДоХтор, У меня там просто белый экран?
Вероятно ты допустил ошибку при копировании. Или кодировка файла не та. Пропиши вверху этого php-файла вот эту строку
error_reporting(-1); и обнови страницу в браузере. А текст ошибки скопируй сюда.