Vokabeltrainer: Switch oder If

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Vokabeltrainer: Switch oder If

    Da bin ich wieder!
    Mein Nachbar und bester Freund, möchte unbedingt türkisch lernen. Da auch meine Freundin mich damit "nervt", hab ich gedacht ich baue ein ganz simples Vokabel Abfrage Script, dass die beiden immer von der Arbeit online benutzen können. Ich habe mit den Wochentagen angefangen und alles per If-Abfragen gemacht, was auch wunderbar funktioniert. Nur wollte ich das ganze nun auch per switch umbauen. Aber es gibt da ein Problem:

    Quellcode

    1. <?php
    2. $right = "<font color=\"green\">Richtig</font>";
    3. $wrong = "<font color=\"red\">Falsch</font>";
    4. $p = array();
    5. $t1 = "Deutsch";
    6. $t2 = "Türkisch";
    7. $f1 = "Montag";
    8. $f2 = "Dienstag";
    9. $f3 = "Mittwoch";
    10. $f4 = "Donnerstag";
    11. $f5 = "Freitag";
    12. $f6 = "Samstag";
    13. $f7 = "Sonntag";
    14. // Wochentage
    15. if ($sprache == "Deutsch") {
    16. $sel1 = "selected=\"selected\"";
    17. $t1 = "Deutsch";
    18. $t2 = "Türkisch";
    19. $f1 = "Montag";
    20. $f2 = "Dienstag";
    21. $f3 = "Mittwoch";
    22. $f4 = "Donnerstag";
    23. $f5 = "Freitag";
    24. $f6 = "Samstag";
    25. $f7 = "Sonntag";
    26. } else if ($sprache == "Tuerkisch") {
    27. $sel2 = "selected=\"selected\"";
    28. $t1 = "Türkisch";
    29. $t2 = "Deutsch";
    30. $f1 = "Persembe";
    31. $f2 = "Sali";
    32. $f3 = "Carsamba";
    33. $f4 = "Persembe";
    34. $f5 = "Cuma";
    35. $f6 = "Cumartesi";
    36. $f7 = "Pazar";
    37. } else {
    38. }
    39. if ($senden) {
    40. if ($sprache == "Deutsch") {
    41. for ($i=0; $i<count($a); $i++) {
    42. switch ($a[$i]) {
    43. case $p[0] == "pazartesi": $p[0] = $right;
    44. break;
    45. case $p[1] == "sali": $p[1] = $right;
    46. break;
    47. case $p[2] == "carsamba": $p[2] = $right;
    48. break;
    49. case $p[3] == "persembe": $p[3] = $right;
    50. break;
    51. case $p[4] == "cuma": $p[4] = $right;
    52. break;
    53. case $p[5] == "cumartesi": $p[5] = $right;
    54. break;
    55. case $p[6] == "pazar": $p[6] = $right;
    56. break;
    57. case "": $p[] = $wrong;
    58. break;
    59. default: $p[] = "<font color=\"red\">Falsch</font>";
    60. break;
    61. }
    62. }
    63. }
    64. elseif ($sprache == "Tuerkisch") {
    65. for ($i=0; $i<count($a); $i++) {
    66. switch ($a[$i]) {
    67. case $p[0] == "Montag": $p[0] = $right;
    68. break;
    69. case $p[1] == "Dienstag": $p[1] = $right;
    70. break;
    71. case $p[2] == "Mittwoch": $p[2] = $right;
    72. break;
    73. case $p[3] == "Donnerstag": $p[3] = $right;
    74. break;
    75. case $p[4] == "Freitag": $p[4] = $right;
    76. break;
    77. case $p[5] == "Samstag": $p[5] = $right;
    78. break;
    79. case $p[5] == "Sonntag": $p[6] = $right;
    80. break;
    81. default: $p[] = "<font color=\"red\">Falsch</font>";
    82. break;
    83. }
    84. }
    85. }
    86. }
    87. ?>
    Alles anzeigen


    Wenn man in das falsche Feld einen richtiges Wort eingibt, dann kommt in dem Feld, für das dieses Wort vorgesehen war ein "Richtig", obwohl das Feld leer ist. Deshlab habe ich die Switch Abfrage mit "$p[*] == " erweitert (* steht für die jeweilige Zahl). Weiß gar nicht ob das zulässig ist, aber es klappt leider so auch nicht. Ich muss der Switch Abfrage also irgendwie klar machen, dass die Wörter nur in den dafür vorgesehenen Feldern eingegeben werden dürfen.

    Falls der html Teil gebraucht wird:
    Dateien
    • tk2.txt

      (5,55 kB, 205 mal heruntergeladen, zuletzt: )
  • nenene.. vokabeltrainer mit if/else. Das ist ja gar nicht zu verwalten.
    Schau mal hier:

    Quellcode

    1. <?php
    2. // by easy-coding.de
    3. $db = array();
    4. foreach(file('db.txt') as $row) {
    5. $row = explode('|', $row);
    6. $db[$row[0]] = trim($row[1]);
    7. }
    8. // Wie rum soll gefragt werden
    9. if(isset($_GET['umgedreht'])) {
    10. $db = array_flip($db);
    11. $link = $_SERVER['PHP_SELF'];
    12. } else {
    13. $link = '?umgedreht';
    14. }
    15. // Gab es eine Eingabe
    16. if(isset($_POST['frage'])) {
    17. if($db[$_POST['antwort']] == $_POST['frage']) {
    18. echo '<p>die antwort war korrekt</p>';
    19. } else {
    20. echo '<p>die antwort war falsch</p>';
    21. }
    22. echo $_POST['antwort']." -- ".$db[$_POST['antwort']]." -- ".$_POST['frage'];
    23. }
    24. // zufällige Frage stellen
    25. shuffle($db);
    26. ?>
    27. <p>Frage: <?php echo $db[0] ?></p>
    28. <form method="post">
    29. <input type="hidden" name="frage" value="<?php echo $db[0] ?>"/>
    30. <input type="text" name="antwort" value=""/>
    31. <input type="submit" />
    32. </form>
    33. <a href="<?php echo $link ?>">umgedreht</a>
    Alles anzeigen


    db.txt

    Quellcode

    1. hallo|hello
    2. welt|world
    3. willkommen|welcome
  • So ich habe das Script mal an mein Design angepasst. Läuft alles, nur ein Feature hätte ich noch gerne. Wenn man eine falsche Antwort gibt, erscheint bei mir die Meldung "Falsch". Damit der Benutzer aber nicht grübeln muss, was er denn nun falsch geschrieben hatte, will ich noch das richtige Wort anzeigen lassen. Ich weiß, dass die Variable dafür: "$db[$_POST['antwort']]" ist. Aber diese Variable ist nur gesetzt wenn eine richtige Antwort gegeben wird, nicht aber bei einer falschen.

    Mein Ansatz war nämlich:

    Quellcode

    1. $right = "<font color=\"green\">Richtig</font>";
    2. $wrong = "<font color=\"red\">Falsch</font> (Richtig wäre ".$db[$_POST['antwort']].")";




    Hier noch mal der neue Code, falls er gebraucht wird:
    test.txt
    db.txt