我有一个PHP表单,其中包含一些“全局”字段和2个隐藏的div,页面中有额外的字段。它工作正常,但我想用它做一些额外的事情。我会试着解释一下。
例如,全局输入是“名称”和“电子邮件”。额外的div 1输入'Quantity_of_div_1'和'Color_of_div_1',额外的div 2输入'Quantity_of_div_2'和'Color_of_div_2'。
所以我写了这段代码将表单发送到我的电子邮件(它只是代码的一部分):
<?php
if(isset($_POST['acao']) && $_POST['acao'] == 'enviar'){
require("js/funcoes_mail.php");
$name = ValidarString($_POST[‘name’], "");
$email = ValidarEmail($_POST['email']);
$quantity_div_1 = ($_POST['quantity_div_1']);
$color_div_1 = ($_POST['color_div_1']);
$quantity_div_2 = ($_POST['quantity_div_2’]);
$color_div_2 = ($_POST['color_div_2’]);
$msg = "<html>
<head><title>SOMETHING</title></head>
<body>
<DIV>
<table width=\"565\" height=\"auto\" border=\"0\">
<tr>
<td>
<strong>Name</strong>: $name <br />
<strong>E-mail</strong>: $email <br />
</td>
</tr>
<tr id=\"msg_div_1\”>
<td>
<strong>Quantity</strong>: $quantity_div_1 <br />
<strong>Color</strong>: $color_div_1 <br />
</td>
</tr>
<tr id=\"msg_div_2\”>
<td>
<strong>Quantity</strong>: $quantity_div_2 <br />
<strong>Color</strong>: $color_div_2 <br />
</td>
</tr>
</TABLE>
</DIV>
</body>
</html>";
?>
我有两个按钮(href)调用javascript函数来动态添加额外的div。 (像“显示div 1”和“显示div 2”)。
因此,如果用户单击“显示div 2”链接,则会添加额外的div,用户可以填充输入。
我的问题是,如果用户点击并填充div 2的数据(反之亦然),我不想在我的消息中收到“<tr id=\"msg_div_1\”>”
。
我该怎么做?我已经尝试了很多方法但是有效。
答案 0 :(得分:1)
这里你需要进行以下2次更改......
注意:添加验证以输入适当的颜色/数量输入元素。
修改后的PHP代码
$msg = "<html>
<head><title>SOMETHING</title></head>
<body>
<DIV>
<table width=\"565\" height=\"auto\" border=\"0\">
<tr>
<td>
<strong>Name</strong>: $name <br />
<strong>E-mail</strong>: $email <br />
</td>
</tr>";
if($quantity_div_1 != "" && $color_div_1 != "") {
$msg .= "<tr id=\"msg_div_1\">
<td>
<strong>Quantity</strong>: $quantity_div_1 <br />
<strong>Color</strong>: $color_div_1 <br />
</td>
</tr>";
}
if($quantity_div_2 != "" && $color_div_2 != "") {
$msg .= "<tr id=\"msg_div_2\">
<td>
<strong>Quantity</strong>: $quantity_div_2 <br />
<strong>Color</strong>: $color_div_2 <br />
</td>
</tr>
</TABLE>
</DIV>
</body>
</html>";
}
jQuery代码
$("a.divSelector").click(function(){
if($(this).attr('id') == "div1") {
$("#quantity_div_2").val("");
$("#color_div_2").val("");
}else if($(this).attr('id') == "div2") {
$("#quantity_div_1").val("");
$("#color_div_1").val("");
}
});
答案 1 :(得分:0)
您不会在此处显示您的表单代码,但(只是猜测)您可以尝试在运行中构建它:
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path);
// decide which values to add
if( showdiv1 )
{
field0 = document.createElement("input");
field0.setAttribute("type", "hidden");
field0.setAttribute("name", "q_div1");
field0.setAttribute("value", quantity_of_div1 );
form.appendChild( field0 );
}
form.submit();
依旧......
答案 2 :(得分:0)
如果字段为空,则可以使用empty()进行检查,并添加if语句以显示它。
如果你有超过2的颜色,你可以在你的表格中将它命名为数组... color_div_3 ...
然后你可以对此进行循环。
<?php
if(isset($_POST['acao']) && $_POST['acao'] == 'enviar') {
require("js/funcoes_mail.php");
$name = ValidarString($_POST['name'], "");
$email = ValidarEmail($_POST['email']);
$quantity_div_1 = (!empty($_POST['quantity_div_1'])) ? $_POST['quantity_div_1'] : false;
$color_div_1 = (!empty($_POST['color_div_1'])) ? $_POST['color_div_1'] : false;
$quantity_div_2 = (!empty($_POST['quantity_div_2'])) ? $_POST['quantity_div_2'] : false;
$color_div_2 = (!empty($_POST['color_div_2'])) ? $_POST['color_div_2'] : false;
$msg = "<html>
<head><title>SOMETHING</title></head>
<body>
<DIV>
<table width='565' height='auto' border='0'>
<tr>
<td>
<strong>Name</strong>: $name <br />
<strong>E-mail</strong>: $email <br />
</td>
</tr>";
if($quantity_div_1 || $color_div_1) {
$msg .= "<tr id='msg_div_1'>
<td>
<strong>Quantity</strong>: $quantity_div_1 <br />
<strong>Color</strong>: $color_div_1 <br />
</td>
</tr>";
}
if($quantity_div_2 || $color_div_2) {
$msg .= "<tr id='msg_div_2'>
<td>
<strong>Quantity</strong>: $quantity_div_2 <br />
<strong>Color</strong>: $color_div_2 <br />
</td>
</tr>";
}
$msg .= "</TABLE>
</DIV>
</body>
</html>";
}
?>
如果你有两个以上的字段,并且你想要做这个动态,你可以在你的表单中使用数组,并在php中使用循环检查这个数组。
为了更有条理地执行此操作,我添加了一些j来处理表单中的数组。
这样的事情:
<?php
if(isset($_POST['qandc'])) {
foreach($_POST['qandc'] as $qandc) {
$q = $qandc['quantity_div'];
$c = $qandc['color_div'];
if($q || $c) {
echo 'quantity: '.$q;
echo 'color: '.$c.'<br>';
}
}
}
?>
<form action="" method="post">
<div class="clonethis">
<input type="text" name="qandc[0][quantity_div]">
<input type="text" name="qandc[0][color_div]">
</div>
<div class="clones">
</div>
<button type="button" class="add-inputs">Add inputs</button>
<input type="submit" value="Send">
</form>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
var newNameID = 1;
$('.add-inputs').click(function() {
var clone = $('.clonethis').clone();
clone.appendTo($('.clones'));
$('.clones').find('.clonethis').each(function() {
$(this).removeClass('clonethis');
$(this).find('input[type="text"]').each(function() {
var existingName = $(this).attr('name');
var newName = existingName .replace(/(\d+)+/g, function(match, number) {
return parseInt(newNameID);
});
$(this).attr('name', newName);
$(this).val("");
});
});
newNameID++;
});
});
</script>