Bezdepbonusu7Программирование: статьи и ответы

Вопрос

PHP Как напечатать выбранный ответ зеленым цветом

Автор вопроса: slicksetОтветов: 3

Это похоже на предыдущий вопрос, который я задавал о сопоставлении выбранного переключателя со значением в поле ввода.

Код позволяет пользователю создать викторину, введя вопрос и 4 возможных ответа. Вы должны выбрать один из ответов как правильный, и на отдельной странице PHP ответы должны отображаться с правильным зеленым цветом. Первоначально эта проблема была решена, но после того, как я изменил код для проверки, исходный цикл для отображения не работал.

Вот вывод кода:

введите здесь описание изображения

Мне нужно, чтобы Олбани печатался зеленым цветом, так как это правильный ответ, и он был выбран с помощью переключателя.

Вот мой код для формы:

<?php
    session_start();

    // Define variables and set to empty values
    $questionErr = $answer0Err = $answer1Err = $answer2Err = $answer3Err = "";
    $question = $answer0 = $answer1 = $answer2 = $answer3 = "";

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $valid = True;

        if (empty($_POST['question'])) {
            $questionErr = "Please supply a question";
            $valid = False;
        } else {
            $question = test_input($_POST['question']);
            $_SESSION['question'] = $_POST['question'];
        }

        if (empty($_POST['answer0'])) {
            $answer0Err = "Please supply a possible answer";
            $valid = False;
        } else {
            $answer0 = test_input($_POST['answer0']);
            $_SESSION['answer0'] = $_POST['answer0'];
        }

        if (empty($_POST['answer1'])) {
            $answer1Err = "Please supply a possible answer";
            $valid = False;
        } else {
            $answer1 = test_input($_POST['answer1']);
            $_SESSION['answer1'] = $_POST['answer1'];
        }

        if (empty($_POST['answer2'])) {
            $answer2Err = "Please supply a possible answer";
            $valid = False;
        } else {
            $answer2 = test_input($_POST['answer2']);
            $_SESSION['answer2'] = $_POST['answer2'];
        }

        if (empty($_POST['answer3'])) {
            $answer3Err = "Please supply a possible answer";
            $valid = False;
        } else {
            $answer3 = test_input($_POST['answer3']);
            $_SESSION['answer3'] = $_POST['answer3'];
        }
    }

    // Function to sanitize data
    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }

    // If valid, send to QuestionReview.php to display answers
    if ($valid) {
        $_SESSION['radio'] = $_POST['radio'];
        header('location: QuestionReview.php');
    }
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>User-Created Quiz</title>
        <style>
            .shadow {
                 -webkit-box-shadow: 3px 3px 5px 6px #ccc;  /* Safari 3-4, iOS 4.0.2 - 4.2, Android 2.3+ */
                 -moz-box-shadow:    3px 3px 5px 6px #ccc;  /* Firefox 3.5 - 3.6 */
                 box-shadow:         3px 3px 5px 6px #ccc;  /* Opera 10.5, IE 9, Firefox 4+, Chrome 6+, iOS 5 */
            }
            .instructions {
                color: #696D6E;
            }
            #form-background {
                background-color: #ECEDE8;
            }
            .error {
                color: red;
            }
        </style>
    </head>
    <body>
        <div style="width:600px">

        <fieldset id="form-background" class="shadow">
            <h1 class="instructions" style="text-align:center">User-Created Quiz</h1>
            <p class="instructions" style="text-align:center">
            <strong>Please enter a question of your own,
                    along with 4 possible answers in the
                    form below. Be sure to select the
                    correct answer to your question
                    before submitting the form.</strong>
            </p>
            <form style="text-align:center;" method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

                <br>
                <label class="instructions" for="question" >Enter your question here</label><br>
                <input type="text" name="question" size="50" value='<?php echo $question;?>' />
                <span class="error">* <br /><?php echo $questionErr; ?></span>
                <br><br>
                <p class="instructions">
                    Please provide four answers to your question and select the
                    correct one.
                </p>
                    <input type="radio" name="radio" value="answer0">
                    <input type="text" name="answer0" value="<?php echo $answer0; ?>" style="width:400px">
                    <span class="error">* <br /><?php echo $answer0Err; ?></span>
                    <br><br>

                    <input type="radio" name="radio" value="answer1">
                    <input type="text" name="answer1" value="<?php echo $answer1; ?>" style="width:400px">
                    <span class="error">* <br /><?php echo $answer1Err; ?></span>
                    <br><br>

                    <input type="radio" name="radio" value="answer2">
                    <input type="text" name="answer2" value="<?php echo $answer2; ?>" style="width:400px">
                    <span class="error">* <br /><?php echo $answer2Err; ?></span>
                    <br><br>

                    <input type="radio" name="radio" value="answer3">
                    <input type="text" name="answer3" value="<?php echo $answer3; ?>" style="width:400px">
                    <span class="error">* <br /><?php echo $answer3Err; ?></span>
                    <br><br>

                    <input type="submit" value="Submit Entry">
            </form>
        </fieldset>
        </div>

    </body>
</html>

И вот мой код для страницы результатов:

<?php
    session_start();

    // Pull all variables from SESSION
    $question =  $_SESSION['question'];
    $answer0 = $_SESSION['answer0'];
    $answer1 = $_SESSION['answer1'];
    $answer2 = $_SESSION['answer2'];
    $answer3 = $_SESSION['answer3'];
    $radio = $_SESSION['radio'];

    $answerArray = array($answer0, $answer1, $answer2, $answer3);
    shuffle($answerArray);
?>


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Entry Review</title>
        <style>
            .instructions {
                color: #696D6E;
            }
        </style>
    </head>
    <body>
        <h1 class="instructions">Entry Review</h1>
        <p><em>You entered the following question:</em></p>
        <p><strong><?php echo $question; ?></strong></p><br>


        <p><em>These are the answers you provided:</em>
        <p>
            <strong>
                <?php

                if(isset($_SESSION['radio'])) {
                    $radio =  $_SESSION['radio'];
                    foreach ($answerArray as $value) {
                        echo $value . "<br />";
                    }
                } else {
                    echo "Please click the back button in your browser and select a correct answer";
                }
                ?>
            </strong>
        </p>
    </body>
</html>
  • Первоначально эта проблема была решена, но после того, как я изменил... -- Хорошо, каким было исходное содержание и какой основной код вы удалили? Peter van der Wal 27.04.2016
  • Почему бы вам не сделать цикл, если вы можете просто копировать/вставлять? CarlosCarucce 27.04.2016
  • Это был мой первоначальный вопрос: stackoverflow.com/questions/36826587/ slickset 28.04.2016

phpformsloopsradioecho

Ответы

Ответ 1 · рейтинг 1 · Rajdeep Paul

На странице QuestionReview.php получите правильный ответ следующим образом:

$correct_answer = $_SESSION[$_SESSION['radio']];

Так что оставьте свою страницу викторины такой, какая она есть, и после отправки обработайте форму следующим образом:

QuestionReview.php:

<?php
    session_start();

    // Pull all variables from SESSION
    $question =  $_SESSION['question'];
    $answer0 = $_SESSION['answer0'];
    $answer1 = $_SESSION['answer1'];
    $answer2 = $_SESSION['answer2'];
    $answer3 = $_SESSION['answer3'];
    $correct_answer = $_SESSION[$_SESSION['radio']];

    $answerArray = array($answer0, $answer1, $answer2, $answer3);
    shuffle($answerArray);

?>


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Entry Review</title>
        <style>
            .instructions {
                color: #696D6E;
            }

        </style>
    </head>
    <body>
        <h1 class="instructions">Entry Review</h1>
        <p><em>You entered the following question:</em></p>
        <p><strong><?php echo $question; ?></strong></p><br>


        <p><em>These are the answers you provided:</em>
        <p>
            <strong>
                <?php

                if(isset($_SESSION['radio'])) {
                    foreach ($answerArray as $value) {
                        $output = "<span";
                        if($value == $correct_answer){
                            $output .= " class='instructions'";
                        }
                        $output .= ">" . $value . "</span><br />";
                        echo $output;
                    }
                } else {
                    echo "Please click the back button in your browser and select a correct answer";
                }
                ?>
            </strong>
        </p>
    </body>
</html>

В каждой итерации цикла foreach проверяйте, соответствует ли текущий вариант правильному ответу или нет. Если да, то примените класс instructions к текущей опции.

Вывод: (скриншот)

Ответ 2 · рейтинг 2 · Martin

Возьмите лист обычной бумаги формата А4, поработайте вдали от компьютера десять минут.

Теперь определите, чего вы пытаетесь достичь в блоках, что вы хотите, чтобы каждая часть вашего набора навыков/языка/операторного синтаксиса (PHP, javascript, CSS, HTML и т. д.) делала?

У вас есть список выходов, уже отображаемых в вашем проекте, и вы хотите пометить выбранный выход, как отличающийся от других.

работать в обратном направлении от этого конечного результата, что сделает это изменение? Правильно, CSS, чтобы вы могли написать на бумаге, вам нужен класс CSS (или другой идентификатор) для выбранного вывода, который вы можете вызвать для этого ответа.

Так как же CSS узнает, какой вывод выбрать? Где хранятся эти данные?

Эти данные находятся где-то в PHP (но это не сразу видно из вашего кода). Итак, вам нужен оператор PHP IF для проверки Если ответ, который отображается в браузере, является ответом, который выбрал пользователь, тогда этот ответ должен быть заключен в класс CSS как-то (<div> или <span> ), чтобы повлиять на внешний вид.

Вот и все. Теперь у вас должно быть достаточно структуры, чтобы уйти и написать заметки на этом листе формата А4, а затем использовать эти заметки, чтобы разбить ваши различные проблемы на составные части (здесь есть части для определения того, что поведение должно произойти, а затем части для создания этого поведения).

Перепишите свой код за 5-10 минут, и он будет именно таким, как вы хотите.

Ответ 3 · рейтинг 1 · Solrac

Вы почти у цели... просто сделайте это проще:

Если у вас есть:

$question =  $_SESSION['question'];
$radio = $_SESSION['radio'];
$answerArray = [$_SESSION['answer0'], $_SESSION['answer1'], $_SESSION['answer2'], $_SESSION['answer3']];

Тогда ты можешь:

if(isset($_SESSION['radio'])) {
  foreach ($answerArray as $value) {
    echo $_SESSION['radio'] == $value ? "<span style=\"color:green\">Make $value green.</span><br />" : "<span style=\"color:#666\">Make $value grey or red.</span><br />";
  }
} else {
  echo "Please click the back button in your browser and select a correct answer";
}

Что равно:

if(isset($_SESSION['radio'])) {
  foreach ($answerArray as $value) {
    if ($_SESSION['radio'] == $value){
      echo "<span style=\"color:green\">Make $value green.</span><br />";
    } else {
      echo "<span style=\"color:#666\">Make $value grey or red.</span><br />";
    }
  }
} else {
  echo "Please click the back button in your browser and select a correct answer";
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы