PHP, AJAX és HTML email küldés
Sziasztok! Gondom akadt email küldéssel, ami adatbázist használ. Több probléma is van vele:
- a php nem küldi ki az emailt
- az adatbázis ugyan bekerülnek az adatok, de ékezet problémái vannak (UTF-8 elvileg)
Az egész történet odáig jut el, hogy kitölti a felhasználó, kattint, kiírja, hogy üzenet küldése, majd mintha visszadobna egy üzenetet, de csak a helyét jeleníti meg. Nem írja a ki hibát vagy azt, hogy sikeresen elküldte volna. A háttérben "sikeresen - rossz karakter kódolással" kerülnek az adatok az adatbázisba. Email nem érkezik meg.
Ha valaki tud segíteni, azt megköszönném! Üdv
HTML része:
<div id="wrap" class="clearfix">
<div class="mail">
<div id="response"></div>
<form id="formail" action="" method ="post">
<label>Név : </label>
<input type="text" name="name" id="name" />
<label>Email cím :</label>
<input type="text" name="mail" id="mail" />
<label>Életkor : </label>
<input type="text" name="subject" id="subject" />
<label>Kérdésed van? </label>
<textarea name="text" id="text" cols="40" rows="3"></textarea>
<div class="clear"><input type="submit" value="sendmail" id="sendmail" name="sendmail" /></div>
</form>
</div>
</div>
AJAX része:
$(document).ready(function(){
$("#sendmail-husvet").click(function(){
var valid = '';
var isr = '!';
var name = $("#name").val();
var mail = $("#mail").val();
var subject = $("#subject").val();
var text = $("#text").val();
if (name.length<5) {
valid += '<br />Nem írtad be a neved'+isr;
}
if (!mail.match(/^([a-z0-9._-]+##kukac##[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
valid += '<br />E-mail cím hiányzik vagy hibás'+isr;
}
if (subject.length<1) {
valid += '<br />Nem adtad meg hány éves vagy'+isr;
}
if (text.length<3) {
valid += '<br />Nem kérdeztél'+isr;
}
if (valid!='') {
$("#response").fadeIn("slow");
$("#response").html("HIBA:"+valid);
}
else {
var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&text=' + encodeURIComponent(text);
$("#response").css("display", "block");
$("#response").html("Üzenet küldése ... ");
$("#response").fadeIn("slow");
setTimeout("send('"+datastr+"')",2000);
}
return false;
});
});
function send(datastr){
$.ajax({
type: "POST",
url: "mail-husvet.php",
data: datastr,
cache: false,
success: function(html){
$("#response").fadeIn("slow");
$("#response").html(html);
setTimeout('$("#response").fadeOut("slow")',2000);
}
});
}
PHP része:
<?php
date_default_timezone_set('Europe/Budapest');
if (isset($_POST['name']) && isset($_POST['mail'])) // ha a nev és az email valtozók be vannak töltve, beírja az adatbázisba. ha nem, kiadja a formot.
{
//mysql_connect('sqlserver','sqluser','sqlpass');
mysql_connect('localhost','username','pass');
mysql_select_db("mail") or die( "Nem lehet az adatbázishoz csatlakozni!");
$sql="INSERT INTO mail (reg_date, name, mail_address, ip_address) VALUES (now(), '" . $_POST['name'] . "', '" . $_POST['mail'] . "', '" . $_SERVER['REMOTE_ADDR'] . "')";
if (!mysql_query($sql)) {
echo "SQL: " . $sql . "<br />Hiba: " . mysql_error();
}
mysql_close();
}
else
{
$mail = $_POST['mail'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];
$to ="példa##kukac##gmail.com";
$subject ="$subject";
$message ="E-mail címe: \n ".$mail;
$message .="\n \n Neve: \n ".$name;
$message .="\n \n Üzenet: \n ".$text;
if(mail($to, $subject, $message)){
echo "A jelentkezést sikeresen elküldte... Hamarosan kap visszaigazolást.";
}
else{
echo "Hiba történt a jelentkezés küldés közben. Próbálja meg újra!";
}
}
?>
■ - a php nem küldi ki az emailt
- az adatbázis ugyan bekerülnek az adatok, de ékezet problémái vannak (UTF-8 elvileg)
Az egész történet odáig jut el, hogy kitölti a felhasználó, kattint, kiírja, hogy üzenet küldése, majd mintha visszadobna egy üzenetet, de csak a helyét jeleníti meg. Nem írja a ki hibát vagy azt, hogy sikeresen elküldte volna. A háttérben "sikeresen - rossz karakter kódolással" kerülnek az adatok az adatbázisba. Email nem érkezik meg.
Ha valaki tud segíteni, azt megköszönném! Üdv
HTML része:
<div id="wrap" class="clearfix">
<div class="mail">
<div id="response"></div>
<form id="formail" action="" method ="post">
<label>Név : </label>
<input type="text" name="name" id="name" />
<label>Email cím :</label>
<input type="text" name="mail" id="mail" />
<label>Életkor : </label>
<input type="text" name="subject" id="subject" />
<label>Kérdésed van? </label>
<textarea name="text" id="text" cols="40" rows="3"></textarea>
<div class="clear"><input type="submit" value="sendmail" id="sendmail" name="sendmail" /></div>
</form>
</div>
</div>
AJAX része:
$(document).ready(function(){
$("#sendmail-husvet").click(function(){
var valid = '';
var isr = '!';
var name = $("#name").val();
var mail = $("#mail").val();
var subject = $("#subject").val();
var text = $("#text").val();
if (name.length<5) {
valid += '<br />Nem írtad be a neved'+isr;
}
if (!mail.match(/^([a-z0-9._-]+##kukac##[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
valid += '<br />E-mail cím hiányzik vagy hibás'+isr;
}
if (subject.length<1) {
valid += '<br />Nem adtad meg hány éves vagy'+isr;
}
if (text.length<3) {
valid += '<br />Nem kérdeztél'+isr;
}
if (valid!='') {
$("#response").fadeIn("slow");
$("#response").html("HIBA:"+valid);
}
else {
var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&text=' + encodeURIComponent(text);
$("#response").css("display", "block");
$("#response").html("Üzenet küldése ... ");
$("#response").fadeIn("slow");
setTimeout("send('"+datastr+"')",2000);
}
return false;
});
});
function send(datastr){
$.ajax({
type: "POST",
url: "mail-husvet.php",
data: datastr,
cache: false,
success: function(html){
$("#response").fadeIn("slow");
$("#response").html(html);
setTimeout('$("#response").fadeOut("slow")',2000);
}
});
}
PHP része:
<?php
date_default_timezone_set('Europe/Budapest');
if (isset($_POST['name']) && isset($_POST['mail'])) // ha a nev és az email valtozók be vannak töltve, beírja az adatbázisba. ha nem, kiadja a formot.
{
//mysql_connect('sqlserver','sqluser','sqlpass');
mysql_connect('localhost','username','pass');
mysql_select_db("mail") or die( "Nem lehet az adatbázishoz csatlakozni!");
$sql="INSERT INTO mail (reg_date, name, mail_address, ip_address) VALUES (now(), '" . $_POST['name'] . "', '" . $_POST['mail'] . "', '" . $_SERVER['REMOTE_ADDR'] . "')";
if (!mysql_query($sql)) {
echo "SQL: " . $sql . "<br />Hiba: " . mysql_error();
}
mysql_close();
}
else
{
$mail = $_POST['mail'];
$name = $_POST['name'];
$subject = $_POST['subject'];
$text = $_POST['text'];
$to ="példa##kukac##gmail.com";
$subject ="$subject";
$message ="E-mail címe: \n ".$mail;
$message .="\n \n Neve: \n ".$name;
$message .="\n \n Üzenet: \n ".$text;
if(mail($to, $subject, $message)){
echo "A jelentkezést sikeresen elküldte... Hamarosan kap visszaigazolást.";
}
else{
echo "Hiba történt a jelentkezés küldés közben. Próbálja meg újra!";
}
}
?>
Hogyan?
Mikor akarod elküldeni a levelet? Mert a kód akkor küldi el a levelet, ha nem lett megadva neki
POST
-ban aname
es azmail
mező. Azaz amikor te AJAX-szal elküldöd az üzenetet, akkor nem küldi el a levelet, csak elmenti adatbázisba. Nem lehet, hogy az adatbázis kapcsolatod alapértelmezetten nem UTF-8? Nem lehet hogy a tábládnak az adott mezője nem UTF-8? Nem escapeled megfelelően az adatbázisba írandó tartalmat, ez simán vezethet SQL Injection-höz.Az miért van, hogy az elküldendő levél tárgyának a megadott életkort adod meg? Használj egy korszerű, és szabványos levélküldő függvénytárat / osztályt, mint a Swift Mailer, vagy PEAR Mail, PHP Mailer, és akkor később megkímélsz minket olyan kérdésektől, hogy miért vannak furcsa karakterek a levélben, miért nincsenek ékezetek a tárgyban, és társai.
Kérlek használd a kódszínezőt, csak 2 kattintás.
Kicsit módosított JavaScript, hogy legalább a változók kódolva legyenek (ezt a jQuery megcsinálja helyettünk):