Dennis: Herkunfstüberprüfung und Variablenüberprüfung

Hi @all!
 _
|1|
ich hab mir ein PHP Script mit Hilfe von SelfPHP gebastelt.

Dieses Script entspricht relativ genau dem hier http://www.selfphp.info/funktionsreferenz/mail_funktionen/mail.php#beispiel1

Nur hab ich das so umgebaut, dass ich von vielen verschiedenen Seiten dort ein Formular hinschicken kann und das wird dann dort weiterverarbeitet.
Hat den Vorteil, dass ich nicht in jedes Formula php reinschreiben muss.

Hat aber den Nachteil, dass rein theoretisch jeder darüber Mails verschicken kann.

Deshalb: Wie kann ich prüfen, von welchem Server/Domain das abgeschickt wurde?
z.B. Nur Formulare von riehle-web.com und go-modellbahn.de sollen verarbeitet werden.

Wie geht das? Bitte bedenkt, ich bin Anfänger.

_
|2|
Ein kleines Problem ist aber noch da:

Jede Variable die in der HTML-Mail verschickt werden soll, muss ich im PHP script angeben.

Am ' . $datum . ' um ' . $uhrzeit . ' Uhr hat ' . $absender_name . ' das Formular ausgefüllt und abgeschickt.<br>
' . $absender_name . ' hat ' . $absender_email . ' als Absender E-Mail eingegeben und folgende Nachricht geschrieben:<br>
' . $nachricht . '

Jezt kann ich da ja nicht in ein Formular irgendwas reinmachen <input type="text" name="sonstiges"> das wird dann ja nicht mit verschickt.

Wie kann ich erreichen, dass ALLE Name-Wert Paare übermittelt werden, ohne dass ich diese vorher hier rein schreiben muss?
So nach dem Motto:
<?php mache(Liste alle Name-Wert Paare auf) ?>

Bitte auch hier wieder bedenken, dass ich Anfänger bin.

Ich bin dankbar für jede Hilfe, auch zu nur einem Teil.
ich hoffe, das Problem wurde klar.
MfG, Dennis.

--
Was man eigentlich immer sagen will:
SelfHTML und SelfForum sind echt spize!
Vielen Dank an alle, die mir hier helfen.
Fragen zu Formularen beantwortet http://tutorial.riehle-web.com
Meine HP: http://www.riehle-web.com
So, das wars!
  1. Hallo,

    Hat aber den Nachteil, dass rein theoretisch jeder darüber Mails verschicken kann.

    Der wirksamste Schutz - und das solltest Du eigentlich laengst wissen, weil ich
    es schon einmal erklaert habe und Du es zur Kenntnis genommen hast - ist, die
    E-Mail-Adresse des Empfaengers im Skript und nicht im Formular zu codieren.
    Alles andere ist sehr gefaehrlich.

    Z.B. zu schauen, was im Referrer steht.
    http://www.php.net/manual/de/reserved.variables.php#reserved.variables.server
    $_SERVER['HTTP_REFERER']
    Wenn der Referrer leer ist oder unmittelbar vor dem ersten Slash nach http://
    eine Deiner beiden Domains enthaelt, wird das Formular verschickt, sonst nicht.
    D.h. leer, http://*.DeineDomain1/* und http://*.DeineDomain2/* waeren OK.

    Bedenke aber, dass der Referrer gefaelscht werden kann, und dass gerade die
    "richtig boesen Jungs" a.k.a. Spammer einen leeren oder eben einen gefaelschten
    Referrer angeben werden, um Dein Skript zu missbrauchen. Also lass es lieber sein.

    http://www.dclp-faq.de/q/q-http-referer.html

    Wie kann ich erreichen, dass ALLE Name-Wert Paare übermittelt werden, ohne dass ich diese vorher hier rein schreiben muss?

    Mach eine foreach()-Schleife fuer $_POST (falls Du method="POST" verwendest,
    was bei Feedback-Formularen und dergleichen sicher am sinnvollsten ist, sobald
    man eine Textarea hat).

    http://www.php.net/manual/de/control-structures.foreach.php

    Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
    1. Hi @all!

      Hat aber den Nachteil, dass rein theoretisch jeder darüber Mails verschicken kann.
      Der wirksamste Schutz - und das solltest Du eigentlich laengst wissen, weil ich
      es schon einmal erklaert habe und Du es zur Kenntnis genommen hast - ist, die
      E-Mail-Adresse des Empfaengers im Skript und nicht im Formular zu codieren.

      Damals wars nur Perl/CGI und jetzt PHP. Da dachte ich, ich frag nochmal.
      Ok, ich schreibs in Script rein, überzeugt *g*

      Aber ich werden den Referer trotzdem noch überprüfen, damit das Risiko zu dass mit irgendwer
      irgendwelchen sinnlosen Mist schickt reduziert wird.

      Wie kann ich erreichen, dass ALLE Name-Wert Paare übermittelt werden, ohne dass ich diese vorher hier rein schreiben muss?
      Mach eine foreach()-Schleife fuer $_POST (falls Du method="POST" verwendest,
      was bei Feedback-Formularen und dergleichen sicher am sinnvollsten ist, sobald
      man eine Textarea hat).
      http://www.php.net/manual/de/control-structures.foreach.php

      Das hab ich mir angeschaut und durchgelesen aber ....... hm, so klug werd ich da nicht draus.
      Könntest du mir ein kleines Beispiel geben, davon ausgehend, dass es a=variable, b=variable und c=variable gibt.
      Du verstehst, was ich meine, oder?

      Das wäre echt super nett, weil ich versteh das jetzt einfach nicht.

      Gruesse,

      Grüße und herlichen Dank zurück,
      MfG, Dennis.

      --
      Was man eigentlich immer sagen will:
      SelfHTML und SelfForum sind echt spize!
      Vielen Dank an alle, die mir hier helfen.
      Fragen zu Formularen beantwortet http://tutorial.riehle-web.com
      Meine HP: http://www.riehle-web.com
      So, das wars!
      1. foreach($_POST AS $key => $elem)
        {
            echo $key . ' = ' . $elem . "<br />\r\n";
        }

        1. Hi @all!

          Wo muss das denn genau rein? ich habs jetzt so gemacht, bei der konfiguration der HTML-Mail, welche versandt wird:
            $emailbody = '
            <html>
            <body bgcolor="#FFFFFF" text="#000000">
            Am ' . $datum . ' um ' . $uhrzeit . ' Uhr hat ' . $absender_name . ' das Formular
            auf ' . $HTTP_REFERER . ' ausgefüllt und abgeschickt.<br>
            <br>
            ' . $absender_name . ' hat ' . $absender_email . ' als Absender eingegeben und folgende Nachricht geschrieben:<br>
            ' . $nachricht . '<br>'
            foreach($_POST AS $key => $elem)                         <-- Parse Error!
            {
              echo $key . ' = ' . $elem . '<br>'
            }
            '<br>
            </body>
            </html>

          Allerdings krieg ich da einen Parse Error in der gekennzeichneten Linie mit dem foreach.
          Warum, was mache ich falsch?

          Unterstützt mein Webspace vielleicht kein PHP4? Wie krieg ich das raus?

          Gibts da ne Möglichkeit das ohne foreach, auf andere, PHP3 kompatible Methode zu machen?

          MfG, Dennis.

          --
          Was man eigentlich immer sagen will:
          SelfHTML und SelfForum sind echt spize!
          Vielen Dank an alle, die mir hier helfen.
          Fragen zu Formularen beantwortet http://tutorial.riehle-web.com
          Meine HP: http://www.riehle-web.com
          So, das wars!
          1. Hallo,

            $emailbody = '[...]' . $nachricht . '<br>'
              foreach($_POST AS $key => $elem)                         <-- Parse Error!
            Allerdings krieg ich da einen Parse Error in der gekennzeichneten Linie mit dem foreach.

            Weil die Zeile davor nicht mit ; abgeschlossen wird...

            Gewoehne Dich daran, dass die Fehlermeldung manchmal
            die Zeile davor oder danach betrifft...

            Wenn die "Fehlerzeile" die letzte Zeile des ganzen Scripts ist,
            dann hast Du vermutlich _irgendwo_ eine Klammer oder ein
            Anfuehrungszeichen vergessen... Das ist der nervigste Fehler!

            Unterstützt mein Webspace vielleicht kein PHP4?

            phpinfo() weiss mehr...

            Gibts da ne Möglichkeit das ohne foreach, auf andere, PHP3 kompatible Methode zu machen?

            Vergiss PHP3.

            Es gibt noch andere Kontroll-Strukturen und Schleifen,
            die Du auch mit Arrays verwenden kannst:
            http://www.php.net/manual/de/control-structures.php
            Ein Beispiel mit einer for-Schleife gibt's etwas unterhalb von:
            http://www.php.net/manual/de/language.types.array.php#language.types.array.foo-bar

            foreach() ist aber etwas sehr, sehr praktisches,
            ich wuerde nicht darauf verzichten.

            Gruesse,

            Thomas

            --
            Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
            Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
            Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
            1. Hi @all!

              Unterstützt mein Webspace vielleicht kein PHP4?
              phpinfo() weiss mehr...

              Ach stimmt, und der sagt:

              PHP Version 4.3.4
              Configure Command: './configure' '--with-mysql' '--with-zlib' '--with-gd' '--with-apxs' '--with-config-file-path=/etc' '--with-ftp' '--with-jpeg-dir=/usr/local/lib' '--with-xml' '--with-ssl' '--with-pdf'
              Server API: Apache

              uvm.

              MfG, Dennis.

              --
              Was man eigentlich immer sagen will:
              SelfHTML und SelfForum sind echt spize!
              Vielen Dank an alle, die mir hier helfen.
              Fragen zu Formularen beantwortet http://tutorial.riehle-web.com
              Meine HP: http://www.riehle-web.com
              So, das wars!
    2. Hi Thomas Luethi,

      Der wirksamste Schutz - und das solltest Du eigentlich laengst wissen, weil ich
      es schon einmal erklaert habe und Du es zur Kenntnis genommen hast - ist, die
      E-Mail-Adresse des Empfaengers im Skript und nicht im Formular zu codieren.

      Was hälst du von:

      if(empfaenger==1) { $email_to = "emailadresse1@riehle-web.com" }
      if(empfaenger==2) { $email_to = "emailadresse2@riehle-web.com" }
      if(empfaenger==3) { $email_to = "emailadresse3@riehle-web.com" }
      else { $email_to = "andereadresse@riehle-web.com" }

      Das wäre doch auch idiotensicher, oder?
      Drei Adressen von mir.

      MfG, Dennis.

      --
      Was man eigentlich immer sagen will:
      SelfHTML und SelfForum sind echt spize!
      Vielen Dank an alle, die mir hier helfen.
      Fragen zu Formularen beantwortet http://tutorial.riehle-web.com
      Meine HP: http://www.riehle-web.com
      So, das wars!
      1. hi,

        Was hälst du von:

        if(empfaenger==1) { $email_to = "emailadresse1@riehle-web.com" }
        if(empfaenger==2) { $email_to = "emailadresse2@riehle-web.com" }
        if(empfaenger==3) { $email_to = "emailadresse3@riehle-web.com" }
        else { $email_to = "andereadresse@riehle-web.com" }

        Das wäre doch auch idiotensicher, oder?

        das wäre sicher - aber leicht ... idiotisch :-)
        (sofern du empfaenger noch einen $ spendierst.)

        mehrfache if-abfragen würde man natürlich eher als switch realisieren, und bei dieser problemstellung bietet sich evtl. sogar noch ein array zum ablegen der emailadressen an (plus prüfung, ob übergebener index im array existiert natürlich).

        gruss,
        wahsaga

      2. Hallo,

        if(empfaenger==1) { $email_to = "emailadresse1@riehle-web.com" }
        if(empfaenger==2) { $email_to = "emailadresse2@riehle-web.com" }
        if(empfaenger==3) { $email_to = "emailadresse3@riehle-web.com" }
        else { $email_to = "andereadresse@riehle-web.com" }

        Wenn die Konstante "empfaenger" den Wert 3 hat,
        geht es an emailadresse3@..., sonst an emailadresse@...
        Nicht gerade optimal. ;-)

        Beachte: Das else bezieht sich nur auf die letzte Bedingung.
        Und Du solltest die Zuweisungen jeweils mit einem ; abschliessen.
        PHP ist da strikter als JavaScript.

        Bei mehr als 3 Moeglichkeiten (wo man noch if/elseif/else
        verwenden koennte) solltest Du das ganze - wie wahsaga
        schon schrieb - mit einer  SWITCH/CASE Struktur machen.
        Oder mit einem Array.

        Die Werte der Parameter aus $_POST u.s.w. sind uebrigens
        AFAIK immer vom Typ "String".

        Mit SWITCH/CASE wuerde ich es so machen:

        SWITCH ($_POST['empfaenger'])
         {
          CASE "1":
            $email_to = "emailadresse1@riehle-web.com";
            break;

        /* u.s.w. */

        DEFAULT:
            $email_to = "emailadresse@riehle-web.com";
            break;
         }

        http://www.php.net/manual/de/control-structures.switch.php

        Das wäre doch auch idiotensicher, oder?

        Ja, wenn Du es richtig machst, ist das eine brauchbare Loesung.

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/