Kontakt Formular, wo ist der Fehler?
kaneda
- php
Hallo,
ich bastel momentan an einer Seite für einen Skatepark. Nix wildes und nix tolles. Aber das Kontakt Formular funktioniert leider nicht so ganz wie es soll.
Das komische ist, ich hab genau das gleiche kontakt formular auf einer anderen Seite eingebaut und dort funktioniert ist es einwandfrei. Den Code selbst hab ich irgendwo aus Google rausgefischt.
Der Fehler besteht darin, dass beim abschicken des Formular die Kontakt.php nicht gefunden wird, obwohl er die ja schon geöffnet wird, wenn man auf die Seite draufgeht....
Ich hab das ganze auch durch den Validation Service laufen lassen, aber das konnte mir leider nicht wirklich weiter helfen.
wäre super wenn jemand weiter weiß....
gruß Phil
Hier ist der Code.
<td width="595" valign="top" bgcolor="#DADADA" class="content"><n><strong>Kontakt</strong> - Funktioniert noch nicht <br>
<script language=JavaScript>
<!--
function isValid() {
var msg = "";
if (kontaktFormular.eMail.value.indexOf("@") < 1 ||
kontaktFormular.eMail.value.indexOf(".") < 1) {
msg += "- Die E-Mail-Adresse ist syntaktisch nicht korrekt.\n";
}
if(kontaktFormular.nachName.value == "") {
msg += "- Leeres Feld: Nachname:\n";
}
if(kontaktFormular.betreff1.value == "") {
msg += "- Leeres Feld: Betreff:\n";
}
if(kontaktFormular.nachricht.value == "") {
msg += "- Leeres Feld: Nachricht:\n";
}
if(msg == "") {
return true;
}
alert(msg);
return false;
}
-->
</script>
<?php
$formularAnzeigen = false;
if (!empty($_POST["senden"]) && (
empty($_POST["nachName"]) ||
empty($_POST["eMail"]) ||
empty($_POST["betreff1"]) ||
empty($_POST["nachricht"]))) {
$formularAnzeigen = true;
} else if (!empty($_POST["senden"]) &&
!isEmail($_POST["eMail"])) {
$formularAnzeigen = true;
echo '<span style="color: #FF0000; font-size: x-large;">Die E-Mail-Adresse ist nicht korrekt.</span>';
} else if (empty($_POST["senden"])) {
$formularAnzeigen = true;
}
if ($formularAnzeigen) {
?>
<form name="kontaktFormular" method="post" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
<table width="456" border="0">
<!--anfang Anrede-->
<tr>
<td width="8"><span class="Stil5"></span></td>
<td width="108"><span class="Stil5"><strong>Anrede:</strong> </span></td>
<td width="326"><span class="Stil5"><select name="anrede">
<option <?=($_POST['anrede']=='Frau')?'selected':''?>>Frau</option>
<option selected <?=($_POST['anrede']=='Herr')?'selected':''?>>Herr</option>
</select></span></td>
</tr>
<!--ende anrede-->
<!--anfang vorName-->
<tr>
<td><span class="Stil5"></span></td>
<td><span class="Stil5"><strong> Vorname: </strong></span></td>
<td><span class="Stil5"><input name="vorName" type="text" value="<?=$_POST['vorName']; ?>" /></span></td>
</tr>
<!--ende vorName-->
<!--anfang nachName-->
<tr>
<td><span class="Stil5"><div align="center"></div></span></td>
<td><span class="Stil5"><span class="farbe"><strong> Nachname:*</strong></span></span></td>
<td><span class="Stil5"><input name="nachName" type="text" value="<?=$_POST['nachName']; ?>" /></span></td>
</tr>
<!--ende nachName-->
<!--anfang eMail-->
<tr>
<td><span class="Stil5"><div align="center"></div></span></td>
<td><span class="Stil5"><span class="farbe"><strong>E-Mail:*</strong></span></span></td>
<td><span class="Stil5"><input name="eMail" type="text" id="eMail" value="<?=$_POST['eMail']; ?>" /></span></td>
</tr>
<!--ende eMail-->
<!--anfang betreff1-->
<tr>
<td><span class="Stil5"><div align="center"></div></span></td>
<td><span class="Stil5"><span class="farbe"><strong> Betreff:*</strong></span></span></td>
<td><span class="Stil5"><input name="betreff1" type="text" id="betreff1" value="<?=$_POST['betreff1']; ?>" size="50" /></span></td>
</tr>
<!--ende betreff1-->
<!--anfang nachricht-->
<tr>
<td><span class="Stil5"><div align="center"></div></span></td>
<td valign="top"><span class="Stil5"><strong> Nachricht:*</strong></span></td>
<td><span class="Stil5"><textarea name="nachricht" cols="40" rows="10"><?=$_POST['nachricht']; ?>
</textarea></span></td>
</tr>
<!--ende nachricht-->
<tr>
<td colspan="2"><span class="Stil5"><div align="left"></div></span></td>
<td><span class="Stil5"><input name="senden" type="submit" value="Senden" /></span></td>
</tr>
</table>
</form>
<p><span class="Stil5">
<?php
echo;
} else {
$eMail = '
Anrede:
'.$_POST['anrede'].'
Vorname:
'.$_POST['vorName'].'
Nachname:
'.$_POST['nachName'].'
E-Mail:
'.$_POST['eMail'].'
Betreff:
'.$_POST['betreff1'].'
Nachricht:
'.$_POST['nachricht'].'';
if (@mail("DIE_EMAIL_ADRESSE@irgendwas.de",
"Neue Nachricht vom Kontaktformular",
$eMail)) {
echo "Die Nachricht wurde an Showmaker-Entertainment gesendet. Vielen dank!<br />";
} else {
echo "E-Mail-Verkehr funktioniert zur Zeit nicht<br />";
}
if ($_POST['kopie']) {
if (@mail($_POST['eMail'],
"",
$eMail)) {
echo "<br />";
}
}
}
function isEmail($email) {
$nonascii = "\x80-\xff";
$nqtext = "[^\$nonascii\015\012"]";
$qchar = "\[^$nonascii]";
$protocol = "(?:mailto:)";
$normuser = "[a-zA-Z0-9][a-zA-Z0-9_.-]*";
$quotedstring = ""(?:$nqtext|$qchar)+"";
$user_part = "(?:$normuser|$quotedstring)";
$dom_mainpart = "[a-zA-Z0-9][a-zA-Z0-9._-]*.";
$dom_subpart = "(?:[a-zA-Z0-9][a-zA-Z0-9._-]*.)*";
$dom_tldpart = "[a-zA-Z]{2,5}";
$domain_part = "$dom_subpart$dom_mainpart$dom_tldpart";
$regex = "$protocol?$user_part@$domain_part";
if (preg_match("/^$regex$/",$email)) {
return true;
}
return false;
}
?>
</span><span class="Stil5"></span></p>
<p class="Stil6 farbe"> </p>
<p><span class="Stil5"></span></p>
</n>
<p> </p></td>
Hallo kaneda,
nicht, daß ich der große PHP-Frickler wäre, aber könnte es sein, daß das hier im <form>
<?=$_SERVER
eigentlich
<? $_SERVER
heißen müßte?
Gruß aus Köln-Ehrenfeld,
Elya
Moin!
nicht, daß ich der große PHP-Frickler wäre, aber könnte es sein, daß das hier im
<form>
Stimmt, Elya, du bist nicht "der" große PHP-Frickler :), deshalb als Erklärung, für später mal:
<?=$_SERVER
Das ist die Kurzform von <? echo $_SERVER ... ?>
. Funktioniert aber nur, wenn Short-Open-Tags aktiviert sind.
<? $_SERVER
Das hingegen ist "nix". :)
Korrekte Alternativform, die in allen PHP-Installationen funktioniert, wäre:
<?php echo $_SERVER ... ?>
- Sven Rautenberg
Hallo Sven,
Stimmt, Elya, du bist nicht "der" große PHP-Frickler :), deshalb als Erklärung, für später mal:
<?php echo $_SERVER ... ?>
war ja klar, wenn ich *einmal* auf eine PHP-Frage zu antworten versuche, geht das natürlich schief ;-)
Danke für die Aufklärung, ich bleib bei meinem CSS-Gefrickel ;-)
Gruß aus Köln-Ehrenfeld,
Elya
Mahlzeit,
Aber das Kontakt Formular funktioniert leider nicht so ganz wie es soll.
"Funktioniert nicht" ist keine sinnvolle und hilfreiche Problembeschreibung.
Das komische ist, ich hab genau das gleiche kontakt formular auf einer anderen Seite eingebaut und dort funktioniert ist es einwandfrei. Den Code selbst hab ich irgendwo aus Google rausgefischt.
Ich fasse nochmal zusammen: Du kopierst fremden Code - aus wohlmöglich unterschiedlichen Quellen - zusammen, weißt eigentlich gar nicht, was Du da tust, hoffst, dass alles funktioniert und wirfst - da es erwartungsgemäß "nicht funktioniert" - den Lesern dieses Forums den unkommentierten Quelltext ohne aussagekräftige Fehlermeldungen zum Fraß^H^H^H^HFehler beseitigen vor?
Geht's noch?
Der Fehler besteht darin, dass beim abschicken des Formular die Kontakt.php nicht gefunden wird, obwohl er die ja schon geöffnet wird, wenn man auf die Seite draufgeht....
Was heißt "nicht gefunden"?
Ich hab das ganze auch durch den Validation Service laufen lassen, aber das konnte mir leider nicht wirklich weiter helfen.
Das kann der natürlich auch nur, wenn ein Fehler in der HTML-Struktur vorliegt - dafür ist er da. Nicht jedoch für das Passend-machen zusammenkopierter Skripte oder ähnliche Schweinereien.
<td width="595" valign="top" bgcolor="#DADADA" class="content"><n><strong>Kontakt</strong> - Funktioniert noch nicht <br>
<script language=JavaScript>
Es fehlt <http://de.selfhtml.org/html/referenz/attribute.htm#script@title=das zwingend erforderliche "type"-Attribut>. Weiterhin empfiehlt es sich, SÄMTLICHE Attributwerte in Anführungszeichen einzuschließen.
<!--
Das Auskommentieren von Javascript-Code ist überflüssig.
function isValid() {
Eine Gültigkeitsprüfung der Formularwerte in Javascript ist allerhöchstens die Kür - in jedem Fall erforderliche Pflicht (und bei Dir nicht vorhanden) sollte die entsprechende serverseitige Prüfung sein.
<?php
Du solltest Dir bei Gelegenheit mal das EVA-Prinzip zu Gemüte führen: Aus Gründen der Übersichtlichkeit und der Fehlerverarbeitung ist es sinnvoll, als erstes alle Eingaben (bei PHP-Skripten sind das z.B. GET- und POST-Variablen) entgegenzunehmen und ggf. zu validieren, danach zu verarbeiten und anschließend die Ausgabe aufzubereiten, bevor das erste Stückchen HTML-Code ausgegeben wird.
if (@mail("DIE_EMAIL_ADRESSE@irgendwas.de",
Vielleicht solltest Du an dieser Stelle einfach mal nicht die evtl. von mail() zurückgelieferten Rückgabewerte ignorieren?
Generell ist es sinnvoll, wenn irgendwas in PHP "nicht funktioniert", erstmal das error_reporting() auf E_ALL zu stellen.
MfG,
EKKi
Der Fehler besteht darin, dass beim abschicken des Formular die Kontakt.php nicht gefunden wird, obwohl er die ja schon geöffnet wird, wenn man auf die Seite draufgeht....
Hallo,
irgendwie kann ich die Frage schon verstehen.
Es gibt meiner Meinung nach heutzutage 3 Forenposter:
Da es viele "Uninformierte" gibt, werden häufig Anfragen von Menschen, die nicht hinter Ihren Fehler kommen ignoriert.
Was meinst Du genau mit kontakt.php nicht gefunden?
Aus welchen Quellen hast Du das Skript?
Hallo!
Mir ist etwas aufgefallen.
Schau dir mal die Fehlermeldung an.
Not Found
The requested URL /skatepark/skatepark/kontakt.php was not found on this server.
Schau jetzt mal die URL an. (skatepark/skatepark/kontakt.php)
Kann es sein, dass du da ein „/skaterpark“ zu viel hast?
Probier mal die weiterleitung zu kontakt.php auf diese URL um zu ändern: „skaterpark/kontakt.php“ ohne “.
Liebe Grüße,
Markus
@Markus
hi,
ja das ist mir auch shcon aufgefallen nur wenn ich im quelltext danach suche, wird nichts gefunden. deswegen wusst ich
zu dem zeitpunkt auch nicht weiter.
@EKKi
mim falschen fuß aufgestanden? tut mir leid wenn ich mich nicht ganz so super damit auskenne. nunja egal. ich weiß nicht mehr
wo ich die code für das formular her hab, dass ist es ja. ich weiß aber noch, dass das von nem typen war, der meinte dass es im
wurscht ist, was andere mit dem formular machen, hauptsache er konnte helfen. und das hat er mir zu dem zeitpunkt auch.....
aber trotzdem danke für deinen eintrag
Mahlzeit,
ja das ist mir auch shcon aufgefallen nur wenn ich im quelltext danach suche, wird nichts gefunden. deswegen wusst ich
zu dem zeitpunkt auch nicht weiter.
Was steht denn in $_SERVER['PHP_SELF'] drin? Immerhin gibst Du das ja als Ziel des Formulars an ...
MfG,
EKKi
hallo, ja das problem hat sich auch nur um ein ordner verlagert. jetzt wird plötzlich die skatepark/skatepark/skatepark/kontakt.php gesucht...
<form name="kontaktFormular" method="post" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
<table width="456" border="0">
Mahlzeit,
hallo, ja das problem hat sich auch nur um ein ordner verlagert. jetzt wird plötzlich die skatepark/skatepark/skatepark/kontakt.php gesucht...
Also hast Du - wie ich bereits schrieb - Dein Problem nicht gelöst.
Dashalb nochmal meine Frage: was steht in $_SERVER['PHP_SELF'] (bitte schreib das mit den Anführungszeichen - alles andere wäre falsch)?
<form name="kontaktFormular" method="post" action="<?=$_SERVER[PHP_SELF]; ?>" onSubmit="return isValid()">
Ich vermute mal schlicht und ergreifend, dass Deine Ordner-Struktur und/oder Server-Konfiguration unsauber ist (z.B. die von Dir verwendete Domain zeigt auf einen Ordner innerhalb einer anderen Domain o.ä.). Das sinnvollste wäre wohl, dies zu beheben. Alternativ - wenn Du lieber aufs Problem-Verschleiern und Symptome-kurieren stehst - könntest Du stattdessen auch $_SERVER['SCRIPT_NAME'] verwenden ... vielleicht hilft das.
Trotz alledem solltest Du Dir aber zumindest die Grundlagen von PHP aneignen.
MfG,
EKKi
hallo, ja das problem hat sich auch nur um ein ordner verlagert. jetzt wird plötzlich die skatepark/skatepark/skatepark/kontakt.php gesucht...
Tja, das läßt darauf schließen, daß deine document root /skatepark/ lautet. Allerdings weiß HTTP nix von der Ordnerstruktur auf dem Server, für ihn ist /skatepark/ das gleiche wie www.skatepark-bensheim.de. PHP_SELF liefert aber den kompletten Pfad relativ zum Rootverzeichnis des Servers, also inkl. /skatepark/. Versuch's mal mit $_SERVER['SCRIPT_NAME']. Und laß dich nicht von irgendwelchen Hobbypädagogen kirre machen, das Beispiel im PHP-Manual zu $_SERVER['PHP_SELF'] ist scheiße.
JJ
Komisch, ich hab das problem gelöst. Ich hab einfach aufm FTP einen im skatepark oder noch ein skatepark ordner erstellt und die kontakt.php reinkopiert und jetzt gehts, warum auch immer.
Aber trotzdem danke nochmal.
Mahlzeit,
Komisch, ich hab das problem gelöst. Ich hab einfach aufm FTP einen im skatepark oder noch ein skatepark ordner erstellt und die kontakt.php reinkopiert und jetzt gehts, warum auch immer.
Damit hast Du das Problem aber nicht gelöst, d.h. seine Ursachen behoben. Du hast lediglich die Auswirkungen verschleiert. Ich weise nochmal auf meine Frage hin.
MfG,
EKKi