2015-08-19 3 views
0

извините, если это кажется глупым вопросом, но я действительно застрял.Проблемы с почтой в PHP?

Я использую форму с PHP, чтобы позволить пользователям отправлять почту с моего сайта и все работает отлично, за исключением, когда вы хотите добавить больше чем один «пункт», «количество» и 'boxeach 'к форме.

Используемый сценарий дублирует элементы, но сохраняет их с тем же именем, что означает, что мой php будет читать и отправлять только один из них в письме. Есть ли способ изменить это, чтобы все эти три элемента были помещены в электронное письмо, причем один появился под другим?

Это сценарий, я использую, чтобы дублировать (используется с кнопкой):

<script>$(function() { 
$('#copy').click(function(){ 
    var content = $('#content').html(); 
    var newdiv = $("<div>"); 
    newdiv.html(content); 
    $('#content').after(newdiv); 
    }); 
    });</script> 

Вот мой полный HTML код:

<head> 
<title>WHOLESALE ORDER</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
<script>$(function() { 
$('#copy').click(function(){ 
    var content = $('#content').html(); 
    var newdiv = $("<div>"); 
    newdiv.html(content); 
    $('#content').after(newdiv); 
    }); 
    });</script> 

label,a 
{ 
font-family : Arial, Helvetica, sans-serif; 
font-size : 12px; 
} 

</style>  
<script language="JavaScript" src="scripts/gen_validatorv31.js" type="text/javascript"></script> 
</head> 

<body> 
<h2>WHOLESALE ORDER <strong><script type="text/javascript"> 
var date = new Date(); 
var month = new Array(7); 
month[0] = "01"; 
month[1] = "02"; 
month[2] = "03"; 
month[3] = "04"; 
month[4] = "05"; 
month[5] = "06"; 
month[6] = "07"; 
month[7] = "08"; 
month[8] = "09"; 
month[9] = "10"; 
month[10] = "11"; 
month[11] = "12"; 
var year = date.getYear(); 
if (year < 2000) { year+=1900; } 
document.write(date.getDate() + "/" + month[date.getMonth()] + "/" + year); 
</script></strong></h2> 
<form method="POST" name="contactform" action="contact-form-handler.php"> 

<p> 
<table><tr><td> 
<label for='name'>Name:</label> <br> 
<input type="text" name="name"> 
</td> 
<td> 
<label for='email'>Email:</label> <br> 
<input type="text" name="email"> 
</td></tr></table> 
</p> 
<p> 
<table><tr><td> 
<label for='address'>Delivery Address:</label> <br> 
<input type="text" name="address"> 
</td> 
<td> 
<label for='telephone'>Telephone:</label> <br> 
<input type="tel" name="telephone"> 
</td></tr></table> 
</p> 
<p> 
<div id="content"><table><tr><td><label for='amount'><input type="text" name="amount"></label> 
<label for='items'><select name="items"> 
        <option value="APPLE BAG">APPLE BAG</option> 
        <option value="APPLE BRAMLEY">APPLE BRAMLEY</option></select></label> 
<label for='boxeach'><select name="boxeach"> 
        <option value="BOX">BOX</option> 
        <option value="EACH">EACH</option> 
        </select></label> 
</td></tr></table></div> 
</p> 
<p> 
<input type="button" id="copy" value="Add another item +"/> 
</p> 
<input type="submit" value="Submit"><br> 
</form> 

<script language="JavaScript"> 
var frmvalidator = new Validator("contactform"); 
frmvalidator.addValidation("name","req","Please provide your name"); 
frmvalidator.addValidation("email","req","Please provide your email"); 
frmvalidator.addValidation("email","email","Please enter a valid email address"); 
</script> 

Вот мой полный код PHP:

<?php 
$errors = ''; 
$myemail = '[email protected]';// 
if(empty($_POST['name']) || 
empty($_POST['email']) || 
empty($_POST['items']) || 
empty($_POST['boxeach']) || 
empty($_POST['amount'])) 
{ 
$errors .= "\n Error: all fields are required"; 
} 

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$amount = $_POST['amount']; 
$items = $_POST['items']; 
$boxeach = $_POST['boxeach']; 

if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
$email_address)) 
{ 
$errors .= "\n Error: Invalid email address"; 
} 

if(empty($errors)) 
{ 
$to = $myemail; 
$email_subject = "WHOLESALE ORDER $name"; 
$email_body = "You have received a new message. ". 
" Here are the details:\n $name \n $email_address \n \n \n $amount $items $boxeach"; 

$headers = "From: $myemail\n"; 
$headers .= "Reply-To: $email_address"; 

mail($to,$email_subject,$email_body,$headers); 
//redirect to the 'thank you' page 
header('Location: contact-form-thank-you.html'); 
} 
?> 

ответ

0

Когда вы нажимаете $ («# copy»), вы создаете div с информацией, которая переписывает конфиденциальную.

Что вы можете сделать, это сделать скрытый ввод, который будет находиться вне div #content, так как вы переписываете его html.

<input type="hidden" name="name_string"> 

И по щелчку при создании DIV также добавить информацию в свой скрытый вход:

$('#copy').click(function(){ 
    var hidden = $("input[name='name_string']); 
    hidden.val(hidden.val() +","+ $("input[name='name']).val()); 
    var content = $('#content').html(); 
    var newdiv = $("<div>"); 
    newdiv.html(content); 
    $('#content').after(newdiv); 
}); 

Тогда в PHP вы получите $ _POST [ «name_string»], который будет как «имя1 , name2, name3 ". Вы можете использовать функцию взрываются в PHP для создания и массива из этой строки:

$array = explode(",", $_POST["name_string"]); 
0

Проблема у Вас есть то, что вы не делаете массив элементов для хранения нескольких значений. Ваш скрипт просто воссоздает div. Таким образом, простым решением является добавление «[]» к вашей сумме, itmes и элементам boxeach.

т.е.
&lt;input type="text" name="amount[]" /&gt; 
&lt;select name="items[]"&gt;...&lt;/select&gt; 
&lt;select name="boxeach[]"&gt;...&lt;/select&gt; 

чем в вашем изменении кода PHP эти строки из

$amount = $_POST['amount']; 
$items = $_POST['items']; 
$boxeach = $_POST['boxeach'];  

к

$amount = implode(',',$_POST['amount']); 
$items = implode(',',$_POST['items']); 
$boxeach = implode(',',$_POST['boxeach']);  

или манипулировать размещенной массив в том, что когда-нибудь, как вам нравится.

Надеюсь, это поможет вам.

Смежные вопросы