kostenloser Webspace werbefrei: lima-city


Problem mit Kontaktformular (php)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mantrailing-berlin

    Kostenloser Webspace von mantrailing-berlin

    mantrailing-berlin hat kostenlosen Webspace.

    Hallo,
    ich habe ein Problem mit dem Kontakformular auf meiner Seite, bin mir nicht ganz sicher, ob hier das richtige Unterforum ist, aber da der Fehler vermutlich am php-Skript liegt, versuche ich es mal hier:

    Mein Kontaktformular unter

    http://mantrailing-berlin.de/kontakt/kontaktformular.html

    ist ganz normal in html geschrieben, um bei einigen Feldern das Ausfüllen zu erzwingen, habe ich "required" verwendet, das klappt auch sehr gut, wenn ich es selbst test, und das Formular wird nicht abgeschickt. Wenn die Felder ausgefüllt werden, sammelt das dazugehörige php-Skript einfach die Werte und schickt sie mir als Mail, die Felder werden nicht weiter validiert. Wenn man also in die Felder einfach ein Leerzeichen eingibt, bekomme ich eine Mail mit dem Inhalt:
    Werte, die von der Website übermittelt wurden:
    Name:
    Telefon:
    E-Mail:
    Nachricht:
    So weit, so gut. Jetzt habe ich aber schon zweimal eine Mail ganz ohne Inhalt bekommen (nur mit der Überschrift "Werte, die von der Website übermittelt wurden:") bekommen, das heißt die einzelnen Feldnamen sind gar nicht erst aufgeführt. Ich befürchte, dass dies ein Fehler im Skript ist, was natürlich sehr ärgerlich ist, wenn jemand alles ausgefüllt hat und nun auf Antwort wartet.
    Kennt jemand von euch das Problem?
    Ich bin für jeden Rat dankbar!

    Unten habe ich das php-Codestück aufgeführt, das für die Zusammenstellung verantwortlich ist, obwohl ich befürchte, dass es nicht daran liegt.

    Vielen Dank!
    Katharina



    # Angabe des Absenders; ausgelesen aus dem Formular
    $mailhead = "From: $email\n";
    reset ($_POST);
    
    # E-Mail-Text zusammenstellen
    $body ="Werte, die von der Website übermittelt wurden:\n";
    
     
    
          foreach ($_POST as $key => $value) {
          	$key = clear_user_input($key);
          	$value = clear_user_input($value);
          	if ($key=='extras') {	
          	    if (is_array($_POST['extras']) ){
                      $body .= "$key: ";
                      $counter = 1;
                      foreach ($_POST['extras'] as $value) {
                          if (sizeof($_POST['extras']) == $counter) {
                              $body .= "$value\n";
                              break;
                          }
                          else {
                              $body .= "$value, ";
                              $counter += 1;
                          }
          		    }
                  } 
                  else {
                      $body .= "$key: $value\n";
                  }
          	} 
          	else {
          		$body .= "$key: $value\n";
          	}
          }




    Beitrag zuletzt geändert: 31.7.2015 10:42:56 von mantrailing-berlin
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo.
    Zuerst mal: Wenn du Code ins Forum stellst, nutze bitte die entsprechenden Code-Tags dazu.

    Dann ist mir das hier noch aufgefallen:
    $counter = 1;
    foreach ($_POST['extras'] as $value) {
      if (sizeof($_POST['extras']) == $counter) {
        $body .= "$value\n";
        break;
      }
      else {
        $body .= "$value, ";
        $counter += 1;
      }
    }
    Das ist nicht falsch, geht aber kürzer:
    $body .= implode(", ", $_POST['extras'])."\n"


    Und jetzt zu deinem Problem:
    Vermutlich wird dein Skript ganz normal über die Adresse aufgerufen. Also nicht durch Absenden des Formulars.
    Schau mal hier: http://mantrailing-berlin.de/kontakt/
    1. Erstelle in diesem Verzeichnis eine index.html
    2. Prüfe alle Werte, die in HTML 'required' sind, auch noch einmal in PHP, ob sie tatsächlich gesetzt und nicht leer sind. Im Fehlerfall könntest du das Formular wieder ausgeben, mit dem Hinweis, dass es nicht versandt wurde. Ganz gut wäre noch, wenn dann bereits korrekt ausgefüllte Felder wieder entsprechend vorbelegt sind.
  4. Autor dieses Themas

    mantrailing-berlin

    Kostenloser Webspace von mantrailing-berlin

    mantrailing-berlin hat kostenlosen Webspace.

    Vielen Dank für die schnelle Antwort und sorry wegen der Codedarstellung, hatte ich vor lauter Aufregung übersehen, hab ich jetzt geändert.

    Den php-Code hatte ich aus einem Buch abgeschrieben, nehme die Verbesserung aber gerne auf, danke.

    Zu der index-Datei: mir ist nicht ganz klar, wozu ich die brauche bzw. was dort drin stehen soll. Sollte die index-Datei dann anstatt der kontakt.html-Datei aufgerufen werden?
    Mir geht es auch weniger um die Validierung der Werte (wenn wirklich jemand unbedingt ein leeres Kontaktformular senden möchte, dann soll er das tun, derjenige erwartet ja auch keine Antwort), sondern ich habe Sorge, dass jemand das Formular ordentlich ausgefüllt hat und etwas in meinem Skript nicht stimmt, so dass ich eine leere E-Mail bekomme - und sich jemand über mich ärgert, weil ich ihm nicht antworte.
    Wenn der oben abgebildete Code so weit richtig war, vielleicht liegt der Fehler dann ja weiter vorne? Anscheinend bricht das php-Skript ja an der Stelle "Werte, die von der Website übermittelt wurden" ab. Deshalb hier der Code, der davor steht:

    <?php
     
    function clear_user_input($value) {
    	if (get_magic_quotes_gpc()) $value=stripslashes($value);
    	$value= str_replace( "\n", '', trim($value));
    	$value= str_replace( "\r", '', $value);
    	return $value;
    }
    
    $email = $_POST['email'];
    
    ### Konfiguration ###
    $mailto = "katharina@mantrailing-berlin.de"; 
    $mailsubj = "Kontaktanfrage von der Website"; 
    ### Ende Konfiguration ###
    
    # Angabe des Absenders; ausgelesen aus dem Formular
    $mailhead = "From: $email\n";
    reset ($_POST);
    
    # E-Mail-Text zusammenstellen
    $body ="Werte, die von der Website übermittelt wurden:\n";


    ....

    Seltsam finde ich, dass es bei mir immer funktioniert, kann es auch vielleicht am Browser liegen? Ich verwende Firefox.

    Gruß,
    Katharina
  5. Hallo,

    vielleicht ist es auch ein Bot, der das "require" einfach ignoriert. Es muss ja nicht immt ein Mensch sein, der deine Homepage besucht.
    Deshalb würde ich an deiner Stelle auch noch eine Art Botschutz einbauen, um diese Spambots herauszufiltern.


    Eventuell hilfe auch in Zukunft die Verwendung einer Mail-Bibliothek.Hier kannst du dir anschauen wie man das verwendet.
    https://www.lima-city.de/thread/6-7-2015-php-mail/page%3A0/perpage%3A20#1153122
  6. mantrailing-berlin schrieb:
    Zu der index-Datei: mir ist nicht ganz klar, wozu ich die brauche bzw. was dort drin stehen soll. Sollte die index-Datei dann anstatt der kontakt.html-Datei aufgerufen werden?

    Damit meinte ich diese Adresse: http://mantrailing-berlin.de/kontakt/
    Dein PHP-Skript ist hier sichtbar und kann direkt angeklickt werden. (Ok, muss nicht unbedingt die Ursache gewesen sein.) Aber versuche es doch einfach mal, du müsstest dann so eine leere E-Mail bekommen.
    Deshalb könntest du eine Datei "index.html" in den Ordner kontakt speichern, einfach um die Verzeichnisliste auszublenden.

    mantrailing-berlin schrieb:
    Mir geht es auch weniger um die Validierung der Werte (wenn wirklich jemand unbedingt ein leeres Kontaktformular senden möchte, dann soll er das tun, derjenige erwartet ja auch keine Antwort), sondern ich habe Sorge, dass jemand das Formular ordentlich ausgefüllt hat und etwas in meinem Skript nicht stimmt, so dass ich eine leere E-Mail bekomme - und sich jemand über mich ärgert, weil ich ihm nicht antworte.
    Ok, dann muss ich das etwas genauer erklären. Zunächst einmal sehe ich es als ein Grundprinzip, was im Browser verlangt wird, auch am Server noch einmal zu prüfen. Das aber nur nebenbei.
    Wie javaphp schon schrieb, ist es vermutlich einfach ein Bot, der das PHP-Skript aufruft. Und ich sehe auch kein unerwartetes Verhalten bei PHP, solange nichts validiert wird.
    Wenn es nicht gesetzte Felder gibt, mach dem Benutzer klar, dass das Formular nicht abgesendet wurde. Er wird dann nicht ahnungslos auf Antwort warten, sondern es noch einmal versuchen oder im schlimmsten Fall einen anderen Kommunikationsweg von deiner Kontaktseite wählen. Aus diesem Grund muss eine Validierung in das Skript, damit du die Sicherheit hast, die du erwartest.
  7. Autor dieses Themas

    mantrailing-berlin

    Kostenloser Webspace von mantrailing-berlin

    mantrailing-berlin hat kostenlosen Webspace.

    So, ich habe es jetzt tatsächlich verstanden, vielen, vielen Dank!
    Jetzt macht das alles Sinn, hurra!

    Ich habe die index-Datei angelegt, und wie vorhergesagt, ist der Verzeichnisbaum nicht mehr anklickbar. Und tatsächlich wurde genau die leere Mail generiert, über die ich mich so gewundert habe, wenn man die Datei angeklickt hat.

    Zu der Validierung: damit habt ihr natürlich vollkommen recht, ich hatte das nur erst einmal noch zurückgestellt, weil ich mit php noch nicht so weit bin und mich da erst einmal noch besser einarbeiten muss. Ich hatte mir nämlich eigentlich vorgenommen, nur Sachen aufzunehmen, die ich auch verstehe - nur beim Kontaktformular hatte ich eine Ausnahme gemacht, mit dem Ergebnis, dass ich bei der Fehlersuche dann völlig aufgeschmissen war (auch wenn der Fehler jetzt ganz woanders lag). Ich war jetzt erst einmal froh, mir so viel html und css angeeignet zu haben, dass ich die Webseite schreiben konnte. Aber das wird mein nächstes Projekt sein, die Mail-Bibliothek habe ich mir schon heruntergeladen, vielen Dank für den Tipp!

    Schöne Grüße aus Berlin,
    Katharina
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!