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

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

Код позволяет пользователю создать викторину, введя вопрос и 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>

person slickset    schedule 27.04.2016    source источник
comment
Первоначально эта проблема была решена, но после того, как я изменил... -- Хорошо, каким было исходное содержание и какой основной код вы удалили?   -  person Peter van der Wal    schedule 27.04.2016
comment
Почему бы вам не сделать цикл, если вы можете просто копировать/вставлять?   -  person CarlosCarucce    schedule 27.04.2016
comment
Это был мой первоначальный вопрос: stackoverflow.com/questions/36826587/   -  person slickset    schedule 28.04.2016


Ответы (3)


На странице 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 к текущей опции.

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

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

person Rajdeep Paul    schedule 27.04.2016

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

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

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

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

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

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

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

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

person Martin    schedule 27.04.2016
comment
Спасибо за ваш совет. Я понимаю, что иногда важно отвлечься от работы, чтобы подумать о том, чем я действительно хочу заниматься. Это хороший совет для тех, кто решает проблему. - person slickset; 28.04.2016
comment
@MichalPatriak Рад, что вы разобрались, и есть определенная ирония в том, что некоторые из лучших компьютерных программ на самом деле разрабатываются, планируются и настраиваются с помощью ручки и бумаги. :-) - person Martin; 28.04.2016

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

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

$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";
}
person Solrac    schedule 27.04.2016