Проблемы с почтовой формой 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 с информацией, которая переписывает приватный.

Что вы можете сделать, это сделать скрытый ввод, который будет находиться за пределами #content div, поскольку вы переписываете его в формате 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»], которое будет похоже на «name1, name2, name3». Вы можете использовать функцию взрыва в php для создания и массива из этой строки:

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

Другие решения

Проблема в том, что вы не создаете массив элементов для хранения нескольких значений. Ваш сценарий просто воссоздает div. Таким образом, простое решение состоит в том, чтобы добавить «[]» к вашему количеству, элементам и элементам 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']);

или манипулируйте размещенным массивом так, как вам нравится.

Я надеюсь, что это поможет вам.

0

По вопросам рекламы [email protected]