Hannes: Eingabe aus Formular in Datei schreiben

Hi zusammen

Hab einen online Fragebogen, die Eingaben (Textfelder und Radio-Buttons) wurden bisher an mich gemailt. Jetzt hätt ich aber lieber, dass diese gleich in eine Datei geschrieben werden sodass ich diese dann später ins Excel importieren kann.

Hab schon mal ein wenig angefangen (mit der Hilfe von Chris aus dem Forum), komm aber leider nicht mehr weiter.

Hab das für alle Fragen gemacht:

Frage 13

if(isset($_POST['13'])
     and $_POST['13'] >= 1
     and $_POST['13'] <= 2)
  {
    $_daten['13'] = $_POST['13'];
  }
  else
  {
    $_daten['13'] = 0;  ## oder auch = '';
  }

usw....

daran anschließend hab ich diesen Code angehängt:

$delim = '"';
$sep   = ';';
$CRLF  = chr(13).chr(10);

function array_mask($_array,$mask)
{
  if (is_array($_array))
  {
    foreach($_array as $key => $val)
    {
      array_mask($_array[$key],$mask);
    }
  }
  else
  {
    str_replace($delim,$delim.$delim,$_array);
   str_replace($mask,$mask.$mask,$_array);
  }
  return $_array;
}

$_daten = array_mask($_daten,$delim);

$record_str = $delim.implode($delim.$sep.$delim , $_daten).$delim.$CRLF;

echo '<p>'.htmlentities($record,ENT_QUOTES)."</p>\n";

$fh = fopen('umfrage.csv','ab+');

fwrite($fh, $record);

fclose($fh);

Leider bekomm ich eine Fehlermeldung:

Parse error: parse error, unexpected T_STRING in /usr/export/www/vhosts/funnetwork/hosting/josbg/frage/schreiben.php on line 9

Leider weiß ich nicht mehr weiter!!!

http://josbg.jo.funpic.de/frage/

thx
Jo

  1. Hi Hannes!

    Leider weiß ich nicht mehr weiter!!!

    Und wir brauchen mehr Informationen. Quelltext, z.B.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hallo Hannes,

      genau das Thema hatte wir erst die letzten Tage. Der Thread kann bestimmt noch nicht über die Hälfte raus sein.

      Schau doch mal. Ich suche auch nochmal für Dich...

      LG
      Chris

    2. Hi Hopsel

      Hier der vorläufige Code von der "Schreib-Funktion" Eingabe wirts ja nicht brauchen.

      <?php

      echo "<font class="text">Vielen Dank f&uuml;r die Teilnahme an dieser Umfrage, Angaben wurden gespeichert.<br><br></font>";

      Frage 1

      $_daten['Politik'] = $_POST['Politik'];
        $_daten['Wirtschaft'] = $_POST['Wirtschaft'];
        $_daten['Sport'] = $_POST['Sport'];
        $_daten['Kultur'] = $_POST['Kultur'];
        $_daten['Gesellschaft'] = $_POST['Gesellschaft'];
        $_daten['Sonstige'] = $_POST['Sonstige'];

      Frage 2

      if(isset($_POST['sensationel'])
           and $_POST['sensationel'] >= 1
           and $_POST['sensationel'] <= 4)
        {
          $_daten['sensationel'] = $_POST['sensationel'];
        }
        else
        {
          $_daten['sensationel'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['einzigartig'])
           and $_POST['einzigartig'] >= 1
           and $_POST['einzigartig'] <= 4)
        {
          $_daten['einzigartig'] = $_POST['einzigartig'];
        }
        else
        {
          $_daten['einzigartig'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['sachverhalt'])
           and $_POST['sachverhalt'] >= 1
           and $_POST['sachverhalt'] <= 4)
        {
          $_daten['sachverhalt'] = $_POST['sachverhalt'];
        }
        else
        {
          $_daten['sachverhalt'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['auswirkung'])
           and $_POST['auswirkung'] >= 1
           and $_POST['auswirkung'] <= 4)
        {
          $_daten['auswirkung'] = $_POST['auswirkung'];
        }
        else
        {
          $_daten['auswirkung'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['ueberraschung'])
           and $_POST['ueberraschung'] >= 1
           and $_POST['ueberraschung'] <= 4)
        {
          $_daten['ueberraschung'] = $_POST['ueberraschung'];
        }
        else
        {
          $_daten['ueberraschung'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['prominenz'])
           and $_POST['prominenz'] >= 1
           and $_POST['prominenz'] <= 4)
        {
          $_daten['prominenz'] = $_POST['prominenz'];
        }
        else
        {
          $_daten['prominenz'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['beteiligung'])
           and $_POST['beteiligung'] >= 1
           and $_POST['beteiligung'] <= 4)
        {
          $_daten['beteiligung'] = $_POST['beteiligung'];
        }
        else
        {
          $_daten['beteiligung'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['reichweite'])
           and $_POST['reichweite'] >= 1
           and $_POST['reichweite'] <= 4)
        {
          $_daten['reichweite'] = $_POST['reichweite'];
        }
        else
        {
          $_daten['reichweite'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['dauer'])
           and $_POST['dauer'] >= 1
           and $_POST['dauer'] <= 4)
        {
          $_daten['dauer'] = $_POST['dauer'];
        }
        else
        {
          $_daten['dauer'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['bedeutung'])
           and $_POST['bedeutung'] >= 1
           and $_POST['bedeutung'] <= 4)
        {
          $_daten['bedeutung'] = $_POST['bedeutung'];
        }
        else
        {
          $_daten['bedeutung'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['einfach'])
           and $_POST['einfach'] >= 1
           and $_POST['einfach'] <= 4)
        {
          $_daten['einfach'] = $_POST['einfach'];
        }
        else
        {
          $_daten['einfach'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['identifikation'])
           and $_POST['identifikation'] >= 1
           and $_POST['identifikation'] <= 4)
        {
          $_daten['identifikation'] = $_POST['identifikation'];
        }
        else
        {
          $_daten['identifikation'] = 0;  ## oder auch = '';
        }

      if(isset($_POST['sonstige'])
           and $_POST['sonstige'] >= 1
           and $_POST['sonstige'] <= 4)
        {
          $_daten['sonstige'] = $_POST['sonstige'];
        }
        else
        {
          $_daten['sonstige'] = 0;  ## oder auch = '';
        }

      Frage 3

      if(isset($_POST['3'])
           and $_POST['3'] >= 1
           and $_POST['3'] <= 3)
        {
          $_daten['3'] = $_POST['3'];
        }
        else
        {
          $_daten['3'] = 0;  ## oder auch = '';
        }

      Frage 4

      if(isset($_POST['4'])
           and $_POST['4'] >= 1
           and $_POST['4'] <= 2)
        {
          $_daten['4'] = $_POST['4'];
        }
        else
        {
          $_daten['4'] = 0;  ## oder auch = '';
        }

      Frage 5

      if(isset($_POST['5'])
           and $_POST['5'] >= 1
           and $_POST['5'] <= 3)
        {
          $_daten['5'] = $_POST['5'];
        }
        else
        {
          $_daten['5'] = 0;  ## oder auch = '';
        }

      Frage 6

      if(isset($_POST['6'])
           and $_POST['6'] >= 1
           and $_POST['6'] <= 3)
        {
          $_daten['6'] = $_POST['6'];
        }
        else
        {
          $_daten['6'] = 0;  ## oder auch = '';
        }

      Frage 7

      $_daten['7'] = $_POST['7'];

      Frage 8

      $_daten['8'] = $_POST['8'];

      Frage 9

      if(isset($_POST['9'])
           and $_POST['9'] >= 1
           and $_POST['9'] <= 4)
        {
          $_daten['9'] = $_POST['9'];
        }
        else
        {
          $_daten['9'] = 0;  ## oder auch = '';
        }

      Frage 10

      if(isset($_POST['10'])
           and $_POST['10'] >= 1
           and $_POST['10'] <= 4)
        {
          $_daten['10'] = $_POST['10'];
        }
        else
        {
          $_daten['10'] = 0;  ## oder auch = '';
        }

      Frage 11

      if(isset($_POST['11'])
           and $_POST['11'] >= 1
           and $_POST['11'] <= 4)
        {
          $_daten['11'] = $_POST['11'];
        }
        else
        {
          $_daten['11'] = 0;  ## oder auch = '';
        }

      Frage 12

      if(isset($_POST['12'])
           and $_POST['12'] >= 1
           and $_POST['12'] <= 3)
        {
          $_daten['12'] = $_POST['12'];
        }
        else
        {
          $_daten['12'] = 0;  ## oder auch = '';
        }

      Frage 13

      if(isset($_POST['13'])
           and $_POST['13'] >= 1
           and $_POST['13'] <= 2)
        {
          $_daten['13'] = $_POST['13'];
        }
        else
        {
          $_daten['13'] = 0;  ## oder auch = '';
        }

      Ende Fragebogen

      $delim = '"';
      $sep   = ';';
      $CRLF  = chr(13).chr(10);

      function array_mask($_array,$mask)
      {
        if (is_array($_array))
        {
          foreach($_array as $key => $val)
          {
            array_mask($_array[$key],$mask);
          }
        }
        else
        {
          str_replace($delim,$delim.$delim,$_array);
         str_replace($mask,$mask.$mask,$_array);
        }
        return $_array;
      }

      $_daten = array_mask($_daten,$delim);

      $record_str = $delim.implode($delim.$sep.$delim , $_daten).$delim.$CRLF;

      echo '<p>'.htmlentities($record,ENT_QUOTES)."</p>\n";

      $fh = fopen('umfrage.csv','ab+');

      fwrite($fh, $record);

      fclose($fh);

      ?>

      vg
      Jo

  2. Hallo Johannes,

    das war sogar Dein Posting

    https://forum.selfhtml.org/?t=119329&m=765267

    um das es da ging die letzte Tage.
    Du siehst, hier geht nix verloren.
    Warum hat Du denn im alten Posting schon aufgegeben?

    LG
    Chris

    1. Hi Chris

      Weil ich glaub, dass da unten keiner mehr hinsieht ?!?

      vg
      Jo

      Hallo Johannes,

      das war sogar Dein Posting

      https://forum.selfhtml.org/?t=119329&m=765267

      um das es da ging die letzte Tage.
      Du siehst, hier geht nix verloren.
      Warum hat Du denn im alten Posting schon aufgegeben?

      LG
      Chris

      1. Hallo Johannes,

        Weil ich glaub, dass da unten keiner mehr hinsieht ?!?

        in diesem speziellen Fall möchte ich sogar annehmen, dass das stimmt.
        Ich sleber hatte leider die letzten 30 Stunden nur "Schily-Zugang" zum Internet, bzw. wben noch nicht. Nun geht er wieder mit voller überwachung (vermute ich).

        Aber die Anderen hätten doch ruhig mal antworten können!

        LG
        Chris

        1. Hallo Chris,

          in diesem speziellen Fall möchte ich sogar annehmen, dass das stimmt.

          nein, Deine Annahme ist falsch. Nur als ich mir die dort angegebene Seite angeschaut habe, wurde mir keine Fehlermeldung präsentiert. Infolgedessen ging ich davon aus, das Hannes den Fehler herausgefunden und behoben hätte.

          Wenn es die Fehlermeldung beim Absenden des Fragebogens gibt, dann muss ich natürlich passen. Das war mir zuviel Arbeit.

          Habs jetzt gemacht, ok es gibt diese Fehlermeldung. Es wäre nett gewesen, darauf hinzuweisen, dass es beim Absenden zur Fehlermeldung kommt.

          Der genaue Text (copy & paste, keine Überarbeitung) von schreiben.php, insbesondere der ersten 10 Zeilen wäre erforderlich.

          Freundliche Grüße

          Vinzenz

          1. Hi Vinzenz

            Hier die ersten 10 Zeilen von der schreiben.php

            <?php

            echo "<font class="text">Vielen Dank f&uuml;r die Teilnahme an dieser Umfrage, Angaben wurden gespeichert.<br><br></font>";

            Frage 1

            $_daten['Politik'] = $_POST['Politik'];
              $_daten['Wirtschaft'] = $_POST['Wirtschaft'];    <-- Zeile 9
              $_daten['Sport'] = $_POST['Sport'];

            vg
            Jo

            1. Hallo Hannes.

              echo "<font class="text">Vielen Dank f&uuml;r die Teilnahme an dieser Umfrage, Angaben wurden gespeichert.<br><br></font>";

              Warum nutzt du das veraltete font-Element?

              Frage 1

              $_daten['Politik'] = $_POST['Politik'];
                $_daten['Wirtschaft'] = $_POST['Wirtschaft'];    <-- Zeile 9
                $_daten['Sport'] = $_POST['Sport'];

              Warum speicherst du die POST-Daten erst in Variablen zwischen, anstatt sie direkt zu verwenden?

              Einen schönen Dienstag noch.

              Gruß, Ashura

            2. Hallo Hannes,

              Hier die ersten 10 Zeilen von der schreiben.php

              hmm, abgesehen von den berechtigten Einwänden Ashuras: einen Fehler kann ich in dem von Dir angegebenen Codeabschnitt nicht erkennen.

              Hast Du einen Editor, der Syntaxhervorhebung unterstützt? Wenn ja, öffne doch bitte alle relevanten Dateien in diesem Editor. Vielleicht kannst Du dadurch bereits den Fehler ausmachen.

              Falls Du keinen hast, nutze folgende Liste, um Dir einen zu besorgen. Abgesehen von UTF-8 bin ich mit notepad++ sehr zufrieden.

              Freundliche Grüße

              Vinzenz

  3. Hallo,

    Frage 13

    if(isset($_POST['13'])
         and $_POST['13'] >= 1
         and $_POST['13'] <= 2)

    Das ist so nicht zulässig und könnte bereits in HTML zu Fehlern führen. Namen von Dialogelementen müssen mit einem Buchstaben beginnen.

    In PHP sieht es ähnlich aus. Namen von Variablen müssen mit einem Buchstabn beginnen. Bei reinen Indizes von Arrays wird das zwar nicht so gehandhabt, da der Index eines Superglobalen Arrays allerdings als Parameter-Name "von außen" kommt, würde ich es nicht drau anlegen.

    Du könntest aber deine Frage

    name="frage[13]"

    bezeichnen und dann im Script

    if(isset($_POST['frage'][13])
         and $_POST['frage'][13] >= 1
         and $_POST['frage'][13] <= 2)

    abfragen.

    Das würde auf jeden Fall zulässig sein.

    Wegen der Probleme muss ich nochmal genau hinsehen. Hab noch nichts entdeckt.

    LG
    Chris

    1. Hallo Chris,

      if(isset($_POST['13']) [...]
      Das ist so nicht zulässig und könnte bereits in HTML zu Fehlern führen. Namen von Dialogelementen müssen mit einem Buchstaben beginnen.

      sagt wer?

      Grüße aus Nürnberg
      Tobias

      1. Hallo Tobias,

        if(isset($_POST['13']) [...]
        Das ist so nicht zulässig und könnte bereits in HTML zu Fehlern führen. Namen von Dialogelementen müssen mit einem Buchstaben beginnen.
        sagt wer?

        http://www.w3.org/TR/html401/types.html#type-cdata

        Und außerdem stell Dir mal vor, was bei Register_Globals = ON in PHP aus einem rein numerischen Bezeichner werden würde...

        LG
        Chris

        1. echo $begrüßung;

          Und außerdem stell Dir mal vor, was bei Register_Globals = ON in PHP aus einem rein numerischen Bezeichner werden würde...

          Warum probierst du es nicht einfach aus?
          Zum Beispiel mit dem nachfolgenden Minimalscript:

          <form action="" method="post">  
            <input type="hidden" name="42" value="foobar">  
            <input type="submit">  
          </form>  
          <pre>  
          <?php  
            
          //var_dump($42);  // einmal mit und einmal ohne Kommentarzeichen am Zeilenanfang probieren  
            
          print_r($GLOBALS);  
          ?>
          

          echo "$verabschiedung $name";

          1. Hallo Dedlfix,

            Warum probierst du es nicht einfach aus?

            42

            LG
            Chris

          2. echo $begrüßung;

            Und außerdem stell Dir mal vor, was bei Register_Globals = ON in PHP aus einem rein numerischen Bezeichner werden würde...

            Warum probierst du es nicht einfach aus?

            Da Chris anscheinend keine Lust hat, seine Vorstellung nachzuprüfen, kommen hier meine Ergebnisse mit einem noch etwas erweitertem Testscript:

            <form action="" method="post">  
              <input type="hidden" name="42" value="foobar">  
              <input type="hidden" name="x" value="y">  
              <input type="submit">  
            </form>  
            <pre>  
            <?php  
            //var_dump($42);  
            echo '$x: ';  
            var_dump($x);  
            print_r($GLOBALS);  
              
            $z = '42';  
            echo '$$z: ';  
            var_dump($$z);  
            print_r($GLOBALS);  
            ?>
            

            Hier die Ergebnisse:

            //var_dump($42);

            Liefert einen Syntax-Fehler, Variablennamen dürfen nicht mit einer Ziffer beginnen.

            echo '$x: ';
              var_dump($x);

            liefert erwartungsgemäß: $x: string(1) "y"

            print_r($GLOBALS);

            Die gekürzte Ausgabe liefert:

            Array
            (
                [HTTP_RAW_POST_DATA] => 42=foobar&x=y
                [42] => foobar
                [x] => y
                [_POST] => Array
                    (
                        [42] => foobar
                        [x] => y
                    )

            Zugriff ist also über $_POST['42'] bzw. $_POST[42] möglich. Außerdem ist zu sehen, dass eine Variable mit Namen 42 im globalen Variablenbereich angelegt wird.
            Der Zugriff ist über $42 wegen Systaxfehler nicht möglich. Vielleicht klappt es ja mit einer variablen Variablen.

            $z = '42'; // oder auch $z = 42; also als Zahl statt String
              echo '$$z: ';
              var_dump($$z);

            Und siehe da, die Ausgabe ist: $$z: string(6) "foobar"

            print_r($GLOBALS);

            Hier ändert sich nicht viel, nur ein  [z] => 42  kommt hinzu.

            Mit variablen Variablen lassen sich also auch Variablen anlegen bzw. es lässt sich darauf zugreifen, deren Name nicht den Syntaxregeln entspricht.

            Getestet habe ich mit PHP 4.3.11. Mit 5.0.4 gibt es eine  Notice: Undefined variable: 42  bei var_dump($$z); obwohl auch das $GLOBALS-Array die 42 enthält. $$z lässt sich auch ohne Probleme beschreiben und danach wieder auslesen, ohne weitere Beanstandungen seitens PHP. Die Ausgabe dieser Notice verwundert mich deshalb etwas ...

            echo "$verabschiedung $name";

            1. Hallo dedlfix.

              Getestet habe ich mit PHP 4.3.11. Mit 5.0.4 gibt es eine  Notice: Undefined variable: 42  bei var_dump($$z); obwohl auch das $GLOBALS-Array die 42 enthält. $$z lässt sich auch ohne Probleme beschreiben und danach wieder auslesen, ohne weitere Beanstandungen seitens PHP. Die Ausgabe dieser Notice verwundert mich deshalb etwas ...

              Vielleicht hat man hier nicht mehr weiter gedacht bzw. die Auswirkungen von variablen Variablen in dieser Hinsicht nicht bedacht?

              Einen schönen Donnerstag noch.

              Gruß, Ashura

  4. Hallo,

    Da hattest Du meine letzte Korrektur nicht berücksichtigt:

    $delim = '"';
    $sep   = ';';
    $CRLF  = chr(13).chr(10);

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

    function array_mask($_array,$mask)
    {
      if (is_array($_array))
      {
        foreach($_array as $key => $val)
        {
          array_mask($_array[$key],$mask);
        }
      }
      else
      {

    str_replace($mask,$mask.$mask,$_array); ## [1]

    }
      return $_array;
    }

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

    $_daten = array_mask($_daten,$delim);

    [1] Die erste Zeile war von mir auskommentiert, weil da ein Fehler drin war. Warum hast Du sie denn wieder aktiviert?

    LG
    Chris