PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mail versenden wenn alle Felder ausgefüllt...


Swordfish
04.08.2002, 12:12:24
Moin

Ich ersuche gerade, ein Scrpt zu schreiben, das mir eine Mail sendet, wenn alle Felder ausgefüllt wurden. Soweit ist das nicht so was grosses, aber ich habe dennoch ein Problem ;)

Die meisten Scripts, die man runterladen kann haben so was wie
if ($a =="" ...) {echo "feld leer! ..."} else {mail(...)}
Das schickte mir jedesmal eine Mail, auch wenn noch nicht alle Felder ausgefüllt waren, deshalb versuchte ich, das Ganze "negativ" zu formulieren, d.h., das Mail absenden, wenn das Feld nicht leer ist, dazu habe ich sowas probiert:
if (!empty($name) AND !empty($vorname)...) {mail(...)}
funzte nicht, genauso wie:
if($a !== "" ...) {mail(...)}
Die Abfrage, die ich erreichen will ist sowas wie "not null and not empty" aber wie mache ich das?

Thx
Swordfish

Dago
04.08.2002, 12:28:51
Wie wär's mit strlen()?
>strlen() gibt die Anzahl der Zeichen in einem String zurück
also z.b.
if (strlen($vorname) > 0 && strlen($name) > 0) mail();

Swordfish
04.08.2002, 15:22:24
thx Dago

Habe es ausprobiert, aber es behebt leider mein Problem nicht... :(

Das script versendet bei jedem klicken auf "submit" eine Mail, nicht nur, wenn alle Felder ausgefüllt sind... Könnte man die Überprüfung nicht auch noch anders vornehmen?

Dago
04.08.2002, 15:32:35
Wenn man so eine If-Anweisung schreibt:

if (strlen($name) > 0 && strlen($vorname) > 0)
mail('test@test.de','test','test');
else
echo 'Error';

Dann kann das eigentlich nicht sein, da das mail() ja nur erreicht wird, wenn die If-Bedingungen erfüllt sind. Hast du vielleicht sonst noch irgendwo im Skript einen mail()-Befehl stehen, der aus Versehen ausgeführt wird?

Ben20
04.08.2002, 15:42:17
Also ich mache das meistens so:


if($vorname == "") { $fehler = "true"; }
if($nachname == "") { $fehler = "true"; }
if($nochirgendeinfeld == "") { $fehler = "true"; }
if($undnocheins == "") { $fehler = "true"; }


if($fehler != "true") {
mail(...);
}
else{
echo "Fehler: Sie haben nicht alle Felder ausgefüllt";
}

Swordfish
04.08.2002, 22:48:00
@ Dago: Ich habe da nur noch eine Überprüfung, ob mail(...) den Wert "true" ausgibt, ob also was gesendet wurde, aber sonst... irgendwie komisch... vielleicht habe ich ja einfach nur unsinn gecodet ;) werde das nochmals anschauen

@ Ben20: Muss ich gleich mal ausprobieren...

Swordfish
04.08.2002, 22:58:44
habe beides nun auprobiert und bekomme immer noch ganz viele Mails gesendet...

anyway, muss mir das script wohl doch nochmals genau unter die lupe nehmen, thx für die lösungsvorschläge! melde mich wieder beim nächsten problem (oder beim erfolg ;)

mad-boy
30.08.2002, 22:18:15
Also ich habe das so gemacht, dass man die Felder ausfüllt, dann ganz normal auf senden klickt und das ganze dann erstmal an eine ander php Datei geschickt wird. In der wird dann abgefragt
if ($name != "" && email != "") {
mail (...
usw.

Funktioniert ohne Probleme!

Magnus
31.08.2002, 08:55:37
Ja so hab ich das auch gelöst. Formular.php übergibt die Daten erst an Formcheck.php wo der User dann noch mal alle Daten sieht und prüfen kann. Wenn alles ok ist und er klickt (bzw. klicken kann :) )werden die Daten von Anmelden.php an mySQL übergeben und die Mail generiert.

Die einzelnen Felder frag ich so ab:
---------------------------------------------------------------
<? echo $p_vname; ?>
<? //Vorname angegeben?
if ($p_vname = empty($p_vname)){ $fehler=$fehler+1; // Zählt die Fehler im Formular
echo $fehler_2; // Gibt die Fehlermeldung aus. Hier z.B.: Vorname fehlt!
}
?>
--------------------------------------------------------------------

Weiter unten frag ich dann einfach ab, welchen Inhalt $fehler hat.
Also:

if ($fehler < 1) {
<input type="submit".......
und lasse den Senden-Button nur Anzeigenm wenn $fehler kleiner als 1 (also 0) ist

if ($fehler >1) {
echo 'Korregieren Sie DIE Fehler';
exit;
}
elseif ($fehler =1) {
echo ' Korregieren Sie DEN Fehler';
exit;
}
Der Hinweis kommt also abhängig von der Anzahl der Fehler in der ein- oder mehrzahl. Behebt quasi nen Schönheitsfehler.

Wichtig ist das exit innerhalb der IF-Abfrage zu setzen, damit der Ausstieg auch da erfolgt wo er soll.

Swordfish
05.09.2002, 01:02:42
thx @ all!

ich denke, ich habe da wohl das "exit" am falschen ort gemacht, bzw. die if-klammer zu früh geschlossen...

MiH
05.09.2002, 10:11:41
praktischer ist es wenn du per schleife die eingaben checkst und dann die fehler in einem array speicherst.


<form action="index.php" method="post">
<input type="text" name="myname" />
<input type="text" name="myemail" />
<input type="submit" name="submit" />
</form>

dann kannst du per php es so machen:

<?php
while(list($id,$value) = each($_POST)){
if(empty($id)): $error[] = $id; endif;
}
?>

so und dann hast du im array deine fehler und könntest sagen

if(count($error) == 0 && isset($_POST["submit"])){
mail();
}

Matt
05.09.2002, 11:12:56
an MiH: nicht umbedingt, vielleicht werden noch andere variablen übergeben, die damit nichts zu tun haben, und trotzdem leer sein können. nebenbei will man vielleicht auch überprüfen, ob die werte valid sind...



if(checkname($_POST["name"]) && checkmail($_POST["mail"])) mail();
function checkname($name)
{
$valid=true;
if(strlen($name)<4) $valid=false;
if(stristr("bin laden",$name) $valid=false;
if(!$valid)
{
print "name: <input type="text" name="name">";
return false;
}
return true;
}

function checkmail($mail)
{
$valid=true;
if(!eregi("[^@]{2,}@[^@]{1,}.[^@]{2,}",$mail) $valid=false;
# jetzt könntest du beispielsweise schauen, ob die mailaddresse if($mail=="billg@microsoft.com") $valid=false;
if(!$valid)
{
print "mailaddresse: <input type="text" name="mail">";
return false;
}
return true;
}


das kannst du noch erweitern, du kannst auch noch fehlerausgaben einblenden usw.

vorteil: Wenn keine fehler sind, wird die mail geschickt, sind fehler da (keine eingaben ebenfalls) werden die leeren oder falschen felder nochmals zum einfüllen ausgegeben. Wenn der user das script zum ersten mal aufruft, werden also alle felder ausgegeben.