Zusätzlichen Wert in PHP einbauen

Mr_T0astbr0t

Software-Overclocker(in)
Zusätzlichen Wert in PHP einbauen

Heyho leute,
ich hab nen kleines Problem.
Undzwar muss ich für die Schule noch an einem Projekt weiter arbeiten, welches eine Webseite beinhaltet. Diese wurde so umgebaut, dass diese ohne CMS benutz werden kann.
Da das ganze nun weiterhin mit einem Kontaktformular werden soll, habe ich probiert eines zu bauen. Das funktioniert auch alles sehr gut, nur hänge ich vor dem Einbau eines kleinen Spamschutzes. Dieser besteht nicht einfach aus einem Captcha (wahrscheinlich wäre das einfacher einzubauen, wenn ja, sagt es mir bitte. ;) )

Das ganze ist ein, über das CSS, ausgeblendetes Feld, welches dafür sorgen soll, dass die Mail nicht abgesendet wird, wenn es befüllt wird. Da ich das Formular selber und den Spamschutz von unterschiedlichen Seiten habe, muss ich das alles ja irgendwie zusammen bauen.

Die php für das Formular sieht so aus: <?php // ======= Konfiguration: $mailTo = 'Meine_Mail'; $mailFrom = '"A - Pastebin.com

dadrin soll sich dieser Behler wiederfinden, welcher das Absenden der Mail verhindert:

if(isset($_POST['email_']) && $_POST['email_']) {
# nicht eintragen, sondern Mitteilung über Spamverdacht
}

Könnt Ihr mir helfen? Mit php kenne ich mich nicht sonderlich aus (reines HTML und CMS sind eher mein Ding), brauche es aber zwangsweise für das Projekt.

Vielen Dank schonmal :)
 
AW: Zusätzlichen Wert in PHP einbauen

nutz mal bitte die code-tags, so wandelt das forum das alles um und verschluckt warscheinlich die hälfte.

was ist da nun das eigentliche problem? so richtig durchsteig ichs noch nicht ^^ post ist nun der text der email oder wie? sowas auf isset zu prüfen ist relativ sinnfrei, eher checkt man einen gedrückten button - die formularfelder werden dabei eh mitgeschickt und sind alle gesetzt. was der 2. teil dann soll, erschließt sich mir auch nicht. if( post-email ist gesetzt und post-email... was? ^^). oder ist genau DAS deine frage? dann bleieb die gegenfrage offen: woran machst DU eine spam-mail fest? hast du eine email-liste mit der du vergleichen willst? also irgendwas ala if(post-email_addr == member_of(spam_list)) - skip and warn(); oder sowas?
 
AW: Zusätzlichen Wert in PHP einbauen

Okay, werde ich nächstes mal tun.

Aaaalso, das ganze sieht so aus:
formular.PNG

Das eingekreiste Feld ist später NICHT mehr zu sehen und wenn es ausgefüllt wird, soll die E-Mail nicht versendet werden. So soll der Spam-Schutz funktionieren.

Mein Problem ist einfach, in diesen Code die Funktion einzubauen.

Aktuell sieht meine php dazu so aus:
Code:
<?php
 
// ======= Konfiguration:
 
$mailTo = 'meine_mail';
$mailFrom = '"absender"';
$mailSubject    = 'Feedback';
$returnPage = 'formular_correct.html';
$returnErrorPage = 'formular_incorrect.html';
$mailText = "";
 
// ======= Text der Mail aus den Formularfeldern erstellen:
 
// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) { 
   // alle Formularfelder der Reihe nach durchgehen:
   foreach($_POST as $name => $value) {
      // Wenn der Feldwert aus mehreren Werten besteht:
      // (z.B. <select multiple>)
      if(is_array($value)) {
          // "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ":\n";
          // alle Werte des Feldes abarbeiten
          foreach($valueArray as $entry) {
             // Einrückungsleerzeichen, Wert und Zeilenumbruch 
             // dem Mailtext hinzufügen
             $mailText .= "   " . $value . "\n";
          } // ENDE: foreach
      } // ENDE: if  
      // Wenn der Feldwert ein einzelner Feldwert ist:
      else {
          // "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ": " . $value . "\n";
      } // ENDE: else
   } // ENDE: foreach
} // if
 
// ======= Korrekturen vor dem Mailversand 
 
// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
 if(get_magic_quotes_gpc()) {
     // eventuell eingefügte Backslashes entfernen
     $mailtext = stripslashes($mailtext);
 }
 
   
 
// ======= Mailversand
 
// Mail versenden und Versanderfolg merken
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
 
// ======= Return-Seite an den Browser senden
 
// Wenn der Mailversand erfolgreich war:
if($mailSent == TRUE) {
   // Seite "Formular verarbeitet" senden:
   header("Location: " . $returnPage);
}
// Wenn die Mail nicht versendet werden konnte:
if(isset($_POST['email_']) && $_POST['email_']) {
    # nicht eintragen, sondern Mitteilung über Spamverdacht
  }

else {
   // Seite "Fehler aufgetreten" senden:
   header("Location: " . $returnErrorPage);
}
 
// ======= Ende
 
exit();
 
?>

Diesen Befehl habe ich auf folgender Webseite gefunden:
WebDesign - Tips und Tricks: Captcha-Alternativen

Code:
<?php
  if(isset($_POST['email']) && $_POST['email']) {
    # nicht eintragen, sondern Mitteilung über Spamverdacht
  }
?>

Mein Problem im großen und ganzen ist, dass ich das alles so nicht zum laufen bekomme. Fakt ist aber, dass ein Spam Schutz vorhanden sein sollte, weil das ganze für nen Firmeninhaber gebaut wurde, der die Seite auch nutzen möchte.
 
AW: Zusätzlichen Wert in PHP einbauen

also das grundproblem ist jetzt erstmal vordergründig, dass du dieses erste inputfeld da abfragen willst, ob es leer ist oder nicht? dann sollte ein if($_POST['spam_filter_input_name'] <> "") send_mail(); doch reichen oder?

zum restlichen code: nuja die erste foreach da sammelt einfach alles an formulardaten und schreibt es lustig untereinander weg als mailtext - ob man das SO in der form am ende haben möchte, muss man halt selber wissen. Wenn da aber email-empfänger und dergleichen als eingabefelder stehen, wäre es irgendwie doof, das so zu machen ^^ da sollte ein einfaches $mailtext = $_POST['mailtext'] (aus ner textarea mit diesem namen bspw) völlig langen. diese form da bei dir versteh ich eher als ne art echo debugging um zu schauen, ob auch alles ankommt usw usf.

danach werden einfach nur sonder/"steuer"zeichen escaped bei bedarf und die mail versendet (spätestens hier müsste deine spam-filter-if stehen) und die rückgabe des sendevorgangs ausgegeben. so ganz grob erläutert. hab selber auch noch nix mit mails gemacht bei php, aber lässt sich ja ganz gut lesen ^^
 
AW: Zusätzlichen Wert in PHP einbauen

Ja, genau, das Feld soll abgefragt werden.

Mir geht halt um die Frage, wie ich diesen Befehl und vorallem WO ich den einbauen muss. Deinem Text kann ich die ungefähre position entnehmen, werde das zuhause mal testen, weil ich hier in der Schule nicht an meinen Webspace herankomme (scheiss Proxy).

Mit php habe ich mich so gut wie null beschäftigt, weil mir das ganze dann doch noch etwas zu viel ist.^^

Ja, das reicht mir allerdings erstmal so, weil der Empfänger nur sehen soll, was der Sender Ihm schreibt. Das ganze ist ein Kontaktformular für einen Haustechniker, die sind recht einfach gestrickt. :D
 
AW: Zusätzlichen Wert in PHP einbauen

Du hast ein Formular um den Spamprotect zu nutzen müsste folgende Kombination funktionieren.

submit = Absendebutton,
nachricht = Textkörper,
spamprotect = Das mit CSS versteckte Feld was nicht ausgefüllt werden darf (und sinnigerweise nicht spamprotect heißen sollte ;)). Du solltest das nicht wie oben mit Text anzeigen sondern per CSS vollständig ausblenden. Ein Mensch sieht es dann gar nicht erst ;)

PHP:
if(isset($_POST['submit']) AND !empty($_POST['nachricht']) AND empty($_POST['spamprotect']))
{

// Nachricht versenden

}
Der Codeblock sollte also nur ausgeführt werden wenn der Absendebutton gedrückt, ein E-Mailtext eingegeben und das Spamprotectfeld nicht ausgefüllt wurde.
Achja und mail() niemals roh verwenden. Damit wirst du in kürzester Zeit bei ziemlich jedem Hoster auf der Blacklist landen. Bitte verwende eine Mailerklasse die die notwendigen RTF-Header entsprechend einbindet.

Dein Code
PHP:
if(isset($_POST['email']) && $_POST['email'])
PHP:
isset($_POST['email'])
// isset() ist eine Funktion und gibt ein boolean zurück.
// Ist für sich genommen also ein eigenständiger gültiger True/False Vergleich in einer IF().

$_POST['email'] 
// $_POST['email'] ist eine Variable ggf. mit einem Inhalt, 
// du machst da also garkeinen Vergleich mit irgendetwas, das ist keine gültige Bedingung in einer IF().
 
Zuletzt bearbeitet:
AW: Zusätzlichen Wert in PHP einbauen

Ja, das Feld ist dann ausgeblendet. Ist nur zum testen momentan noch da. Ganz doof bin ich nicht. ;)

So ganz verstehe ich das noch nicht. Habe mich heute nochmal mit meinem Lehrer hingesetzt und mit Ihm überlegt. Er hat aber selber auch ewig kein php mehr gemacht.

Aktuell sieht die php so aus:

Code:
<?php
 
// ======= Konfiguration:
 
$mailTo = 'mail';
$mailFrom = '"Kontaktformular"';
$mailSubject    = 'Anfrage';
$returnPage = 'formular_correct.html';
$returnErrorPage = 'formular_incorrect.html';
$mailText = "";
 
// ======= Text der Mail aus den Formularfeldern erstellen:
 
// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) { 
   // alle Formularfelder der Reihe nach durchgehen:
   foreach($_POST as $name => $value) {
      // Wenn der Feldwert aus mehreren Werten besteht:
      // (z.B. <select multiple>)
      if(is_array($value)) {
          // "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ":\n";
          // alle Werte des Feldes abarbeiten
          foreach($valueArray as $entry) {
             // Einrückungsleerzeichen, Wert und Zeilenumbruch 
             // dem Mailtext hinzufügen
             $mailText .= "   " . $value . "\n";
          } // ENDE: foreach
      } // ENDE: if  
      // Wenn der Feldwert ein einzelner Feldwert ist:
      else {
          // "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ": " . $value . "\n";
      } // ENDE: else
   } // ENDE: foreach
} // if
 
// ======= Korrekturen vor dem Mailversand 
 
// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
 if(get_magic_quotes_gpc()) {
     // eventuell eingefügte Backslashes entfernen
     $mailtext = stripslashes($mailtext);
 }
 
   
 
// ======= Mailversand
 
 
 // Wenn die Mail nicht versendet werden konnte:
if(isset($_POST['email_'])) {
    # nicht eintragen, sondern Mitteilung über Spamverdacht
	# oder hier exit(); verwenden
  }
else
 {
// Mail versenden und Versanderfolg merken
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
 
// ======= Return-Seite an den Browser senden
 
// Wenn der Mailversand erfolgreich war:
if($mailSent == TRUE) {
   // Seite "Formular verarbeitet" senden:
   header("Location: " . $returnPage);
}

else {
   // Seite "Fehler aufgetreten" senden:
   header("Location: " . $returnErrorPage);
}
 }
// ======= Ende
 
exit();
 
?>

Problem ist, dass diese Spamfeldabfrage nicht funktioniert. Wie muss das ganze aussehen?

Das wäre der letzte Schritt, ansonsten ist die Webseite 100% ready. :/
 
AW: Zusätzlichen Wert in PHP einbauen

Wenn du PHP-Code postest verwende bitte nicht [ CODE ] sondern [ PHP ] dann passt auch das Highlighting.
Ehrlichgesagt ist der Code eine Mittelschwere Katastrope ;) Wenn du ein @ vor einer Funktion verwenden musst um die Fehler zu unterdrücken hast du es falsch gemacht. Einen Fehler löst man nicht indem man die Fehlerausgabe unterdrückt, sondern indem man dessen Ursache behebt.
Die Einrückung ist neben dem fehlenden Highlighting auch mehr als ungünstig gestaltet, da man ohne Zählen nicht erkennt wie die IFs verschachtelt sind. Ich werde es daher auch nicht komplett durchlesen.

Ich verweise dich erneut auf meinen oben genannten Post #7 da steht bereits drinn wie du es lösen musst. Du musst es also nurnoch bei dir entsprechend einsetzen. Du brauchs auch keine verschachtelten IFs, denn du willst ja überhaupt nur senden wenn die Spam Abfrage leer ist. Das heißt das du auch nur dann die Daten aufbereiten musst. Das lässt sich also mit einer einzelnen IF lösen. Deine Abfrage mit isset($_POST['email_']) ist leider der falsche Ansatz. Sobald das Formular abgesendet wird IST diese Variable mit dem Inhalt NULL gesetzt! Die Bedingung ist also immer Wahr.
Du musst wie in #7 geschildert also mit empty() anstatt isset() arbeiten. empty() prüft ob eine Variable Leer ist, isset ob eine Variable gesetzt ist, das ist ein Unterschied ;)
 
AW: Zusätzlichen Wert in PHP einbauen

Ich habe jetzt mal versucht deinen Befehl einzubauen. Aber irgendwie will es immernoch nicht funktionieren.....

PHP:
<?php
 
// ======= Konfiguration:
 
$mailTo = '****';
$mailFrom = '"*****"';
$mailSubject    = 'Feedback';
$returnPage = 'formular_correct.html';
$returnErrorPage = 'formular_incorrect.html';
$mailText = "";
 
// ======= Text der Mail aus den Formularfeldern erstellen:
 
// Wenn Daten mit method="post" versendet wurden:
if(isset($_POST)) { 
   // alle Formularfelder der Reihe nach durchgehen:
   foreach($_POST as $name => $value) {
      // Wenn der Feldwert aus mehreren Werten besteht:
      // (z.B. <select multiple>)
      if(is_array($value)) {
          // "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ":\n";
          // alle Werte des Feldes abarbeiten
          foreach($valueArray as $entry) {
             // Einrückungsleerzeichen, Wert und Zeilenumbruch 
             // dem Mailtext hinzufügen
             $mailText .= "   " . $value . "\n";
          } // ENDE: foreach
      } // ENDE: if  
      // Wenn der Feldwert ein einzelner Feldwert ist:
      else {
          // "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
          $mailText .= $name . ": " . $value . "\n";
      } // ENDE: else
   } // ENDE: foreach
} // if
 
// ======= Korrekturen vor dem Mailversand 
 
// Wenn PHP "Magic Quotes" vor Apostrophzeichen einfügt:
 if(get_magic_quotes_gpc()) {
     // eventuell eingefügte Backslashes entfernen
     $mailtext = stripslashes($mailtext);
 }
 
   
 
// ======= Mailversand
 
 
// Mail versenden und Versanderfolg merken
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
 
// ======= Return-Seite an den Browser senden
 
// Wenn der Mailversand erfolgreich war:
if(isset($_POST['submit']) AND !empty($_POST['nachricht']) AND empty($_POST['email_'])) {
   // Seite "Formular verarbeitet" senden:
   header("Location: " . $returnPage);
}
 // Wenn die Mail nicht versendet werden konnte:
else {
   // Seite "Fehler aufgetreten" senden:
   header("Location: " . $returnErrorPage);
}
 
// ======= Ende
 
exit();
 
?>


Solangsam bin ich echt am Verzweifeln...
Oder wäre es einfacher nen Captcha einzubauen? Sollte ja auch nur nen kleines Script sein, welches man sicherlich im Web findet.
Würde zwar nicht so toll aussehen, aber vielleicht würde ich das ja funktiosfähig bekommen.
 
AW: Zusätzlichen Wert in PHP einbauen

Nicht dein Ernst oder? :D Du kopierst die Zeile und passt die Namen der Variablen nicht an? Ich unterstelle mal das deine POST variablen nicht "submit" und "nachricht" heißen.

in das IF muss dann natürlich das eigentliche "Versenden", denn sonst läuft die Abfrage ja auch ins leere. Du versendest erst die E-Mail und prüfst dann ob die E-Mail versendet werden soll.

PHP:
// 'submit' durch den Namen des Absendebuttons aus dem Formular ersetzen
// 'nachricht' durch den Nachrichtentext ersetzen
// 'email_' ist das Spam protext Feld
if(isset($_POST['submit']) AND !empty($_POST['nachricht']) AND empty($_POST['email_']))
{
// Variablen wie oben verarbeiten
$mailTo = '****';
$mailFrom = '"*****"';
$mailSubject    = 'Feedback';
$returnPage = 'formular_correct.html';
$returnErrorPage = 'formular_incorrect.html';
$mailText = ""; 

  foreach($_POST as $name => $value)
  {
      // Wenn der Feldwert aus mehreren Werten besteht:
      // (z.B. <select multiple>)
      if(is_array($value)) 
      {
      // "Feldname:" und Zeilenumbruch dem Mailtext hinzufügen
      $mailText .= $name . ":\n";
      // alle Werte des Feldes abarbeiten
      
          foreach($valueArray as $entry)
          {
          // Einrückungsleerzeichen, Wert und Zeilenumbruch 
          // dem Mailtext hinzufügen
          $mailText .= "   " . $value . "\n";
          } // ENDE: foreach 
      }
      else
      {
      // "Feldname:", Wert und Zeilenumbruch dem Mailtext hinzufügen
      $mailText .= $name . ": " . $value . "\n";
      } // ENDE: else
      
    if(get_magic_quotes_gpc())
    {
    // eventuell eingefügte Backslashes entfernen
    $mailtext = stripslashes($mailtext);
    }
    
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
               
      if($mailSent == TRUE)
      {
      // Seite "Formular verarbeitet" senden:
      header("Location: " . $returnPage);
      }
      else
      {
      // Seite "Fehler aufgetreten" senden:
      header("Location: " . $returnErrorPage);
      } 
  
  }

}

So grob aus deinem Code zusammenkopiert. In die Richtung sollte es gehen wenn du noch die Namen anpasst.
 
Zuletzt bearbeitet:
AW: Zusätzlichen Wert in PHP einbauen

Code:
<form method="post" action="mail/mail_sent.php">
	<p><label>Name:<br><input type="text" name="Name"></label></p>
	<p><label>E-Mail:<br><input type="text" name="Mail"></label></p>
	<p><label>Betreff:<br><input type="text" name="Betreff"></label></p>
	<p><label>Nachricht:<br>
	<textarea name="nachricht" cols="50" rows="8"></textarea></label></p>
	<input type="submit" value="Absenden">
</form>

So, wie die Variablen dort stehen, stehen Sie auch im php. ;)

Ändert trotzdem nichts daran, dass es nicht geht.

Wo genau muss das hier:
($mailSent == TRUE)

denn hin?

Entschuldige bitte, dass ich das alles frage, aber würde ich damit klar kommen, würde ich hier nicht nachfragen. ;)
 
AW: Zusätzlichen Wert in PHP einbauen

Habe #10 editiert schau da mal rein. Könnten allerdings noch Syntax Fehler enthalten sein, habe das aus deinem Code grob zusammenkopiert und zusätzlich
Code:
<input type="submit" value="Absenden"> ersetzen durch <input type="submit" name="submit" value="Absenden">
 
AW: Zusätzlichen Wert in PHP einbauen

Vielen Dank erstmal.

Problem ist nun, dass die weiterleitung auf die "formular_correct" bzw. "formular_incorrect" nicht funktioniert.

Ich werds für heute aber mal sein lassen, solangsam raucht mir der Kopf. Dass das so kompliziert wird, hätt ich echt nicht erwartet.

Danke nochmal für deine Hilfe. :)
 
AW: Zusätzlichen Wert in PHP einbauen

Dann steht in $mailSent entweder nicht was du erwartest, mach morgen mal ein
PHP:
 var_dump($mailSent);
vor die if Abfrage für die Weiterleitung und poste das Ergebnis
oder der Pfad der aufzurufenden Datreien stimmt nicht.

Kannst du ja morgen mal prüfen.
 
AW: Zusätzlichen Wert in PHP einbauen

Habe das ganze grade mal hier eingebaut:
PHP:
     var_dump($mailSent);  
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
               
      if($mailSent == TRUE)
      {
      // Seite "Formular verarbeitet" senden:
      header("Location: " . $returnPage);
      }
      else
      {
      // Seite "Fehler aufgetreten" senden:
      header("Location: " . $returnErrorPage);
      } 
  
  }

}

Funktioniert leider immer noch nicht. :(

In der Adresszeile wird mir halt immer der Pfad der php angezeigt.
 
AW: Zusätzlichen Wert in PHP einbauen

PHP:
var_dump($mailSent);
ist eine Ausgabe, die muss natürlich schon aus logischen Gründen hinter
PHP:
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
und vor
PHP:
 if($mailSent == TRUE)
stehen. Es geht nur darum zu Prüfen ob in der Variable $mailSent überhaupt das erwartete Ergebnis (Boolean False/True) steht und den Fehler somit eingrenzen zu können.
 
AW: Zusätzlichen Wert in PHP einbauen

PHP:
$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);
      var_dump($mailSent);          
      if($mailSent == TRUE)
      {
      // Seite "Formular verarbeitet" senden:
      header("Location: " . $returnPage);
      }
      else
      {
      // Seite "Fehler aufgetreten" senden:
      header("Location: " . $returnErrorPage);
      } 
  
  }

}  
 
?>
So meinst du das, gell?

Wenn ja, dann geht es so leider auch nicht. Werde immernoch auf die mail_sent.php (Datei, die den php code enthält) geleitet.
 
AW: Zusätzlichen Wert in PHP einbauen

Dann nimm die Weiterleitungen bitte mal testweise raus. Ich möchte die Ausgabe vom var_dump(); sehen. Der Zeigt da etwas an, aber aufgrund der Weiterleitung kannst du es nicht sehen, da er auf eine andere Datei springt.
 
AW: Zusätzlichen Wert in PHP einbauen

Beim aktuellen Code kann man dir übers Kontaktformular wunderbar XSS schicken.
 
AW: Zusätzlichen Wert in PHP einbauen

@TessaKavanagh:
Habe ich grade gemacht, er leitet aber nach wie vor auf eine weiße Seite, welche die mail_sent.php darstellt.

@ZAM: Okay? Wie gesagt, ich kenne mich mit PHP null aus (sonst hätte ich wohl kaum nen Code von ner Hilfeseite im Internet genommen ;) ), suche nur ne einfache Möglichkeit diese bescheuerte Kontaktformular ans laufen zu bekommen.
 
Zurück