正在创建一个表,其中添加了每个产品/品牌/条件/数量,并发送到我的电子邮件中。但是,如果其中一个为空,则会破坏表格式。我尝试过if/else语句,isset/!空的,还有我能想到的任何其他东西。如果留空,我想添加要插入的空白列/行。
- 由于我对每个添加的项目都使用计数器(product_1,product_2),并且没有限制,所以我使用strpos来查找并"快速"添加到表中
--我无法附上照片,因为这是我的第一篇帖子。——
这是我现在拥有的,在没有字段为空时效果很好:
$content .= "<table rules='all' style='border-color: #666; width: 800px; border: 1px solid black; border-collapse: collapse; margin: 0 auto;'>'r'n";
foreach($_POST as $key => $value) {
$partqty = strpos($key, 'Part_Quantity');
$partcond = strpos($key, 'Part_Condition');
$partbrand = strpos($key, 'Part_Brand');
$partmodel = strpos($key, 'Part_Model');
if ($partqty === 0) {
$content .= "<tr>'r'n";
$content .= " <td style='width:15%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
}
if ($partcond === 0) {
$content .= " <td style='width:65%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
}
if ($partbrand === 0) {
$content .= " <td style='width:10%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
}
if ($partmodel === 0) {
$content .= " <td style='width:10%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
$content .= "</tr>'r'n";
}
}
$content .= "</table>'r'n";
这是我想做但不起作用的想法
foreach($_POST as $key => $value) {
$partqty = strpos($key, 'Part_Quantity');
$partcond = strpos($key, 'Part_Condition');
$partbrand = strpos($key, 'Part_Brand');
$partmodel = strpos($key, 'Part_Model');
if ($partqty === 0) {
$content .= "<tr>'r'n";
$content .= " <td style='width:15%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
}
if ($partqty === false) {
$content .= "<tr>'r'n";
$content .= " <td style='width:15%;'><input value='empty' style='border: none; width:100%;'></td>'r'n";
}
if ($partcond === 0) {
$content .= " <td style='width:65%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
}
if ($partcond === false) {
$content .= " <td style='width:65%;'><input value='empty' style='border: none; width:100%;'></td>'r'n";
}
if ($partbrand === 0) {
$content .= " <td style='width:10%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
}
if ($partbrand === false) {
$content .= " <td style='width:10%;'><input value='empty' style='border: none; width:100%;'></td>'r'n";
}
if ($partmodel === 0) {
$content .= " <td style='width:10%;'><input value='" . $value . "' style='border: none; width:100%;'></td>'r'n";
$content .= "</tr>'r'n";
}
if ($partmodel === false) {
$content .= " <td style='width:10%;'><input value='empty' style='border: none; width:100%;'></td>'r'n";
$content .= "</tr>'r'n";
}
}
打印示例:
Array (
[Part_Quantity_1] => 1
[Part_Condition_1] => New
[Part_Brand_1] => brand1
[Part_Model_1] => model1
[Part_Quantity_2] => 2
[Part_Condition_2] => New
[Part_Brand_2] => 2
[Part_Model_2] => 2
[Estimated_Total] => 0
[Estimated_Hours] => 0
[Name] => JohnDoe
[Email] => test@test.com
[Email_Verify] => test@test.com
[Confirmation] => I agree
[NameID] => form2-name
[EmailID] => form2-email
[HoursID] => form2-hours
[AjaxCall] => form2_ajax
)
试试这个。
// set dummy $_POST
$_POST = [
'Part_Quantity_1' => '1',
'Part_Condition_1' => 'New',
'Part_Brand_1' => 'brand1',
'Part_Model_1' => 'model1',
'Part_Quantity_2' => '2',
'Part_Condition_2' => 'New',
'Part_Brand_2' => '2',
'Part_Model_2' => '2',
'Part_Quantity_3' => '3',
'Estimated_Total' => '0',
'Estimated_Hours' => '0',
'Name' => 'JohnDoe',
'Email' => 'test@test.com',
'Email_Verify' => 'test@test.com',
'Confirmation' => 'I agree',
'NameID' => 'form2-name',
'EmailID' => 'form2-email',
'HoursID' => 'form2-hours',
'AjaxCall' => 'form2_ajax'
];
$parts = [];
foreach ($_POST as $key => $value) {
if (preg_match('#^Part_(?<type>Quantity|Condition|Brand|Model)_(?<counter>'d+)$#', $key, $matches) === 1) {
if (!isset($parts[$matches['counter']])) {
$parts[$matches['counter']] = array_fill_keys(['Quantity', 'Condition', 'Brand','Model'], 'empty');
}
$parts[$matches['counter']][$matches['type']] = $value;
}
}
$rows = array_map(function($part) {
$cells = [];
foreach ($part as $key => $value) {
$value = htmlspecialchars($value);
$width = null;
switch($key) {
case 'Quantity':
$width = "15%";
break;
case 'Condition':
$width = "60%";
break;
case 'Brand':
case 'Model':
$width = "10%";
break;
}
$cells[] = " <td style='"border: none; width: {$width};'"><input value='"{$value}'"></td>";
}
return implode("'n", $cells);
}, $parts);
$table = "<tr>'n" . implode("'n<tr>'n", $rows) . "'n</tr>'n";
echo $table;
不确定预期的输出或发布数据是什么,但这应该有效,但它尚未经过测试。我还注意到你没有在的任何地方输出行的标题
foreach($_POST as $key => $value) {
switch($key) {
case 'Part_Quantity':
$width = "15%";
break;
case 'Part_Condition':
$width = "60%";
break;
default:
$width = "10%";
break;
}
$content = "<tr>";
$content .= "<td style='width:".$width.";'><input value='" . (is_int($value) ? $value : 'empty' . "' style='border: none; width:100%;'></td>";
$content .= "</tr>";
}