zipfelcompany: Fehler im Formular

Hallo

Ich habe ein Gästebuch zu einem Nachrichten-Formular umgestaltet. Die Personen AA bis pp können so einander Nachrichten schreiben, welch in ihre .txt Datei gespeichert werden. Nun werden sie da aber nicht mehr gespeichert. Ist im Quelltext etwas falsch?:

<body>
<a href="gb01.php">zurück</a>
<form name="eintragsform" method="post" action="eintrag01.php">
  <table width="374" border="0">
    <tr>
      <td width="70"><span class="Stil1">Empfänger:</span></td>
      <td width="307"><label>
        <select name="select">
          <option value="01">AA</option>
          <option value="02">BB</option>
          <option value="03">cc</option>
          <option value="04">dd</option>
          <option value="05">ee</option>
          <option value="06">ff</option>
          <option value="07">gg</option>
          <option value="08">hh</option>
          <option value="09">ii</option>
          <option value="10">jj</option>
          <option value="11">kk</option>
          <option value="12">ll</option>
          <option value="13">mm</option>
          <option value="14">nn</option>
          <option value="15">oo</option>
          <option value="16">pp</option>
                        </select>
      </label></td>
    </tr>
    <tr>
      <td><span class="Stil1">Eintrag:</span></td>
    <td width="307"><textarea name="text" cols="35" rows="8"></textarea>    </tr>
    <tr>
      <td><span class="Stil1"></span> </td>
      <td width="307">
        <div align="left">
          <input type="submit" name="Submit1" value="Eintragen">
        </div>      </td>
    </tr>
  </table>
</form>

<?php

$date = (date ("d.m.Y"));

if ($text != "")
{

$text = trim($text);
$text = ltrim($text);

$text = ereg_replace ("\n", "<BR>", $text);

if ($select == "01")
{
$fp = fopen("/01.txt",  "a");}

if ($select == "02")
{
$fp = fopen("/02.txt",  "a");}

if ($select == "03")
{
$fp = fopen("/03.txt",  "a");}

if ($select == "04")
{
$fp = fopen("/04.txt",  "a");}

if ($select == "05")
{
$fp = fopen("/05.txt",  "a");}

if ($select == "06")
{
$fp = fopen("/06.txt",  "a");}

if ($select == "07")
{
$fp = fopen("/07.txt",  "a");}

if ($select == "08")
{
$fp = fopen("/08.txt",  "a");}

if ($select == "09")
{
$fp = fopen("/09.txt",  "a");}

if ($select == "10")
{
$fp = fopen("/10.txt",  "a");}

if ($select == "11")
{
$fp = fopen("/11.txt",  "a");}

if ($select == "12")
{
$fp = fopen("/12.txt",  "a");}

if ($select == "13")
{
$fp = fopen("/13.txt",  "a");}

if ($select == "14")
{
$fp = fopen("/14.txt",  "a");}

if ($select == "15")
{
$fp = fopen("/15.txt",  "a");}

if ($select == "16")
{
$fp = fopen("/16.txt",  "a");}

fputs($fp, "<HR>AA: <BR> $text ($date)<BR>\n");

fclose($fp);

print ("<script language="JavaScript">Ziel()</script>");
}

?></p>
</body>

Danke

  1. Hello,

    <?php

    $date = (date ("d.m.Y"));

    bau hier mal nur so zum Test diesen Code ein:

    echo "<pre>\r\n";
    echo htmlspecialchars(print_r($_POST,1));
    echo "</pre>\r\n";

    if ($text != "")
    {

    $text = trim($text);
    $text = ltrim($text);

    $text = ereg_replace ("\n", "<BR>", $text);

    if ($select == "01")
    {
    $fp = fopen("/01.txt",  "a");}

    if ($select == "02")
    {
    $fp = fopen("/02.txt",  "a");}

    if ($select == "03")
    {
    $fp = fopen("/03.txt",  "a");}

    if ($select == "04")
    {
    $fp = fopen("/04.txt",  "a");}

    if ($select == "05")
    {
    $fp = fopen("/05.txt",  "a");}

    if ($select == "06")
    {
    $fp = fopen("/06.txt",  "a");}

    if ($select == "07")
    {
    $fp = fopen("/07.txt",  "a");}

    if ($select == "08")
    {
    $fp = fopen("/08.txt",  "a");}

    if ($select == "09")
    {
    $fp = fopen("/09.txt",  "a");}

    if ($select == "10")
    {
    $fp = fopen("/10.txt",  "a");}

    if ($select == "11")
    {
    $fp = fopen("/11.txt",  "a");}

    if ($select == "12")
    {
    $fp = fopen("/12.txt",  "a");}

    if ($select == "13")
    {
    $fp = fopen("/13.txt",  "a");}

    if ($select == "14")
    {
    $fp = fopen("/14.txt",  "a");}

    Du erwartest die Daten vermutlich in einer falschen Variable.

    Außerdem würde ich der Ordnung halber auch elseif() verwenden für die Verkettung der Bedingungen oder eine Switch-Anweisung

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. hello

      Dann erscheint unten:

      Array
      (
          [select] => 01
          [text] => meine geschriebene Nachricht
          [Submit1] => Eintragen
      )

      Aber geändert hat sich nichts.

      1. Hello,

        Dann erscheint unten:

        Array
        (
            [select] => 01
            [text] => meine geschriebene Nachricht
            [Submit1] => Eintragen
        )

        Aber geändert hat sich nichts.

        Das waren jetzt die Variablen aus dem Array $_POST
        Welche benutz Du?
        Und wie steht Dein "register globals"?
        Schau mal in die php.ini oder lass Dir phpinfo() anzeigen.

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. hy

          die register globals sind beide aus.
          Ich brauche alle diese variablen, plus datum.

          1. Hello,

            die register globals sind beide aus.
            Ich brauche alle diese variablen, plus datum.

            Dann benutze doch die Daten im Array $_POST.
            Du hast doch eben selber bestätigt, dass sie dort ankommen.

            Anstelle von   $select   schreibst Du dann   $_POST['select']
            Mit den anderen Variablen machst Du es entsprechend.

            Vermutlich musst Du noch die magic_quotes wieder entfernen.
            Was steht denn im Setting für

            magic_quotes_gpc ?

            Ein harzliches Glückauf

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Die sind "on".

              Wie entferne ich die?

              1. Hello,

                Wie entferne ich die?

                entweder ausschalten. Das geht auch (meistens) in einer .htaccess

                php_value magic_quotes_gpc 0

                oder auch

                php_flag magic_quotes_gpc off

                oder mit einer rekursiven Funktion am Anfang des Scriptes entfernen

                #--------------------------------------------------------------------

                Rekursive Entfernung der Maskierungs-Backslashes aus Arrays

                function strip($data)
                {
                  if (!get_magic_quotes_gpc())
                  {
                    return $data;
                  }

                if (is_array($data))
                  {
                    foreach($data as $key => $val)
                    {
                      $data[$key] = strip($val);
                    }
                  }
                  else
                  {
                    $data = stripslashes($data);
                  }

                return $data;
                }
                #-----------------------------------------------------------------------------

                Und als Aufruf dann

                $_POST = strip($_POST);

                Ein harzliches Glückauf

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Das Ding funktioniert nun!

                  Vielen Dank für die Hilfe.

                  1. Hello,

                    Das Ding funktioniert nun!

                    es enthält aber noch einen wesentlichen Fehler.

                    bevor die Dateien beschrieben werden oder auch gelesen, um sie dann wieder zu beschreiben, sollten sie exclusiv gesperrt werden.

                    Vor dem fputs() sollte also noch ein flock($fp, LOCK_EX) eingefügt werden.

                    Ein harzliches Glückauf

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
  2. Hi,

    <form name="eintragsform" method="post" action="eintrag01.php">

    okay, die Daten werden also per POST verschickt.

    <?php
    $date = (date ("d.m.Y"));
    if ($text != "")

    Wo soll $text plötzlich herkommen?

    if ($select == "01")

    Wo soll $select plötzlich herkommen?

    Du greifst nirgends auf die in $_POST[] übergebenen Daten zu, sondern gehst davon aus, dass du sie gleich in Variablen im Script zur Verfügung hast, die zufällig die gleichen Namen haben wie die Formularfelder.

    Das war vor vielen Jahren mal üblich, bevor die PHP-Entwickler gemerkt haben, dass das Murks ist. Vermutlich ist dein Webhoster einer der letzten, die endlich register_globals deaktiviert haben.

    if ($select == "02")
    if ($select == "03")
    if ($select == "04")
    if ($select == "05")
    if ($select == "06")
    if ($select == "07")
    [...]

    Hier wäre eine switch-Anweisung wohl praktischer.

    So long,
     Martin

    --
    Ein guter Lehrer muss seinen Schülern beibringen können,
    eine Frage so zu stellen, dass auch der Lehrer lernen muss,
    um die Frage beantworten zu können.
      (Hesiod, griech. Philosoph, um 700 v.Chr.)