PHP скрипт

2.09K
.
Добавлено: 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); и обнови страницу в браузере. А текст ошибки скопируй сюда.
.
sl6972

ДоХтор, Сейчас

Всего: 22