当用户选择复选框1时,我有一个带有2个复选框的表单(第2页),第3页上的脚本会将指令1发送到电子邮件地址。当选择chkbox 2时,它会发送指令2。
这是有效的,但是当我只检查1个chkbox时,我也会收到像filename这样的错误。
这是第2页的代码
<form name="form" method="POST" action="instructies_verzenden2.php">
<p></p>
<input type="checkbox" name="i_allinonewebsolution" value="file_1.txt"><span class="info-image information">All-in-One Websolution</span>
<input type="checkbox" name="i_custommade" value="file_2.txt"><span class="info-image information">Custom Made</span>
<input type="hidden" name="keyfield" value="<?php echo $domeinnaam?>"><input type="hidden" name="emailadres" value="<?php echo $data2[emailadres]?>"><input type="submit" class="sub-small sub-opslaan green" value="Update gegevens">
<p></p>
</form>
这是第3页的代码
// array with filenames to be sent as attachment
$i_allinonewebsolution=$_POST['i_allinonewebsolution'];
$i_custommade=$_POST['i_custommade'];
$files = array("$i_allinonewebsolution","$i_custommade");
// preparing attachments
for($x=0;$x<count($files);$x++){
$file = fopen($files[$x],"rb");
$data = fread($file,filesize($files[$x]));
fclose($file);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$files[$x]\"\n" .
"Content-Disposition: attachment;\n" . " filename=\"$files[$x]\"\n" .
"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}\n";
}
我认为问题在于:
// array with filenames to be sent as attachment
$i_allinonewebsolution=$_POST['i_allinonewebsolution'];
$i_custommade=$_POST['i_custommade'];
$files = array("$i_allinonewebsolution","$i_custommade");
我试过使用implode和array_filter,但我猜错了。 谢谢你的帮助。
我已将表单页面添加到jsfiddle。第一个jsfiddle有3页链接
答案 0 :(得分:1)
尝试这样的事情
$files = array();
if(isset($_POST['i_allinonewebsolution'])) {
array_push($files, $_POST['i_allinonewebsolution']);
}
if(isset($_POST['i_custommade'])) {
array_push($files, $_POST['i_custommade']);
}
如果您想要扩展它并拥有更多复选框,可以将它们放在像
这样的数组中$checkboxes = array('i_allinonewebsolution',
'i_custommade',
'i_checkbox3',
'i_checkbox4');
$files = array();
foreach($checkboxes as $checkbox){
if(isset($_POST[$checkbox])) {
array_push($files, $_POST[$checkbox]);
}
}
答案 1 :(得分:0)
当我使用数据库查询执行类似的操作时(在Select查询中结果通常为NULL)我会进行测试以查看变量是否已设置。
使用isset测试数据是否实际发布。
e.g。
if(isset($var))
//Do Action
答案 2 :(得分:0)
确保POST值不为空,在进入实际逻辑之前尝试一个简单的if条件,如if(空($ _ POST ['i_allinone'])&amp;&amp; empty($ _ POST ['custommade']))在第2页
您还可以使用 null , is_set 等检查 POST 或 REQUEST 值是否为空< / p>
$i_allinonewebsolution=$_POST['i_allinonewebsolution'];
$i_custommade=$_POST['i_custommade'];
if(!empty($i_allinonewebsolution))
{
$files = array("$i_allinonewebsolution");
}
if(!empty($i_custommade))
{
$files = array("$i_custommade");
}
if(!empty($i_allinonewebsolution) && !empty($i_custommade))
{
$files = array("$i_allinonewebsolution","$i_custommade");
}
试一试!对不起扩展代码。