Checkboxstatus in einer Textdatei Speichern & Auslesen

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

  • Checkboxstatus in einer Textdatei Speichern & Auslesen

    Guten Tag,

    Ich würde gerne den Status der Checkboxen, das sie angeklickt(checked) sind oder nicht(unchecked), also das die Häkchen dauerhaft bei denen die angeklickt wurden gesetzt bzw. nicht gesetzt sind in einer Textdatei speichern lassen. Die Textdatei ist sozusagen die Datenbank. Und der Status soll dann natürlich auch wieder aus der Textdatei ausgelesen werden.
    Bis jetzt funktioniert nur das speichern der Werte in die Textdatei, das Auslese leider noch nicht.

    Mein bisheriger Code:

    index.php

    PHP-Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    2. <html>
    3. <head>
    4. <title>Test</title>
    5. <link href='style.css' rel='stylesheet'>
    6. </head>
    7. <body>
    8. <fieldset>
    9. <legend>Formular</legend>
    10. <?php
    11. /* Formularangaben in einer Textdatei speichern und auslesen */
    12. if (isset($_POST['check'])) {
    13. reset($_POST['check']);
    14. unlink("log.txt");
    15. for ($i=0; $i<count($_POST['check']);$i++) {
    16. //echo "<br />value $i = ".$_POST['check'][$i];
    17. $dateiname = "log.txt";
    18. $handler = fOpen($dateiname , "a+");
    19. fWrite($handler , "value $i = ".$_POST['check'][$i] . "\n");
    20. fClose($handler);
    21. }
    22. }
    23. //Formularangaben einlesen
    24. foreach (file("log.txt") as $zeile) {
    25. if (strpos($zeile, " = ")) {
    26. list($variable, $value) = explode(" = ", $zeile);
    27. $$variable = chop($value);
    28. if($value!="") {
    29. $checked = checked;
    30. }
    31. }
    32. }
    33. // Formular (Formularangaben ausgeben)
    34. echo '<form action="' . $_SERVER["SCRIPT_NAME"] . '" method="post">
    35. <table border="1" align="center">
    36. <tr>
    37. <td></td>
    38. <td><font class="senkrecht2"><br><br>12.02.12<br><br><br></font></td>
    39. <td><font class="senkrecht2"><br><br>13.02.12<br><br><br></font></td>
    40. <td><font class="senkrecht2"><br><br>14.02.12<br><br><br></font></td>
    41. <td><font class="senkrecht2"><br><br>15.02.12<br><br><br></font></td>
    42. <td><font class="senkrecht2"><br><br>16.02.12<br><br><br></font></td>
    43. </tr>
    44. <tr align="center">
    45. <td>Hans</td>
    46. <td><input type="checkbox" name="check[]" value="1.1" '.$checked.'/></td>
    47. <td><input type="checkbox" name="check[]" value="1.2" '.$checked.'/></td>
    48. <td><input type="checkbox" name="check[]" value="1.3" '.$checked.'/></td>
    49. <td><input type="checkbox" name="check[]" value="1.4" '.$checked.'/></td>
    50. <td><input type="checkbox" name="check[]" value="1.5" '.$checked.'/></td>
    51. </tr>
    52. </table>
    53. <center><p> <input type="submit" value="Speichern"> </p></center>
    54. </form>';
    55. ?>
    56. </fieldset>
    57. </body>
    58. </html>
    Alles anzeigen


    Freue mich über Hilfe und Lösungsvorschläge.

    MfG
    Julian89
  • Hallo Julian,

    erstmal ein paar Punkte, die an deinem Code auffallen:
    • du hast Syntaxfehler in Zeile 28 ($$) und 30 (= 'checked')
    • $checked wird nicht initialisiert und in den Zeilen 48 bis 52 benutzt du immer die selbe Variable $checked, d.h. es werden immer alle oder keine Checkbox aktiviert
    • dann geht in Zeile 25 file(...) schief, wenn das Formular das erste Mal aufgerufen wird und die Datei noch nicht existiert
    • bei fopen benutzt du 'a+' statt 'w', d.h. neue Daten werden immer angehängt, ausgelesen werden aber die alten am Anfang der Datei
    • und zum Schluss noch ein Tipp zur Struktuierung deines Codes: php-faq.de/q-stil-normalform.html

    und hier mein Vorschlag für dein Problem:

    Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    2. <html>
    3. <head>
    4. <title>Test</title>
    5. <link href='style.css' rel='stylesheet'>
    6. </head>
    7. <body>
    8. <fieldset>
    9. <legend>Formular</legend>
    10. <?php
    11. $dateiname = 'log.txt';
    12. $values = array(1.1, 1.2, 1.3, 1.4, 1.5);
    13. /* Formularangaben in einer Textdatei speichern */
    14. if (isset($_POST['check'])) {
    15. //echo '<pre>'; print_r($_POST['check']); echo '</pre>';
    16. $handler = fopen($dateiname, 'w');
    17. fwrite($handler, serialize($_POST['check']));
    18. fclose($handler);
    19. }
    20. /* Formularangaben einlesen */
    21. $checks = array();
    22. if (file_exists($dateiname)) {
    23. $data = file("log.txt");
    24. $checks = unserialize($data[0]);
    25. //echo '<pre>'; print_r($data); echo '</pre>';
    26. //echo '<pre>'; print_r($checks); echo '</pre>';
    27. }
    28. /* Formular (Formularangaben ausgeben) */
    29. ?>
    30. <form action="<? echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
    31. <table border="1" align="center">
    32. <tr>
    33. <td></td>
    34. <td><font class="senkrecht2"><br><br>12.02.12<br><br><br></font></td>
    35. <td><font class="senkrecht2"><br><br>13.02.12<br><br><br></font></td>
    36. <td><font class="senkrecht2"><br><br>14.02.12<br><br><br></font></td>
    37. <td><font class="senkrecht2"><br><br>15.02.12<br><br><br></font></td>
    38. <td><font class="senkrecht2"><br><br>16.02.12<br><br><br></font></td>
    39. </tr>
    40. <tr align="center">
    41. <td>Hans</td>
    42. <?php foreach($values as $value): ?>
    43. <td><input type="checkbox" name="check[]" value="<?php echo $value; ?>" <?php echo (in_array($value, $checks) ? 'checked' : ''); ?> /></td>
    44. <?php endforeach; ?>
    45. </tr>
    46. </table>
    47. <center><p> <input type="submit" value="Speichern"> </p></center>
    48. </form>
    49. </fieldset>
    50. </body>
    51. </html>
    Alles anzeigen


    Thomas
  • Thomas vielen vielen Dank schonmal. Echt Klasse!

    Aber wie muss ich den Code ändern wenn ich jetzt noch eine 2. oder mehr Zeilen hinzufügen will.
    Also beispielsweise unter Hans noch ein Karl und der hat dann auch wieder 5 oder mehr checkboxen die gespiechert werden sollen,

    MfG
    Julian89