php跳过空数组

时间:2013-03-12 14:13:34

标签: php arrays checkbox email-attachments

当用户选择复选框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页链接

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

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

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

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

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