Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] kolor label w zależności od radioboxa
Forum PHP.pl > Forum > Przedszkole
matino
Witam wszystkich,

Robię sobie prosty skrypt do obsługi ankiety/quizu.
Wszystko w sumie już mam, pozostała mi tylko zmiana koloru odpowiedzi po zatwierdzeniu danych.
Chciałbym, żeby dla złych odpowiedzi kolor label ustawił się na czerwony, a dla dobrych na zielony.
Wiem, że trzeba ustawić "style=color:..." ale nie wiem za bardzo jak się dobrać do danej label. Poniżej jest
kod, może ktoś będzie miał jakiś pomysł?

Kod
   <?php
// Liczba możliwych odpowiedzi na 1 pytanie
define('N', "3");
// Pytania
$questions = array ("1st question", "2nd question", "3rd question", "4th question", "5th question", "6th question", "7th question", "8th question", "9th question", "10th question");
// Dobre odpowiedzi
$answers = array ("00", "10", "20", "30", "40", "50", "60", "70", "80", "90");

if (isset($_POST['check'])) {
     $all = true;
     $score = 0;
     for ($i = 0; $i < count($questions); $i++) {
         $selected_radio = $_POST[$i];
         if (!isset($selected_radio)) {
             $all = false;
             break;
         }
         else {
             if ($selected_radio == $answers[$i])
                 $score++;
         }
     }
     if ($all) {
         $final_score = $score / count($questions) *100;
         echo "Twój wynik to ".$final_score."%";
     }
     else
         echo "Zaznacz wszystkie odpowiedzi";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <title></title>
     </head>
     <body>
         <form action="index.php" name="" method="post">
             <ul>
                 <?php
                 for ($i = 0; $i < count($questions); $i++) {
                     echo "<li><label>$questions[$i]</label>
";
                     for ($j = 0; $j < N; $j++) {
                         echo "<input type=\"radio\" name=\"$i\" id=\"$i$j\" value=\"$i$j\"";
                         if (isset($_POST[$i])) {
                             if ($_POST[$i] == "$i$j")
                                 echo "checked=\"checked\" />";
                         }
                         echo "<label for=\"$i$j\">$i$j</label>
";
                     }
                     echo "</li>";
                 }
                 ?>
             </ul>
             <input type="submit" value="Sprawdź" name="check" />
         </form>
     </body>
</html>
zeulus
  1. <?php
  2. // Liczba możliwych odpowiedzi na 1 pytanie
  3. define('N', "3");
  4. // Pytania
  5. $questions = array ("1st question", "2nd question", "3rd question", "4th question", "5th question", "6th question", "7th question", "8th question", "9th question", "10th question");
  6.  
  7. // kolory labeli domyślne
  8. $label_classes= array_fill(0,count($questions),"normal");
  9.  
  10. [...]
  11.  
  12.        else {
  13.             if ($selected_radio == $answers[$i]) {
  14.                 $score++;
  15.                 $label_classes[$i] = "right";
  16.             } else {
  17.                 $label_classes[$i] = "wrong";
  18.             }
  19.         }
  20.  
  21. [...]
  22.  
  23.                for ($i = 0; $i < count($questions); $i++) {
  24.                     echo "<li><label class=\"{$label_classes[$i]}\">$questions[$i]</label>";
  25.  
  26. [...]
  27. ?>


Może coś w ten deseń? Wtedy w css sobie zmieniasz kolory już bez modyfikacji kodu php.
matino
Dzięki za odpowiedź, ale chodzi mi o to, żeby pokolorować labely przy radioboxach, a nie przy <li>
Pawel_W
  1. <?php
  2. for ($i = 0; $i < count($questions); $i++) {
  3.                     echo "<li><label>$questions[$i]</label>
  4. ";
  5.                     for ($j = 0; $j < N; $j++) {
  6.                         echo "<input type=\"radio\" name=\"$i\" id=\"$i$j\" value=\"$i$j\"";
  7.                         if (isset($_POST[$i])) {
  8.                             if ($_POST[$i] == "$i$j")
  9.                                 echo "checked=\"checked\" />";
  10.                         }
  11.                         echo "<label for=\"$i$j\"class=\"{$label_classes[$i]}\">$i$j</label>
  12. ";
  13.                     }
  14.                     echo "</li>";
  15.                 }
  16. ?>

tak?
matino
Tak, tylko, że kod, który podałeś, koloruje wszystkie labely z danego pytania na 1 kolor (klasę).
Może nie wytłumaczyłem tego jasno, ale jeśli jakaś odpowiedź na pytanie x jest zła, to chciałbym uzyskać taki efekt:

1. Pytanie 1
o dobra odp.
o zaznaczona odp.
o coś tam

W przypadku, gdy odpowiedź na pytanie x jest dobra, koloruje tylko dobrą odp.:

2. Pytanie 2
o dobra odp.
o coś tam2
o coś tam
Pawel_W
musisz ustawić 2 klasy, normal i wrong
skowron-line
@matino troche samodzielności.
  1. <?php
  2. if( .. )
  3. {
  4.  
  5. }
  6. else if( ... )
  7. {
  8.  
  9. }
  10. else
  11. {
  12.  
  13. }
  14. ?>

widziałeś kiedyś coś takiego questionmark.gif
matino
Dałem radę, dziękuję wszystkim za pomoc smile.gif

Kod
<?php
// Liczba możliwych odpowiedzi na 1 pytanie
define('N', "3");
// Pytania
$questions = array ("1st question", "2nd question", "3rd question", "4th question", "5th question", "6th question", "7th question", "8th question", "9th question", "10th question");
// Dobre odpowiedzi
$answers = array ("00", "10", "20", "30", "40", "50", "60", "70", "80", "90");

$show_answers = false;
if (isset($_POST['check'])) {
     $all = true;
     $score = 0;
     for ($i = 0; $i < count($questions); $i++) {
         $selected_radio = $_POST[$i];
         if (!isset($selected_radio)) {
             $all = false;
             break;
         }
         else {
             if ($selected_radio == $answers[$i]) {
                 $score++;
             }
         }
     }
     if ($all) {
         $show_answers = true;
         $final_score = $score / count($questions) *100;
         echo "Twój wynik to ".$final_score."%";
     }
     else
         echo "Zaznacz wszystkie odpowiedzi";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
     <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <title></title>
     </head>
     <body>
         <form action="index.php" method="post">
             <ul>
                 <?php
                 for ($i = 0; $i < count($questions); $i++) {
                     echo "<li><label>$questions[$i]</label>
";
                     for ($j = 0; $j < N; $j++) {
                         echo "<input type=\"radio\" name=\"$i\" id=\"$i$j\" value=\"$i$j\"";
                         if (isset($_POST[$i])) {
                             if ($_POST[$i] == "$i$j") {
                                 echo "checked=\"checked\" />";
                                 if ($show_answers) {
                                     if ($_POST[$i] == $answers[$i]) {
                                         echo "<label for=\"$i$j\" style=\"color: green\">$i$j</label>
";
                                     }
                                     else {
                                         echo "<label style=\"color: red\" for=\"$i$j\">$i$j</label>
";
                                     }
                                 }
                                 else
                                     echo "<label for=\"$i$j\">$i$j</label>
";
                             }
                             else {
                                 if ($answers[$i] == "$i$j") {
                                     echo "<label for=\"$i$j\" style=\"color: green\">$i$j</label>
";
                                 }
                                 else
                                     echo "<label for=\"$i$j\">$i$j</label>
";
                             }
                         }
                         else
                             echo "<label for=\"$i$j\">$i$j</label>
";
                     }
                     echo "</li>";
                 }
                 ?>
             </ul>
             <input type="submit" value="Sprawdź" name="check" />
         </form>
     </body>
</html>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.