Formular will um's Verrecken nicht funktionieren
wheelie86
- php
der Quelltext der kontakt.html (mailer.php liegt in einem parallelen Ordner zum html-Ordner, in dem sich die kontakt.html befindet):
<form action="../form/mailer.php" method="post">
<p><label for="name">Name:</label><br />
<input type="text" name="name" id="name" value="" /><br /></p>
<p><label for="emailad">Email:</label><br />
<input type="text" name="emailad" id="emailad" value="" /><br /></p>
<p><label for="message">Nachricht:</label><br />
<textarea cols="40" rows="6" name="text" id="text"></textarea><br /></p>
<p class="lastformitem"><input type="submit" name="send" class="button" value="Weg damit!" /></p>
</form>
Und hier die mailer.php:
<?php
#
# patShaping Form E-Mail 2.3.5a
#
# Versenden einer E-Mail, die ueber ein Kontaktformular
# geschrieben wurde.
#
# Autor: Patrick Canterino <patrick@patshaping.de>
# Letzte Aenderung: 14.4.2007
#
#
# Einstellungen, Beschreibung siehe readme.txt
$mailto = 'feedback@beispiel.de';
$default_subject = 'Feedback';
$friendly_sender = 1;
$show_starttext = 1;
$line_break = 0;
$add_header = 1;
# Ende Einstellungen
$emailad = formdata('emailad');
$name = formdata('name');
$subject = formdata('subject');
$text = formdata('text');
# Pruefen, ob alle Formular-Felder ausgefuellt wurden
if(!$name && !$emailad && !$subject && !$text) showhtml('include/no_data.inc');
if(!$name) showhtml('include/no_name.inc');
if(!$emailad) showhtml('include/no_emailad.inc');
if(!$text) showhtml('include/no_text.inc');
if(!$subject) $subject = $default_subject;
# Betreff pruefen und ihn ggf. mit Quoted-Printable codieren (IMAP-Modul muss vorhanden sein)
if(function_exists('imap_8bit') && preg_match("/[\200-\377]/",$subject))
{
$subject_tmp = imap_8bit($subject);
if($subject_tmp != $subject)
{
$subject = str_replace(' ','_',$subject_tmp);
$subject = str_replace('"','=22',$subject);
$subject = "=?iso-8859-1?Q?$subject?=";
$subject = str_replace("=\015\012","?=\015\012 =?iso-8859-1?Q?",$subject);
}
}
# Pruefen, ob eingegebene E-Mail-Adresse (im Internet) gueltig ist
# Danke an "ich" aus dem SELFHTML Forum fuer die Muehe
if(!preg_match('/^([a-z0-9]+([\.]?|[-]?|[_]?)?)*([a-z0-9]+([\.]?[_]?)?)@([a-z0-9]+([\.]?|[-]?)?)*[a-z0-9]+\.{1}[a-z]{2,6}$/i',$emailad)) showhtml('include/invalid_emailad.inc');
# Datum und Zeit bestimmen
if(function_exists('date_default_timezone_set')) date_default_timezone_set('Europe/Berlin');
$zeit = getdate();
# Wochentag herausfinden
$wochentage = array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
$wochentag = $wochentage[$zeit['wday']];
# Datum und Uhrzeit formatieren
$datum = $zeit['mday'].'.'.$zeit['mon'].'.'.$zeit['year'];
$uhrzeit = sprintf('%02d:%02d:%02d',$zeit['hours'],$zeit['minutes'],$zeit['seconds']);
# E-Mail zusammensetzen
if($show_starttext) $starttext = "$name ($emailad) schrieb am $wochentag, dem $datum, um $uhrzeit:\n\n";
$mailtext = $starttext.$text;
if($line_break && is_int($line_break)) $mailtext = wordwrap($mailtext,$line_break);
$mailtext = preg_replace("/\015\012|\012|\015/","\n",$mailtext);
# Header der E-Mail
if($friendly_sender) $header = "From: $emailad\n";
if($add_header)
{
if(!$friendly_sender) $header .= "Reply-To: $emailad\n";
$header .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$header .= "Content-Transfer-Encoding: 8bit\n";
$header .= "MIME-Version: 1.0\n";
$header .= "X-Mailer: patShaping Form E-Mail 2.3.5a\n";
$header .= "X-Sender-IP: [".$HTTP_SERVER_VARS['REMOTE_ADDR']."]";
}
else $header .= "Reply-To: $emailad";
# E-Mail versenden
# Wenn die E-Mail nicht versendet werden kann, wird eine Fehlermeldung ausgegeben
@mail($mailto,$subject,$mailtext,$header) || showhtml('include/send_error.inc');
showhtml('include/mail_sent.inc');
# E-Mail wurde versendet und Erfolgsmeldung ausgegeben
# formdata()
#
# Formulardaten bei deaktiviertem register_globals auslesen
#
# Parameter: Name des Formularfeldes
#
# Rueckgabe: Inhalt des Formularfeldes (String oder Array)
#
# Bemerkungen: - Wenn der HTTP-Zugriff nicht POST oder GET ist,
# wird nichts zurueckgegeben.
# - Codierende Backslashes werden automatisch entfernt
function formdata($param)
{
switch($HTTP_SERVER_VARS['REQUEST_METHOD'])
{
case 'GET':
if(isset($HTTP_GET_VARS[$param]))
{
$value = $HTTP_GET_VARS[$param];
break;
}
else return null;
case 'POST':
if(isset($HTTP_POST_VARS[$param]))
{
$value = $HTTP_POST_VARS[$param];
break;
}
else return null;
default:
return null;
}
if(get_magic_quotes_gpc())
{
if(is_array($value)) return array_map('stripslashes',$value);
else return stripslashes($value);
}
else return $value;
}
# showhtml()
#
# HTML-Datei anzeigen und Script beenden
#
# Parameter: HTML-Datei
function showhtml($file)
{
readfile($file);
exit;
}
#
### Ende ###
?>
Ich bin echt am verzweifeln, die einzige Ausgabe, die ich bekomme, ist diese:
Keine Formularfelder - nix außer dem Vorhergehenden.
Ich hoffe, ihr könnt mir helfen...
Hallo,
sieht so aus, als ob die Datei nicht über PHP geparst wird.
Ist PHP denn auf deiner Umgebung verfügbar?
Gruß Peter
Ich habe XAMPP in der aktuellen Version laufen. Apache und MySQL gestartet (kein Häkchen in den Svc-Kästchen ist doch richtig, oder?) und trotzdem geht's nicht.
Ich habe XAMPP in der aktuellen Version laufen. Apache und MySQL gestartet (kein Häkchen in den Svc-Kästchen ist doch richtig, oder?) und trotzdem geht's nicht.
Und Du hast beide Ordner (html und form) als Unterordner im Ordner "htdocs"?
Sonst gibt das nix.
Sieht wirklich so aus, als wenn Dein Formmailer nicht geparst wird.
Gruß, Thomas
'ǝɯɐu$ ıɥ
Und Du hast beide Ordner (html und form) als Unterordner im Ordner "htdocs"?
und du rufst es zb so auf: http://localhost/kontakt.html
ssnɹƃ
ʍopɐɥs
'ǝɯɐu$ ıɥ
Und Du hast beide Ordner (html und form) als Unterordner im Ordner "htdocs"?
und du rufst es zb so auf: http://localhost/kontakt.html
Korrekt, das ist auch wichtig. Danke für die Ergänzung.
Gruss, Thomas
und du rufst es zb so auf: http://localhost/kontakt.html
AAARGH, Asche auf mein Haupt!
Wer Pfade in der Adresszeile lesen kann, ist klar im Vorteil ^^
Wenn der auf das file:-Verzeichnis geht, kann das ja gar nicht gehen ^^
Das Problem wäre also gelöst, besten Dank!
Nun das nächste: Egal, was ich im Formular eingebe, die Weiterleitung erfolgt auf die mailer.php, aber im Fenster steht immer: Es wurden keine Daten übergeben. Bin ich echt sooooo blöd?
und du rufst es zb so auf: http://localhost/kontakt.html
AAARGH, Asche auf mein Haupt!
Wer Pfade in der Adresszeile lesen kann, ist klar im Vorteil ^^
Lach :-)
Ist aber vermutlich fast allen von uns schon mal passiert ;-)
Nun das nächste: Egal, was ich im Formular eingebe, die Weiterleitung erfolgt auf die mailer.php, aber im Fenster steht immer: Es wurden keine Daten übergeben. Bin ich echt sooooo blöd?
Lass Dir doch mal am Scriptanfang anzeigen, welche Variablen Du hast und wie sie belegt sind.
<php
phpinfo(INFO_VARIABLES);
exit;
...
?>
Grüße, Thomas
<php
phpinfo(INFO_VARIABLES);
exit;
...
?>
Und wo genau gehört das hin? In die mailer.php direkt vor das erste Tag oder in die kontakt.html, wo sich das Formular befindet? Sorry, bin absoluter PHP-Neuling und versuche, mich da durch Lesen und learning-by-doing sowie haufenweise kommentierte Vorlagen reinzuarbeiten...
Und wo genau gehört das hin? In die mailer.php direkt vor das erste Tag oder in die kontakt.html, wo sich das Formular befindet? Sorry, bin absoluter PHP-Neuling und versuche, mich da durch Lesen und learning-by-doing sowie haufenweise kommentierte Vorlagen reinzuarbeiten...
In die mailer.php direkt hinter Dein
<php
gehört zum testen:
phpinfo(INFO_VARIABLES);
exit;
Dann könntest Du geststellen, dass Deine mailer.php
zwar $_POST['$name'] usw. kennt, aber eben nicht $name usw..
Grüße, Thomas
In die mailer.php direkt hinter Dein
<php
gehört zum testen:
phpinfo(INFO_VARIABLES);
exit;Dann könntest Du geststellen, dass Deine mailer.php
zwar $_POST['$name'] usw. kennt, aber eben nicht $name usw..
Grüße, Thomas
Die relevanten Einträge sind die hier, oder?
_REQUEST["name"] Albert Einstein
_REQUEST["emailad"] Albert.Einstein@Relativ.com
_REQUEST["text"] ich habe nichts zu sagen.
_REQUEST["send"] Gib's mir!
_POST["name"] Albert Einstein
_POST["emailad"] Albert.Einstein@Relativ.com
_POST["text"] ich habe nichts zu sagen.
_POST["send"] Gib's mir!
Und wie muss ich nun verfahren, damit das funktioniert?
Die relevanten Einträge sind die hier, oder?
_REQUEST["name"] Albert Einstein
_REQUEST["emailad"] Albert.Einstein@Relativ.com
_REQUEST["text"] ich habe nichts zu sagen.
_REQUEST["send"] Gib's mir!
_POST["name"] Albert Einstein
_POST["emailad"] Albert.Einstein@Relativ.com
_POST["text"] ich habe nichts zu sagen.
_POST["send"] Gib's mir!Und wie muss ich nun verfahren, damit das funktioniert?
Ja, das sind die relevanten Einträge.
Die sind einmal im Array $_REQUEST drin und einmal im ARRAY $_POST.
Dein Script versucht, das zu berücksichtigen.
Schau bitte jetzt mal nach, aus welcher der includierten Dateien Deine Fehlermeldung stammt. (Ich vermute, es ist die "no_data.inc".
Denn dann weißt Du, dass weder Name, noch mailadresse, noch Betreff, noch Text in Deinem Script unter den dort verwendeten Variablen angekommen sind.
Danach setz doch mal bitte anstelle von
phpinfo(INFO_VARIABLES);
exit;
von vorhin
phpinfo(INFO_VARIABLES);
echo ("Name: $name<br>");
echo ("Name2: $_POST['name<br>'];
exit;
Und erzähle uns, was Dein SDcript dazu sagt.
Grüße, Thomas
Danach setz doch mal bitte anstelle von
phpinfo(INFO_VARIABLES);
exit;von vorhin
phpinfo(INFO_VARIABLES);
echo ("Name: $name<br>");
echo ("Name2: $_POST['name<br>'];
exit;Und erzähle uns, was Dein SDcript dazu sagt.
Grüße, Thomas
Soll heißen:
phpinfo(INFO_VARIABLES);
echo ("Name: $name<br>");
echo ("Name2: $_POST['name']<br>";
exit;
Soll heißen:
phpinfo(INFO_VARIABLES);
echo ("Name: $name<br>");
echo ("Name2: $_POST['name']<br>";
exit;
Selber Fehler, selbe Stelle.
Soll heißen:
phpinfo(INFO_VARIABLES);
echo ("Name: $name<br>");
echo ("Name2: $_POST['name']<br>";
exit;Selber Fehler, selbe Stelle.
Na ok, dann mach halt die Klammer noch zu:
echo ("Name2: $_POST['name']<br>");
Na ok, dann mach halt die Klammer noch zu:
echo ("Name2: $_POST['name']<br>");
Peinlich, dass ich das nicht gesehen hab - dennoch ist der Fehler exakt der gleiche.
Na ok, dann mach halt die Klammer noch zu:
echo ("Name2: $_POST['name']<br>");
Peinlich, dass ich das nicht gesehen hab - dennoch ist der Fehler exakt der gleiche.
Dann schreibs mal so um:
phpinfo(INFO_VARIABLES);
echo ("Name: ".$name."<br>");
echo ("Name2: ".$_POST['name']."<br>");
exit;
Dann schreibs mal so um:
phpinfo(INFO_VARIABLES);
echo ("Name: ".$name."<br>");
echo ("Name2: ".$_POST['name']."<br>");
exit;
Nun hab ich die Tabelle mit den Variablen:
_REQUEST["name"] Albert Einstein
_REQUEST["emailad"] Albert.Einstein@Relativ.com
_REQUEST["text"] Sein oder nicht Sein...
_REQUEST["send"] Gib's mir!
_POST["name"] Albert Einstein
_POST["emailad"] Albert.Einstein@Relativ.com
_POST["text"] Sein oder nicht Sein...
_POST["send"] Gib's mir!
und darunter:
Name:
Name2: Albert Einstein
und darunter:
Name:
Name2: Albert Einstein
Ok. Damit wird klar, dass Deine Funktion "formdata" nicht funktioniert.
Dann ersetze mal den Teil:
$emailad = formdata('emailad');
$name = formdata('name');
$subject = formdata('subject');
$text = formdata('text');
und mache daraus:
$emailad = $_POST['emailad'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];
Viele kopieren diese Variablen nicht um, weils
Für heute solls mal genehm sein ;-)
Und dann poaste, was Dein Script so macht.
Grüße, Thomas
P.S:
Und löschen (falls Du willst) darfst Du getrost den nicht funktionierenden Teil:
# wird nichts zurueckgegeben.
# - Codierende Backslashes werden automatisch entfernt
function formdata($param)
{
switch($HTTP_SERVER_VARS['REQUEST_METHOD'])
{
case 'GET':
if(isset($HTTP_GET_VARS[$param]))
{
$value = $HTTP_GET_VARS[$param];
break;
}
else return null;
case 'POST':
if(isset($HTTP_POST_VARS[$param]))
{
$value = $HTTP_POST_VARS[$param];
break;
}
else return null;
default:
return null;
}
if(get_magic_quotes_gpc())
{
if(is_array($value)) return array_map('stripslashes',$value);
else return stripslashes($value);
}
else return $value;
}
...
und mache daraus:
$emailad = $_POST['emailad'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];
...
Also langsam verzweifel ich echt, die Ausgabe ist schon wieder die gleiche wie gerade eben.
Also langsam verzweifel ich echt, die Ausgabe ist schon wieder die gleiche wie gerade eben.
phpinfo(INFO_VARIABLES);
echo ("Name: ".$name."<br>");
echo ("Name2: ".$_POST['name']."<br>");
exit;
jetzt komplett weider rausnehmen.
Hey? Bitte ein bißchen mitdenken, ok?
Hey? Bitte ein bißchen mitdenken, ok?
Entschuldigung, mein Fehler. Wie gesagt, absolutes Neuland für mich.
Nun ist der Inhalt der Datei "send_error.inc" zu sehen (Beim Versenden der E-Mail ist ein Fehler aufgetreten!).
Hey? Bitte ein bißchen mitdenken, ok?
Entschuldigung, mein Fehler. Wie gesagt, absolutes Neuland für mich.
Nun ist der Inhalt der Datei "send_error.inc" zu sehen (Beim Versenden der E-Mail ist ein Fehler aufgetreten!).
Na prima. Daran siehst Du, dass Dein Script zu laufen scheint.
Deine nächsten Schritte:
Lade es nun auf einen Webserver oder konfiguriere Dein XAMPP/Intranet so, dass es einen Mailversand beinhaltet.
Grüße, Thomas
Lade es nun auf einen Webserver oder konfiguriere Dein XAMPP/Intranet so, dass es einen Mailversand beinhaltet.
Grüße, Thomas
So, mit viel Suchen beim großen "G" und diversen Tests mit Einstellungen im Bereich [mail_function] (SMTP und sendmail_from) der php.ini bin ich nach wie vor am verzweifeln, denn nun bekomme ich den Fehler "verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()", mit dem ich trotz ausgiebiger Suche nichts anfangen kann.
Die relevanten Einträge sind die hier, oder?
_REQUEST["name"] Albert Einstein
_REQUEST["emailad"] Albert.Einstein@Relativ.com
_REQUEST["text"] ich habe nichts zu sagen.
_REQUEST["send"] Gib's mir!
_POST["name"] Albert Einstein
_POST["emailad"] Albert.Einstein@Relativ.com
_POST["text"] ich habe nichts zu sagen.
_POST["send"] Gib's mir!Und wie muss ich nun verfahren, damit das funktioniert?
Ja, das sind die relevanten Einträge.
Die sind einmal im Array $_REQUEST drin und einmal im ARRAY $_POST.
Dein Script versucht, das zu berücksichtigen.Schau bitte jetzt mal nach, aus welcher der includierten Dateien Deine Fehlermeldung stammt. (Ich vermute, es ist die "no_data.inc".
Denn dann weißt Du, dass weder Name, noch mailadresse, noch Betreff, noch Text in Deinem Script unter den dort verwendeten Variablen angekommen sind.
Danach setz doch mal bitte anstelle von
phpinfo(INFO_VARIABLES);
exit;von vorhin
phpinfo(INFO_VARIABLES);
echo ("Name: $name<br>");
echo ("Name2: $_POST['name<br>'];
exit;Und erzähle uns, was Dein SDcript dazu sagt.
Grüße, Thomas
Korrekt, die Fehlermeldung steht so wortwörtlich in der "no_data.inc".
Nachdem ich dann das phpinfo-Zeug ersetzt habe, zeigt der Browser "Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\xampp\htdocs\Kopie von 3502\form\mailer.php on line 3".
Der dazugehörige Auszug:
echo ("Name2: $_POST['name<br>'];
Nachdem ich dann das phpinfo-Zeug ersetzt habe, zeigt der Browser "Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\xampp\htdocs\Kopie von 3502\form\mailer.php on line 3".
Deshalb ja mein Posting unter dem Namen:
kleine Korrektur ;-)
'ǝɯɐu$ ıɥ
Nun das nächste: Egal, was ich im Formular eingebe, die Weiterleitung erfolgt auf die mailer.php, aber im Fenster steht immer: Es wurden keine Daten übergeben. Bin ich echt sooooo blöd?
Hängt es daran? is doch unlogisch.
if(!$name && !$emailad && !$subject && !$text) showhtml('include/no_data.inc');
if(!$name) showhtml('include/no_name.inc');
if(!$emailad) showhtml('include/no_emailad.inc');
if(!$text) showhtml('include/no_text.inc');
if(!$subject) $subject = $default_subject;
ssnɹƃ
ʍopɐɥs
Hängt es daran? is doch unlogisch.
if(!$name && !$emailad && !$subject && !$text) showhtml('include/no_data.inc');
if(!$name) showhtml('include/no_name.inc');
if(!$emailad) showhtml('include/no_emailad.inc');
if(!$text) showhtml('include/no_text.inc');if(!$subject) $subject = $default_subject;
>
> ssnɹƃ
> ʍopɐɥs
Hi,
ist nicht zwingend unlogisch, da showhtml() ja ein exit; aufsetzt.
Ich denke eher, es liegt daran, dass das Script auf register globals on aufsetzt.
Daher kennt das Script die eingehenden Variablen nicht und muss in diesem Bereich angepasst werden. ;-)
Grüße, Thomas
'ǝɯɐu$ ıɥ
ist nicht zwingend unlogisch, da showhtml() ja ein exit; aufsetzt.
Das kommt davon wenn man && für || liest *schäm*
Ich denke eher, es liegt daran, dass das Script auf register globals on aufsetzt.
Pöse :-(
Daher kennt das Script die eingehenden Variablen nicht und muss in diesem Bereich angepasst werden. ;-)
Besser is das!
ssnɹƃ
ʍopɐɥs
Ich habe XAMPP in der aktuellen Version laufen. Apache und MySQL gestartet (kein Häkchen in den Svc-Kästchen ist doch richtig, oder?) und trotzdem geht's nicht.
Und Du hast beide Ordner (html und form) als Unterordner im Ordner "htdocs"?
Sonst gibt das nix.
Sieht wirklich so aus, als wenn Dein Formmailer nicht geparst wird.Gruß, Thomas
Im Ordner htdocs hab ich nen Unterordner mit meinem Projekt, darin die Ordner html und form. Ist das schon ein Fehler?
'ǝɯɐu$ ıɥ
Im Ordner htdocs hab ich nen Unterordner mit meinem Projekt, darin die Ordner html und form. Ist das schon ein Fehler?
Nicht wenn du es richtig referenzierst/aufrufst.
http://localhost/projektname/html/kontakt.html
ssnɹƃ
ʍopɐɥs