PDA

Volledige versie bekijken : Email versturen met php via flash?


HM_Jammer
%Europe/Berlin %793 %2005, 20:02
Hoi,

Ik ben bezig met een contact form in flash, voor een vriend van mij. Nu wil het geval, dat posten via flash naar php mij eens gelukt is. Nu wil ik dat weer doen, maar hij geeft de hele tijd aan dat het verzenden mislukt is. Iemand een oplossing?


contact.php:

<?php
if(isset($_POST['name'],$_POST['mail'],$_POST['reactie'])){
$naam = $_POST['name'];
$reactie = $_POST['reactie'];
$mail = $_POST['mail'];
$email = "pietersteenb@hotmail.com";
mail($email,"Reactie van: $name","$reactie","From: $mail <$naam>");
}
?>


perspectief contact -> button: Verstuur:

on (release, keyPress "<Enter>") {
Status = "Versturen...";
var reply_lv = new LoadVars();
var send_lv = new LoadVars();
send_lv.name = name;
send_lv.email = email;
send_lv.reactie = reactie;
send_lv.sendAndLoad("contact.php", reply_lv, "POST");
reply_lv.onLoad = loadedDotNetVars;
function loadedDotNetVars(success) {
if (success) {
Status = "Reactie Verzonden!";
trace(reply_lv.name);
trace(reply_lv.email);
trace(reply_lv.reactie);
} else {
Status = "Verzenden is mislukt!";

}
}
}

Bij voorbaat dank.
Pieter

brossiekoppie
%Europe/Berlin %846 %2005, 21:18
Ik dacht dat de loadedDotNetVars funtie enkel voor het .NET framework is (asp.NET) en ik denk dat daar het probleem zit in de communicatie met php.

Laiverd
%Europe/Berlin %874 %2005, 21:58
Ik dacht dat de loadedDotNetVars funtie enkel voor het .NET framework is (asp.NET) en ik denk dat daar het probleem zit in de communicatie met php.

Dat lijkt me niet; die functie had net zo goed pipoDeClown() kunnen heten. Met het actionscript is voor zover ik kan zien niets mis. Maar omdat je sendAndLoad gebruikt, moet je wel vanuit de PHP iets terug echoen naar Flash, anders ontvangt je reply_lv natuurlijk niks.

John

Folkert
%Europe/Berlin %971 %2005, 00:19
wel je stuurt niets terug naar flash en je gebruikt de verkeerde volgorde van laden en onLoad. Verder is het slimmer om de 'te' sturen velden in flash te controleren voor het versturen, scheelt je weer onnodig dataverkeer immers. Ook is het makkelijker jezelf aan te leren Instancenamen te gebruiken voor je textfields, in plaats van variable namen. Dan krijg je iets als dit (eh niet getst dus kan typo's bevatten)
<?php
$naam = $_POST['name'];
$mail = $_POST['email'];
$reactie = $_POST['reactie'];
//eigen mail
$email = "pietersteenb@hotmail.com";
//check en verstuur de mail
if( mail( $email, "Reactie van: $naam", "$reactie", "From: $mail <$naam>") )
{
print "&mailSend=true&";
}
else
{
print "$mailSend=false&";
}

?>

Voor je php, de check is eruit, die hoort in flash. Nu word door php terug gestuurt de variable mailSend. dus die zoek je in flash weer op. wel op de goede volgorden en even zonder functie declaraties in je onRelease (bad practise there ;) ).
Geef je button een instanceNaam en je textfields ook. denk daarbij eraan dat je het jezelf makkelijker maakt als je namen zoals dit gebruikt naam_txt of naam_btn .
Onderstaande code is ter voorbeeld, het onderste deel dien je dan op je button te zetten, het bovenste stuk op je frame 1 van je hoofdmovie (ervan uitgaande dat daar ook je textFields staan (die nu instanceNamen hebben in de code)

stop();
function loadedDotNetVars(success)
{
if (success)
{
status_txt.text = (reply_lv.mailSend == "true") ? "Mail succesvol verzonden" : "Mail verzenden mislukt !";
trace(reply_lv.name+"\n"+reply_lv.email+"\n"+reply_lv.reactie);
}
else
{
status_txt.text = "Verzenden is mislukt!";
}
}
function sendTheForm()
{
send_lv.name = nameInput_txt.text;
send_lv.email = emailInput_txt.text;
send_lv.reactie = reactieInput_txt.text;
send_lv.sendAndLoad( "contact.php", reply_lv, "POST");
}
var reply_lv = new LoadVars();
var send_lv = new LoadVars();
reply_lv.onLoad = loadedDotNetVars;

/*
Let op Deze code op je button plaatsen
*/
on (release, keyPress "<Enter>")
{
_level0.status_txt.text = "Versturen...";

if(_level0.nameInput.length > 2 && _level0.emailInput_txt.length > 4 )
{
_level0.sendTheForm();
}
else
{
trace("wel geldige naam en email invullen graag");
_level0.status_txt.text = "naam en email goed invullen aub!";
}
}


Succes

HM_Jammer
%Europe/Berlin %911 %2005, 22:53
ok, bedankt! maar.. ik snap het niet helemaal. Ik heb nu de velden de instance namen gegeven: name, mail, reactie. Op frame 1 heb ik die code gezet:
stop();
function loadedDotNetVars(success)
{
if (success)
{
status_txt.text = (reply_lv.mailSend == "true") ? "Mail succesvol verzonden" : "Mail verzenden mislukt !";
trace(reply_lv.name+"\n"+reply_lv.email+"\n"+reply_lv.reactie);
}
else
{
status_txt.text = "Verzenden is mislukt!";
}
}
function sendTheForm()
{
send_lv.name = nameInput_txt.text;
send_lv.email = emailInput_txt.text;
send_lv.reactie = reactieInput_txt.text;
send_lv.sendAndLoad( "contact.php", reply_lv, "POST");
}
var reply_lv = new LoadVars();
var send_lv = new LoadVars();
reply_lv.onLoad = loadedDotNetVars;

Op mijn button staat nu:
stop();
function loadedDotNetVars(success)
{
if (success)
{
status_txt.text = (reply_lv.mailSend == "true") ? "Mail succesvol verzonden" : "Mail verzenden mislukt !";
trace(reply_lv.name+"\n"+reply_lv.email+"\n"+reply_lv.reactie);
}
else
{
status_txt.text = "Verzenden is mislukt!";
}
}
function sendTheForm()
{
send_lv.name = nameInput_txt.text;
send_lv.email = emailInput_txt.text;
send_lv.reactie = reactieInput_txt.text;
send_lv.sendAndLoad( "contact.php", reply_lv, "POST");
}
var reply_lv = new LoadVars();
var send_lv = new LoadVars();
reply_lv.onLoad = loadedDotNetVars;

Mijn php file bevat nu de volgende code: (en het klopt wel)
<?php
$naam = $_POST['name'];
$mail = $_POST['email'];
$reactie = $_POST['reactie'];
//eigen mail
$email = "pietersteenb@hotmail.com";
//check en verstuur de mail
if( mail( $email, "Reactie van: $naam", "$reactie", "From: $mail <$naam>") )
{
print "&mailSend=true&";
}
else
{
print "$mailSend=false&";
}

?>

Nu mijn vraag: is dit allemaal goed? volgens mij niet, want het werkt niet. Ik heb er niet veel verstand van, dus weet ik niet hoe het op te lossen. Iemand op of aanmerkingen op deze aanpak? en het liefst verbeteringen?

Op de velden komt btw te staan:
_level0.name
_level0.mail
_level0.reactie ,
klopt dat?

BVD,
Greetz,
Pieter

Folkert
%Europe/Berlin %111 %2005, 03:41
dat komt er te staan in je velden omdat je de variable naam niet weggehaalt hebt ;)
De functies die je nu op je button hebt gezet kan je weghalen. dat hoort gewoon op je frame1 te staan. Zoals je ook gedaan hebt al.
Op de button zet je enkel deze code

on (release, keyPress "<Enter>")
{
_level0.status_txt.text = "Versturen...";
if (_level0.nameInput_txt.length>2 && _level0.emailInput_txt.length>4)
{
_level0.sendTheForm();
}
else
{
trace("wel geldige naam en email invullen graag");
_level0.status_txt.text = "naam en email goed invullen aub!";
}
}
Dus frame 1 heb je goed. de php meen ik ook ;) alleen nog deze code op je button.
De boel uploaden en test u maar. bijgevoegd de zip met bron bestanden

De Kale
%Europe/Berlin %593 %2005, 15:14
folkert, goede opmerking over de volgorde van sendAndLoad en laden en helemaal toppie dat je het resultaat naar flash echo'd,maar gebruik _altijd_ server side checks op de data.
client side checks zijn naar mijn mening een user friendly en server/bandwidth friendly fenomeen, maar de echte checks moeten altijd plaats vinden op de server, deze is altijd 'in control'...
als jij namelijk door een fout in je flash algoritme geen email meestuurd, of je maakt een typefout, kun je daar alleenmaar achter komen door dat server side te controleren (de server verstuurt de mail, niet flash) en daar actie op te ondernemen:
die ('&r=0&m='.urlencode('het email adres '.$_REQUEST['email'].' is niet goed').'&');

Folkert
%Europe/Berlin %668 %2005, 17:03
Daar zit wel logica in inderdaad.
Enige check die er nu serverside plaatsvind is of de mail verstuurt word. Mijnsinziens het enige wat er aan server kant gebeurd, echter je hebt gelijk dat er ook daar nog van alles kan gebeuren. De pest is dan inderdaad (zonder checks) dat het uren zoeken kan zijn.

Dus topic starter even je php ook de velden laten checken ;)

HM_Jammer
%Europe/Berlin %486 %2005, 12:40
Nou luitjes, allemaal van harte bedankt voor jullie reacties! het is nu gelukt!
In php heb ik voor de 1e 'if' nog dit gezet, als extra check:
if(isset($_POST['name'],$_POST['email'],$_POST['reactie'])){

Bedankt!!!