einmal gehts und einmal nicht
Ferdinand W.
- php
Hi,
Hier ist in php eine programmierung mit der man emails versenden kann, du findest sie unter:
http://ferbyfun.com/kontakt.php
Nun zu meinen Problemm, einmal funktioniert es wenn ich auf abschicken klicke und einmal nicht, ist ein fehler in der programmierung?
<?
$recipient = "ferbyfun@gmx.at";
$subject = "NoText";
echo "
<html>
<head>
<link rel='stylesheet' type='text/css' href='../style.css'>
</head>
<body topmargin='50'>
<center>
<table cellspacing='0' cellpadding='5' border='0'>
";
if(strlen($name) > 3 && strlen($email) > 3 && strlen($message) > 3){
$mail.="
Nachricht von: $name ($email)
Betreff: $subject
Nachricht:
$message
";
mail($recipient,$subject,$mail,"From:$name <$email>\n");
echo "
<tr>
<td>Vielen Dank für deine Nachricht!<br><br>Ich werde mich sobald wie möglich darum kümmern.</td>
</tr>
";
}
else
echo "
<form action='$PHP_SELF' method='post'>
<tr>
<td colspan='2'>Bitte fülle alle Felder korrekt aus!</td>
</tr>
<tr>
<td>Ihr Name: </td>
<td><input type='text' name='name' value='$name'></td>
</tr>
<tr>
<td>Ihre eMail-Adresse: </td>
<td><input type='text' name='email' value='$email'></td>
</tr>
<tr>
<td valign='top'>Ihr Nachricht: </td>
<td><textarea wrap='virtual' name='message'>$message</textarea></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' value='Abschicken'> </td>
</tr>
</form>
";
echo "
</table>
</center>
</body>
</html>
";
?>
Hallo Ferdinand,
Nun zu meinen Problemm
An Deiner Stelle würde ich versuchen PHP und Html zu trennen was zum einen IMHO sauberer ist und zum anderen auch übersichtlicher. Evt. Fällt Dir der Fehler dann auch gleich auf?
Testest Du immer auf der gleichen Umgebung oder einmal lokal und dann online?
Ich rate jetzt mal ins Blaue:
einmal funktioniert es wenn ich auf abschicken klicke
register_globals = off
und einmal nicht
register_globals = on
ist ein fehler in der programmierung?
Ausser das es wie Kraut und Rüben ausschaut, solltest Du mal versuchen Deine versendeten Parameter per:
if( "isset($_POST["name"])" ) $name = $_POST["name"];
else $name = "";
entgegenzunehmen.
Gruss AndreD
Hallo,
if( "isset($_POST["name"])" ) $name = $_POST["name"];
else $name = "";
wenn man keinen else-Zweig oder eine prophylaktische Initialisierung für $name hat, kann man sich das allerdings schenken. Denn dann sit $name == false und $_POST["name"] auch.
besser geeignet wäre also z.B das Konstrukt
if (!isset($_POST["name"])) $_POST["name"] = "";
Dann hat $_POST["name"] anschließend zwar immer noch keinen Wert, aber den passenden Typ. Voruasgesetzt der Name soll ein String sein *gg*
Liebe Grüße
Chris (C)
Hallo,
if( "isset($_POST["name"])" ) $name = $_POST["name"];
else $name = "";wenn man keinen else-Zweig oder eine prophylaktische Initialisierung für $name hat, kann man sich das allerdings schenken. Denn dann sit $name == false und $_POST["name"] auch.
Weiss jetzt auch nicht was Du meinst:
if ist true wenn das Feld name der Superglobalen $_POST gesetzt ist, dann soll dieser Wert der lokalen Variablen $name zugewiesen werden. Mit dieser wird dann im Script weitergearbeitet.
Wenn false gibt es eine initialisierte Variable $name ohne Inhalt.
Mich würde jetzt genauer interessieren was daran falsch sein soll, ich bin ja immer bereit zu lernen ;-)
besser geeignet wäre also z.B das Konstrukt
if (!isset($_POST["name"])) $_POST["name"] = "";
Dann hat $_POST["name"] anschließend zwar immer noch keinen Wert, aber den passenden Typ. Voruasgesetzt der Name soll ein String sein
Ok, wenn if true ist, also die Superglobale ist nicht gesetzt, dann soll diese auch leer sein. Das macht IMHO keinen Sinn, da das Script unten eine lokale Variable $name erwartet, die so erstens nicht initialisiert ist oder zweitens nicht den Wert vom gesendeten Formular zugewiesen bekommen hat. Oder wie, oder was? ;-)
Gruss AndreD
ich habe alles gecheckt, meistens funktionierts beim ersten mal und dann erst wieder nach einigen stunden, warum? ich habe echt keine ahnung.
Hallo Ferdinand,
...
^--Tipp1: Gewöhne Dir eine Anrede an. Ich lege ja nicht so viel Wert darauf, aber viele Leute schon, und die werden es Dir mit mehr Hilfsbereitschaft danken.
ich habe alles gecheckt, meistens funktionierts beim ersten mal und dann erst wieder nach einigen stunden, warum? ich habe echt keine ahnung.
^--Tipp2: Genauere Fehlerbeschreibung hilft einem echt weiter. Schreib doch mal was genau Du schon versucht hast. Hast Du mal mit echo() geschaut wann und wo die Variablen da sind? So ist es halt nur ein stochern im Nebel und macht nicht wirklich Spass.
mail() geht meines Wissens mit der Standardkonfiguration auf localhost nicht. Die Mails kommen nur an wenn man das Script auf einem Server startet der die Mails weiterleiten kann. Ich glaub da gabs heute schon einen Thread --> [link]
...
^--Tipp1: Wie im richtigen Leben gehört es sich auch das man sich von jemandem verabschiedet, der Grund ist wie bei Tipp1 der gleiche.
Gruss AndreD
Hallo,
if( "isset($_POST["name"])" ) $name = $_POST["name"];
else $name = "";wenn man keinen else-Zweig oder eine prophylaktische Initialisierung für $name hat, kann man sich das allerdings schenken. Denn dann sit $name == false und $_POST["name"] auch.
Weiss jetzt auch nicht was Du meinst:
if ist true wenn das Feld name der Superglobalen $_POST gesetzt ist, dann soll dieser Wert der lokalen Variablen $name zugewiesen werden. Mit dieser wird dann im Script weitergearbeitet.
Wenn false gibt es eine initialisierte Variable $name ohne Inhalt.
Mhh, das glaub ich nicht. Die ist dann immer noch false.
probier mal folgendes aus:
-----------------------------------------
<?php #### init.php ####
If (isset($name))
{
echo "$name ist gesetzt<br />";
}
else
{
echo "$name ist unbekannt<br />";
}
$name = $_GET["name"];
If (isset($name))
{
echo "$name ist gesetzt<br />";
}
else
{
echo "$name ist unbekannt<br />";
}
?>
--------------------------------------
und dann wiederhol das mit diesem Aufruf:
init.php?name=chris
Mich würde jetzt genauer interessieren was daran falsch sein soll, ich bin ja immer bereit zu lernen ;-)
Es ist einfach Unsinn, im Script alle Variablen ohne Notwendigkeit nochmals zu kopieren. Man kann gleich mit den "Superglobalen" weiterarbeiten. Das spart durchaus Speicherplatz. Anders ist das, wenn man die Originalwerte, die gepostet worden sind, später nochmals benötigt.
besser geeignet wäre also z.B das Konstrukt
if (!isset($_POST["name"])) $_POST["name"] = "";
Dann hat $_POST["name"] anschließend zwar immer noch keinen Wert, aber den passenden Typ. Voruasgesetzt der Name soll ein String sein
Ok, wenn if true ist, also die Superglobale ist nicht gesetzt, dann soll diese auch leer sein. Das macht IMHO keinen Sinn, da das
hat keinen Sinn *gg*
Script unten eine lokale Variable $name erwartet, die so erstens nicht initialisiert ist oder zweitens nicht den Wert vom gesendeten Formular zugewiesen bekommen hat. Oder wie, oder was? ;-)
Was das Script untern erwaret, kann man als Programmierer ja i.d.R. selber steuern. Und wenn man saubere funktionale Auflösungen baut oder sogar OOP nutzt, dann haben die Variablen innerhalb der Funktion ohnehin einen eigenen Gültigkeitsbeeich und damit dann sinnvollerweise auch einen kurzen sprechenden Namen.
Grüße
Chris (C)
Hallo,
was funktioniert denn nicht? Strikt die Mailfunktion (Rückgabewert = false) oder kommen keine Daten an im Script?
Hast Du register_globals noch auf ON stehen? (muss ja wohl so sein...)
Grüße
Chris (C)
mein vorschlag:
versuchs mit <form action="url.htm?driss=zufall"
will sagen: der browser holt ohne zufallsanteil in der url immer alles aus dem cache. mit zufalls-quatsch am ende ist die url immer neu und der browser geht auch wirklich ins web statt in den cache.
Juppi