Reputation: 336
I have a form for a referral system which has two fields namely Name and email. I also have a 'refer another friend' button which allows the user to refer another friend (capped off to 11). So another Name and email field appears. Now I have also an ajax function $.post
which is designed to take only one Name and email.
How do I make the ajax function work properly if there are more than one email entries (which can be different for different users). One thing I can think of is using an array after function addInput()
and then passing it to ajax. Can someone help me figure this thing out?
<script>
var countBox =1;
var boxName = 0;
function addInput()
{
if(countBox<20)
{
var boxName="textBox"+countBox;
document.getElementById('responce').innerHTML+='<input name="name" size="50" class="resize" placeholder=" Name" required type="text" id="'+boxName+'" value="'+'" " />';
countBox += 1;
var boxName="textBox"+countBox;
document.getElementById('responce').innerHTML+='<br/><input name="email" size="50" class="resize" required placeholder=" Email Address" type="text" id="'+boxName+'" value="'+'" " /><br/><br/>';
countBox += 1;
}
else{
alert("Max number of referrals reached");
}
}
</script>
<script src="js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="js/jquery.validate.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#emailForm').validate({
submitHandler: function() {
$.post("index1.php",{"name":$('#name').val(),"email":$('#email').val(),"userid": "<?php echo($user) ?>"},function(data) {
if(data == "Email address has already received a referral")
alert("Email address has already received a referral");
else {
count = 3 - parseInt(data)
var content = "You have "+count+" referrals left";
$('h4').html(content);
alert ("Referral sent");
}
});
}
});
});
</script>
Upvotes: 0
Views: 132
Reputation: 3961
You might have better luck using the jQuery .serialize()
method (http://api.jquery.com/serialize/). Also, you might want to name your inputs like this:
name="name[]"
and name="email[]"
. Otherwise if you pass all the posted inputs you'll only pass the last one of each since their names will overwrite each other.
Upvotes: 0
Reputation: 10906
try to make json array on client side and pass it to as string on server like below one
[{"name" : "A","email" : "[email protected]"},{"name" : "B","email" : "[email protected]"},{"name" : "C","email" : "[email protected]"}]
on serverside use
json_decode($json)
will give you
array
0 =>
array
'name' => string 'A' (length=1)
'email' => string '[email protected]' (length=11)
1 =>
array
'name' => string 'B' (length=1)
'email' => string '[email protected]' (length=11)
2 =>
array
'name' => string 'C' (length=1)
'email' => string '[email protected]' (length=11)
reference
Upvotes: 3
Reputation: 64707
You do
<input name="name[]">
and
<input name="email[]">
and it looks like you'll need to have
<input type="hidden" name="userid" value="<?php echo($user) ?>">
Then, you can use
$.post("index1.php", $('#emailForm').serialize());
Then, in your php, you just need to loop through your post variables:
for ($i=0; $i < count($_POST['email']); $i++) {
$email = $_POST['email'][$i];
$name = $_POST['name'][$i];
doStuff($name, $email);
}
Upvotes: 0
Reputation: 446
I think you can append all the names to a single string with a separator in middle like
name=name1+","+name2;
email=email1+","+email2;
and now you can send it through ajax.
and on other side you can split it into an array using split()
function
I am not familiar with PHP so excuse me if i am wrong. But this logic actually works good for me in JSP
Upvotes: 0