What is the simplest way to pass a value from the "index" page to the SimpleModal Demo Contact Form? For example, if a user is logged in and their email address is stored in the variable $email, what is the most straightforward way to have that info available in the Demo Contact Form?
Thank you.
Assuming the values you want are NOT in the form, here's a way to do it.
Update contact.js in the onShow: function:
...
}, function () {
$('#contact-container .contact-loading').fadeIn(200, function () {
var pt = PAGE_TITLE,
aid = ARTILE_ID;
$.ajax({
url: 'data/contact.php',
data: $('#contact-container form').serialize() + '&action=send&page_title=' + pt + '&article_id=' + aid,
type: 'post',
cache: false,
dataType: 'html',
success: function (data) {
$('#contact-container .contact-loading').fadeOut(200, function () {
$('#contact-container .contact-title').html('Thank you!');
msg.html(data).fadeIn(200);
});
},
error: contact.error
});
});
});
...
Then update contact.php in the function smcf_send() function
...
// Set and wordwrap message body
$pt = isset($_POST["page_title"]) ? $_POST["page_title"] : "";
$aid = isset($_POST["article_id"]) ? $_POST["article_id"] : "";
$body = "From: $name\n\n";
$body .= "Page Title: $pt\n";
$body .= "Article ID: $aid\n\n";
$body .= "Message: $message";
$body = wordwrap($body, 70);
...
Obviously you can play around with the details, but that should get you going.
-Eric
Related
I'm not receiving any emails, what could be the problem ?
ui.js
sendEmail = function(username, callback) {
var msg = getMessage(username);
$.ajax({
type: 'POST',
url: 'ui.php',
data: '***What should I type here ?***',
success: callback
});
ui.php
<?php
$to = "XXXXXX#gmail.com";
$subject = "you got mail";
$message = $_POST['getMessage'];
$send = #mail($to, $subject, $message);
if(!$send){
die();
}
?>
Data should be a hash with the data. So in your case:
sendEmail = function(username, callback) {
var msg = getMessage(username);
$.ajax({
type: 'POST',
url: 'ui.php',
data: { getMessage : 'Actual message' },
success: callback
});
Also make sure you're defining the callback function what you're using in success-callack. You can leave that away if you're not interested in response.
Also there's a shortcut to post ajax request with POST.
I have a code like this
<script type="text/javascript">
function email(){
var myTextField = document.getElementById('email_hidden').value;
//alert(myTextField);
$.ajax({
type: "POST",
url: "sendmail.php",
data: "email_user="+myTextField,
success: function(response){
alert(response);
}
});
}
</script>
My sendmail.php code is like this.
<?php
$to = $_REQUEST['email_user'];
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= "From: Haan Test<haan#gmail.com>\r\n";
$message_body = "Your Details";
$subject = "Check mail";
mail($to, $subject, $message_body, $headers);
echo "success";
?>
and my html looks like this.
<div id="email_hide"><a href="#" onclick="email()" >Send Email</a></div>
I am getting the response in my firebug console as success
but i could not alert the response. I can receive the mail also for the above jquery ajax functionality(sendmail.php)
In other words, how to alert the response after ajax call..
I have tried onComplete also. plz help me with this.
My Scenerio is like this:
User page(index1.html) >> Paypal Sandbox (for transaction) >> User page(index2.html)
Here in index2.html, i fetch last transaction details from paypal sandbox with a send mail
at the top right corner, so when user clicks the send mail(anchor tag) the mail should be sent via ajax jquery call.
Thanks
Haan
If ur datatype is json ,then try this
<script type="text/javascript">
function email(){
var myTextField = document.getElementById('email_hidden').value;
//alert(myTextField);
$.ajax({
type: "POST",
url: "sendmail.php",
data: "email_user="+myTextField,
dataType: "json",
success: function(response){
alert(response);
}
});
}
</script>
Try using the shorthand jquery method for post:
<script type="text/javascript">
function email(){
var myTextField = document.getElementById('email_hidden').value;
//alert(myTextField);
$.post("sendmail.php", {"email_user": myTextField}, function(data) {
alert(data);
});
}
</script>
Try add
$.ajax({
type: "POST",
url: "sendmail.php",
data: "email_user="+myTextField,
success: function(response){
alert("Success\n" + response);
},
error: function(errMsg) {
alert("Error\n" + errMsg);
}
});
and see which one gets called.
I am trying to add a tell a friend section to a website I am making but I am having difficulty trying to send more than 2 variables through a URL with AJAX. This is the code I have at the moment:
jQuery("#tellafriendsubmit").click(function() {
var email = jQuery('#tellafriendemail').val();
var name = jQuery('#tellafriendname').val();
jQuery.ajax({
type: "POST",
url: "http://www.example.co.uk/tell-a-friend-processor-page/?postname=<?php echo $post_name; ?>&name=name&email="+email,
success: function(msg){
alert('Your tell a friend recommendation has been sent. Thank you for recommending us.');
}
});
});
If I remove the '&name=name' part so that I'm only sending the postname and email address, it works fine but I need to send the name as well so I can write 'Dear $name....'
How can I send the extra 3rd variable? Thanks for any help
Edit:
The part I'm using in the tellafriendprocessor page looks like this:
$email = $_POST['email'];
$post_name = $_GET['postname'];
$name = $_POST['name'];
$to = $email;
$subject = "Example - Tell a friend";
$body = "Dear $name http://www.example.co.uk/ads/$post_name";
if (mail($to, $subject, $body, $headers)) {
} else {
}
You could try sending them as part of the POST request body (using the data property) which will ensure that those values are properly encoded:
var email = jQuery('#tellafriendemail').val();
var name = jQuery('#tellafriendname').val();
jQuery.ajax({
type: 'POST',
url: 'http://www.example.co.uk/tell-a-friend-processor-page/?postname=<?php echo $post_name; ?>',
data: { name: name, email: email },
success: function(msg) {
alert('Your tell a friend recommendation has been sent. Thank you for recommending us.');
}
});
On the server side make sure you are reading them from the $_POST hash ($_POST["name"] and $_POST["email"]).
you can send your parameters to a page with AJAX by GET and POST method with this piece of code
data: { id : 'id', name : 'name' }, // multiple data sent using ajax
Here is an example
$.ajax({
type:"GET",
cache:false,
url:"welcome.php",
data: { id : 'id', name : 'name' }, // multiple data sent using ajax
success: function (html) {
$('#add').val('data sent sent');
$('#msg').html(html);
}
});
You will need to move name outside the string. And to add more key-value-pairs you just append them to the query string: &key=value
url: "http://www.example.co.uk/tell-a-friend-processor-page/?postname=<?php echo $post_name; ?>&name="+name+"&email="+email
Try to use object of params like this:
$.post("/tell-a-friend-processor-page/", { name: "John", email: "<?php echo $post_email; ?>", post_name: "<?php echo $post_name; ?>" },
function(data) {
alert("Data Loaded: " + data);
});
I'm trying to use $.ajax to send some values to a php page which then sends an email,
I can't figure out how to get the values from $.ajax in my php file,
any help would be appreciated,
$(function() {
$('form#email input[type=image]').click(function() {
var name = $('form#email #name').val();
var enq = $('form#email #enq').val();
var dataString = 'name=' + name + '&enq=' + enq;
$.ajax({
type:'POST',
url:'email.php',
data:dataString,
success:function() {
$('form#email').fadeOut();
}
});
$('form#email')[0].reset();
return false;
});
});
php file
if (isset($_POST['submit_x'])) {
$name = $_POST['name'];
$enq = $_POST['enq'];
$name = htmlentities($name);
$enq = htmlentities($enq);
//echo $name,$enq;
$to = 'amirkarimian#hotmail.co.uk';
//$to = 'tutor#inspiretuition.co.uk'
$subject = 'Enquiry';
$message = $enq;
mail($to,$subject,$message);
if(!mail) {
echo 'failed to send mail';
}
}
the email doesn't get sent.
if I dont use $.ajax and submit the form normally the email get sent.
thanks
You're checking for a variable you're not submitting, submit_x, you'll need to remove that outer if check. Also, it's better to let jQuery serialize your strings properly (what if there's a & in there?) like this:
$(function() {
$('#email input[type=image]').click(function() {
$.ajax({
type:'POST',
url:'email.php',
data: { name: $('#name').val(), enq: $('#enq').val() }
success:function() {
$('form#email').fadeOut();
}
});
$('#email')[0].reset();
return false;
});
});
Or if the <form> elements have proper name attributes (they should, for graceful degradation) , you can replace data: { name: $('#name').val(), enq: $('#enq').val() }
with data: $('#email').serialize().
try sending 'submit_x' to php :)
You can use a data map to define your data:
var name = $('form#email #name').val();
var enq = $('form#email #enq').val();
$.ajax({
type: 'POST',
url: 'email.php',
dataType: 'html',
data: {
submit_x : 1,
name : name,
enq : enq
},
success: function(html){
$('form#email').fadeOut();
},
error: function(e, xhr) { alert('__a Error: e: ' + e + ', xhr:' + xhr); }
});
jQuery:
$("#contact-us-form").submit(function () {
var nameVal = $("input[name=name]").val();
var companyVal = $("input[name=company]").val();
var titleVal = $("input[name=title]").val();
var emailVal = $("input[name=email]").val();
var phoneVal = $("input[name=phone]").val();
var messageVal = $("input[name=message]").val();
$.post("mailer.php", {
name: nameVal,
company: companyVal,
title: titleVal,
email: emailVal,
phone: phoneVal,
message: messageVal
}, function (data) {
alert("Data Loaded: " + data);
$('#thanks').show();
});
return false;
});
mailer.php:
<?php
if(isset($_POST['submit'])) {
$to = "admin#domain.com";
$subject = "Inquiry";
$name = $_POST['name'];
$company = $_POST['company'];
$title = $_POST['title'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$body = <<<HEREDOC
From: $name
Company: $company
Title: $title
E-Mail: $email
Phone: $phone \n
Message: $message
HEREDOC;
echo 'success';
mail($to, $subject, $body);
} else {
echo "failure";
}
?>
The data alert on the page returns failure, I don't understand why!
Thanks for your help!
Two things, first the main issue is there is no submit variable you're passing (if there's a submit button it is not serialized like it would be in a normal post), so you have to add it. Also, you can really shorten you code by using .serialize() to serialize the <form> here, like this:
$("#contact-us-form").submit(function () {
$.post("mailer.php", $(this).serialize(), function (data) {
alert("Data Loaded: " + data);
$('#thanks').show();
});
return false;
});
To add your submit variable in there just use .serializeArray() and add it in, do this:
$("#contact-us-form").submit(function () {
var fdata = $(this).serializeArray();
fdata.push({ name: 'submit', value: true });
$.post("mailer.php", fdata, function (data) {
alert("Data Loaded: " + data);
$('#thanks').show();
});
return false;
});
It looks to me as if you're not sending a value for "submit" to mailer.php, so your condition is failing.
Looking at the data you are passing into your mail.php via JS, you have not passed in "submit" which is where you are basing your condition.
I would suggest that you pass in something like:
$.post("mailer.php", {
name: nameVal,
company: companyVal,
title: titleVal,
email: emailVal,
phone: phoneVal,
message: messageVal,
action: "send-email"
}, function (data) {
alert("Data Loaded: " + data);
$('#thanks').show();
});
and in your PHP change the condition to:
if($_POST['action'] == "send-email") {