Thema: Formularauswertung ohne Datenbank-geht das?

Hallo;
ich habe ein Formular mit einer Reihe von Checkboxen - und zwar soll das Ganze eine Wunschliste werden.

<form name="wunschliste" method="post" action="wuensche.php">
  Tassen<input type="checkbox" name="wunsch1" value="wunsch1" /><br />
  Teller<input type="checkbox" name="wunsch2" value="wunsch2" /><br />
  Terrarium<input type="checkbox" name="wunsch3" value="wunsch3" /><br />
 <input type="submit" />
</form>

Der User soll anhaken, welche Wünsche er erfüllen will.
Nach dem absenden / neuladen sollen die von ihm ausgewählten Wünsche kursiv gesetzt werden (dann ohne Checkbox).

Verständlich, was ich meine?
Läßt sich das ohne Datenbank realisieren?

Gruß + Dank

Volker

2

Re: Formularauswertung ohne Datenbank-geht das?

Hallo ...

Ja das geht - hat mit'ner DB zunächst mal nichts zu tun.

Wird nach dem Absenden wieder das Formular dargestellt (wuensche.php-> Affenformular) und sollen die jeweiligen "Label" (vor den Checkboxen) dann kursiv dargestellt werden ? Oder was schwebt dir vor ?

Grundsätzlich müsstest du pro Checkbox mittels

   if (isset($_POST['wunschXY']))
   {
      ...
   }

lediglich prüfen, ob die jeweilige Checkbox abgehakt, bzw. übermittelt wurde. Ist dem so, wird das Label kursiv dargestellt.

Mal ein Link dazu : Wie kann man Checkboxen verarbeiten?

Grüße und bis denne,
Axel


edit: hatte im Code'ne Klammer vergessen

Zuletzt bearbeitet von XLB (16-08-2006 13:42:58)

Re: Formularauswertung ohne Datenbank-geht das?

HAllo Axel,
vielen Dank für deine Antwort.
Folgendes schwebt mir vor:
der User/Geburtstagsgast ruft die Seite wuensche.php auf und bekommt ein Formular mit Checkboxen, so daß er die Wünsche die er erfüllen möchte abhaken kann.
Nach Absenden des Formulars sollen diese Wünsche / Geschenkoptionen dem nächsten User nicht mehr zur Verfügung stehen.

Gruß + Dank

Volker

4

Re: Formularauswertung ohne Datenbank-geht das?

Dafür bräuchtest du dann in der Tat eine DB. Sonst "weis" PHP beim nächsten User nicht, welche "Wunschobjekte" noch vorhanden sind.

Ggf. würde sich auch eine (IMHO weniger elegante) Lösung über ein Text- oder CSV-File anbieten.

Re: Formularauswertung ohne Datenbank-geht das?

Habe mir folgende zusammengesucht, was im Firefox auch funktioniert, nicht aber im IE.
Und ich hab keinen Schimmer, warum nicht.
Also im IE wird der ausgewählte Wunsch nicht aus der txt gelöscht.

das Formular zum Auswählen der Wünsche liest Zeilen aus einer txt-Datei ein:

  <form name="wunschliste" id="form1" method="post" action="wuensche3.php">
<?php
$datei=fopen("wuenscheliste.txt","a+");
while(!feof($datei))
{
$zeile = fgets($datei,1000);
if ($zeile)
    {
    echo $zeile.'<input type="checkbox" name="wunsch[]" value="'.$zeile.'"><br>';
    }
}
fclose($datei);
?>
    <input name="Abschicken" type="submit" value="Wunsch erfüllen" />
</form>

Aufruf der Löschfunktion für jede Auswahl:

<?php
if($wunsch)
{
$anzahl = count($wunsch);
$a = 0;
while($a < $anzahl)
   {
   $einzelwunsch ="$wunsch[$a]";
   $fn = "wuenscheliste.txt";
  // Funktionsaufruf:
  deleteLineFromFile($fn, $text = $einzelwunsch, -1);// wenn ich hier z.B. $text = "Tretroller" schreibe, dann gehts
   $a++;
    }
}   
?>

...die Löschfunktion selber (http://phptt.de/showschnipsel.php?kat=3&id=16)

<?php
  function deleteLineFromFile($filename, $text = "", $line = -1)
  {
     $result = true;

     if (! strlen ($text) && $line == -1)
       $result = false;
     else
     {
        if (file_exists($filename))
        {
           $array = file($filename);

           // Zeilennummer?
           if ($line != -1)
           {
              if ($line < count($array))
              {
                 unset($array[$line]);
                 $array = array_values($array);
              }
              else
                $result = false;
           }
           else
           {
              if (strlen ($text))
              {
                 $count = -1;

                 foreach ($array as $value)
                 {
                    $value = trim ($value);
                    if ($text == $value)
                    {
                       $count++;
                       unset($array[$count]);
                       $array = array_values($array);
                       break;
                    }
                    else
                     $count++;
                 }
              }
              else
                $result = false;
           }
        }
        else
          $result = false;
     }

     if ($result = true)
     {
         $fp = fopen ($filename, "w");

         if ($fp)
         {
            foreach ($array as $value)
              fputs($fp, $value);

            fclose ($fp);
         }
         else
           $result = false;
     }

     return $result;
  }
?>

Woran könnte es wohl beim IE scheitern?

Zuletzt bearbeitet von blauwahr (29-08-2006 12:19:52)

Gruß + Dank

Volker