0

当用户选择复选框 1 时,我有一个带有 2 个复选框的表单(page2),第 3 页上的脚本会将指令 1 发送到电子邮件地址。选择CHKBOX 2时,它会发送指令2。

这是有效的,但是当只检查 1 个 chkbox 时,我也会收到类似文件名不能为空的错误。

这是第 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个页面链接

http://jsfiddle.net/BNDfg/3/

4

3 回答 3

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]);
    }
}
于 2013-03-12T14:16:21.733 回答
0

当我对 DB 查询执行类似的操作时(其中结果通常在 Select 查询中为 NULL),我会进行测试以查看变量是否已设置。

使用 isset 测试数据是否实际发布。

例如

if(isset($var))
//Do Action

http://php.net/manual/en/function.isset.php

于 2013-03-12T14:18:19.473 回答
0

确保 POST 值不为空,在进入第 2 页的实际逻辑之前尝试一个简单的 if 条件,例如 if(empty($_POST['i_allinone']) && empty($_POST['custommade']))

您还可以使用nullis_set等来检查POSTREQUEST值是否为空

 $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");
}

试一试!对不起扩展代码。

于 2013-03-12T14:23:46.580 回答