Peter: Nicht mehr objektorientiert programmieren

Hallo!

Ich programmiere gerade ein Gästebuch in PHP und habe bisher in meiner Datei, in der ich die POST-Variablen verarbeite, folgendes stehen:
<?php

$name = ereg_replace("(\r\n|\r|\n)","<br>", $name);
$nachricht = ereg_replace("(\r\n|\r|\n)","<br>", $nachricht);

$name = addslashes($name);
$nachricht = addslashes($nachricht);

$pfad = "eintr.dat";

$datei = fopen($pfad, "a+");
fputs($datei, "$name|||$nachricht\n");
fclose($datei);
?>

Wie kann ich mich am besten und kürzesten von dieser objektorientierten Programmierweise lösen. Ich habe es z.B. bei addslashes schon so versucht:

foreach ($HTTP_POST_VARS as $k=>$elem) {
$k = addslashes($k);
$dat = $dat.$k,"|||";
$pfad = "eintr.dat";
$datei = fopen($pfad, "a+");
fputs($datei, "$dat\n");
fclose($datei);
}

Das funktioniert aber leider nicht. Könnt ihr mir da weiterhelfen?

Grüße,
Peter

  1. Holladiewaldfee,

    Wie kann ich mich am besten und kürzesten von dieser objektorientierten Programmierweise lösen. Ich habe es z.B. bei addslashes schon so versucht:

    Ha? Da ist gar nichts, aber wirklich gar nichts objekt-orientiert ... da ist ja nicht mal ein Objekt?!

    Das funktioniert aber leider nicht. Könnt ihr mir da weiterhelfen?

    Gibt's ne Fehlermeldung?

    Ciao,

    Harry

    --
      Hä? Was? Signatur?! Kann man das essen?
  2. Hallo,

    abgesehen davon, dass dein Script OOP-frei ist, halte ich foreach auch nicht fuer den richtigen Weg. Ich wuerde sowas machen:
    $name = $_POST['name']?ereg_replace("(\r\n|\r|\n)","<br>",$_POST['name']):'';

    Je nachdem, wo Deine Werte herkommen auch:

    $name = isset($_POST['name'])?....

    Dieter

    1. Hi!

      ereg_replace("(\r\n|\r|\n)","<br>",$_POST['name'])

      Tip: http://www.php3.de/manual/de/function.nl2br.php

      Grüße
      Andreas

    2. $name = $_POST['name']?ereg_replace("(\r\n|\r|\n)","<br>",$_POST['name']):'';

      OK, objektorientiert heißt im allgemeinen was anderes, aber ich meinte damit, dass ich beliebig viele Daten per Formular an das PHP-Script schicken will, ohne dass ich mich im PHP-Script selbst "darauf einstellen" muss. Mit dem Code, den du gepostet hast besteht mein Problem ja leider immernoch.
      Habt ihr vielleicht noch Ideen?

      Danke

      Peter

  3. Hallo Peter,

    probier was nach dem Muster...

    <?
    foreach ($HTTP_POST_VARS as $key => $value)
    {
      $HTTP_POST_VARS[$key] = addslashes($value);
    }
    ?>

    toby

    --
    "Trying is the first step toward failure." - H. Simpson
    1. Hallo Toby,

      ich habe die von dir vorgeschlagene Version mal so probiert zu verwenden:
      <?php
      foreach ($HTTP_POST_VARS as $key => $value)
      {
      $HTTP_POST_VARS[$key] = addslashes($value);
      $dat = $dat.$HTTP_POST_VARS[$key],"|||";
      }

      $pfad = "eintr.dat";
      $datei = fopen($pfad, "a+");
      fputs($datei, "$dat\n");
      fclose($datei);
      ?>

      Die Gästebucheinträge sollen also jeweils pro Eintrag in einer Zeile einer dat-Datei gespeichert werden. In dieser einen Zeile pro Eintrag werden die verschiedenen Informationen wie z.B. Name und Nachricht durch "|||" getrennt.
      Leider funktioniert das so immernoch nicht. :(

      Ich hoffe ihr könnt und wollt mir noch helfen...

      Peter

      1. Probier mal:

        foreach ($HTTP_POST_VARS as $key => $value)
        {
        $HTTP_POST_VARS[$key] = addslashes($value);
        $dat .= $HTTP_POST_VARS[$key] . "\n";
        }

        $pfad = "eintr.dat";
        $datei = fopen($pfad, "a+");
        fputs($datei, "$dat\n");
        fclose($datei);

        Was passiert denn bei Dir? Kannste überhaupt schreiben?

        toby

        --
        "Trying is the first step toward failure." - H. Simpson
        1. $dat .= $HTTP_POST_VARS[$key] . "\n";

          Das Problem ist ja, dass die einzelnen Daten eines Eintrag durch "|||" getrennt(!!!) in eine Zeile geschrieben werden sollen. Nicht jede einzelne Information in eine Zeile.

          Peter

          1. Das Problem ist ja, dass die einzelnen Daten eines Eintrag durch "|||" getrennt(!!!) in eine Zeile geschrieben werden sollen. Nicht jede einzelne Information in eine Zeile.

            Das ist aber doch gar kein Problem, nur mußt Du die Daten richtig aneinander kleben ;)

            Also:

            $dat .= $HTTP_POST_VARS[$key] . "|||";

            Statt

            $dat = $dat.$HTTP_POST_VARS[$key],"|||";

            HTH

            toby

            --
            "Trying is the first step toward failure." - H. Simpson
            1. Danke erstmal für deine schnelle Hilfe, aber das klappt so leider immernoch nicht.

              Hier mein Quellcode:
              <?php
              $dat = "";

              foreach ($HTTP_POST_VARS as $key => $value)
              {
              $HTTP_POST_VARS[$key] = addslashes($value);
              $dat .= $HTTP_POST_VARS[$key] . "|||";
              }

              $pfad = "eintr.dat";
              $datei = fopen($pfad, "a+");
              fputs($datei, "$dat\n");
              fclose($datei);
              ?>

              1. hallo peter,

                Danke erstmal für deine schnelle Hilfe, aber das klappt so leider immernoch nicht.

                Hat Dein Script Schreibrechte in diesem Verzeichnis? Bekommst Du eine Fehlermeldung?

                toby

                --
                "Trying is the first step toward failure." - H. Simpson
              2. Danke erstmal für deine schnelle Hilfe, aber das klappt so leider immernoch nicht.

                WAS KLAPPT NICHT???

                Welche Fehlermeldung?
                Was passiert genau?

                <?php
                $dat = "";

                foreach ($HTTP_POST_VARS as $key => $value)

                besser (oder brauchst Du den key in der Datendatei?):

                foreach ($_POST as $value)

                {
                $HTTP_POST_VARS[$key] = addslashes($value);
                $dat .= $HTTP_POST_VARS[$key] . "|||";

                da reicht

                $dat .= addslashes($value) . "|||";

                }

                $pfad = "eintr.dat";
                $datei = fopen($pfad, "a+");
                fputs($datei, "$dat\n");
                fclose($datei);
                ?>

                Grüße
                Andreas

                1. Hallo Andreas,

                  WAS KLAPPT NICHT???

                  Welche Fehlermeldung?
                  Was passiert genau?

                  Ich glaube das ist geheim )

                  besser (oder brauchst Du den key in der Datendatei?):

                  foreach ($_POST as $value)

                  Da hast Du natürlich völlig recht. Das ist ein Überbleibsel der ursprünglichen Frage, die nicht wirklich klar machte, was mit den Daten passieren sollte :)

                  toby

                  --
                  "Trying is the first step toward failure." - H. Simpson
                  1. Also, ich versuche nochmal klar zu machen, welche Funktion das Script hat:
                    Ich möchte ein Gästebuch programmieren. Über ein Formular werden per POST-Methode die Daten aus dem Formular an die Datei/das Script sign.php4 gesendet. Dieses Script -also sign.php4- soll die Daten empfangen, bearbeiten (addslashes, Zeilenumbrüche entfernen, usw.) und dann in eine Datei eintr.dat speichern. Jeweils ein Gästebucheintrag soll in einer Zeile in der eintr.dat gespeichert werden. Sind also drei Einträge vorhanden, gibt es auch drei Zeilen in der eintr.dat. In jeder einzelnen Zeile sollen die einzelnen Informationen, die durch einen Gästebucheintrag übermittelt werden (Name, Nachricht, usw.) jeweils durch "|||" getrennt gespeichert werden.

                    Jetzt habe ich es so versucht:

                    <?php
                    $dat = "";

                    foreach ($_POST as $value)
                    {
                    $value = addslashes($value);
                    $dat .= addslashes($value) . "|||";
                    }

                    $pfad = "eintr.dat";
                    $datei = fopen($pfad, "a+");
                    fputs($datei, "$dat\n");
                    fclose($datei);
                    ?>

                    Es erscheint nach dem Absenden des Formulars, also dem Aufruf der Datei sign.php4 folgender Fehlerhinweis:
                    Warning: Invalid argument supplied for foreach() in c:/programme/apache/apache/files/gb/sign.php4 on line 6

                    Trotzdem wird bei jedem Absenden, also bei jedem Eintrag, eine weitere Zeile in der eintr.dat gespeichert, nur eben eine völlig leere, es werden also keine Informationen gespeichert. Genau genommen wird nur "\n" pro Eintrag gespeichert. An Dateirechten o.ä. kann es also nicht liegen.

                    Ich danke euch für eure Geduld und hoffe, dass ihr mir aufgrund dieser ausführlichen Erklärung vielleicht noch weiterhelfen könnt.

                    Peter

                    1. hallo,

                      was für ne PHP-Version haste denn? Wahrscheinlich eine, die $_POST nicht kennt. Probier's mit $HTTP_POST_VARS...

                      toby

                      --
                      "Trying is the first step toward failure." - H. Simpson
                    2. Hi!

                      Ich möchte ein Gästebuch programmieren. Über ein Formular werden per POST-Methode die Daten aus dem Formular an die Datei/das Script sign.php4 gesendet.

                      Die Endung .php4 ist IMHO unüblich. Was hast Du für ein System, ost das vielleicht _sehr_ alt? Aus den Anfängen von PHP 4?
                      was gibt
                      <?php echo phpversion();?>
                      aus?

                      Dieses Script -also sign.php4- soll die Daten empfangen, bearbeiten (addslashes, Zeilenumbrüche entfernen, usw.)

                      addslashes kann man nicht entfennen, add slashes heißt zu Deutsch "füge Schrägstriche hinzu", und eben das macht die Funktion, bitte sihe im Manual nach was addslashes tut: http://www.php3.de/manual/de/function.addslashes.php.
                      Ich sehe auch nicht wo im Script Umbrüche entfernt werden.

                      Jetzt habe ich es so versucht:

                      <?php
                      $dat = "";

                      foreach ($_POST as $value)

                      Wenn die Version alter als PHP 4.1.0 ist dann geht das so nicht. Nur gibt es die schon deutlich länger als 1 Jahr!

                      {
                      $value = addslashes($value);

                      wozu diese Zeile?

                      $dat .= addslashes($value) . "|||";
                      }

                      $pfad = "eintr.dat";
                      $datei = fopen($pfad, "a+");
                      fputs($datei, "$dat\n");
                      fclose($datei);
                      ?>

                      Es erscheint nach dem Absenden des Formulars, also dem Aufruf der Datei sign.php4 folgender Fehlerhinweis:
                      Warning: Invalid argument supplied for foreach() in c:/programme/apache/apache/files/gb/sign.php4 on line 6

                      Was gibt denn var_dump($_POST); aus?

                      Was man bei foreach brauchst steht hier: http://www.php3.de/manual/en/control-structures.foreach.php

                      und was ein array ist hier: http://www.php3.de/manual/en/language.types.array.php

                      Grüße
                      Andreas