2013-03-12 2 views
0

У меня есть форма (page2) с 2 флажками, когда пользователь выбирает флажок 1, скрипт на третьей странице отправит инструкции 1 в адрес электронной почты. Когда выбран chkbox 2, он отправляет инструкции2.php skip empty array

Это работает, но я также получаю ошибки, такие как имя файла не может быть пустым, когда проверяется только 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, но я делаю это неправильно, я думаю. Спасибо за любую помощь.

UPDATE

Я добавил форму страниц jsfiddle. Есть 3 страницы ссылки находятся в первой jsfiddle

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

+1

Убедитесь, что значения POST не пусты, попробуйте выполнить простые условия if (empty ($ _ POST ['i_allinone']) && empty ($ _ POST ['custommade'])), прежде чем перейти к фактической логике на стр. 2 –

+0

if (isset ($ _ post ['i_allinonewebsolution'])) {$ i_allinonewebsolution = $ _POST ["i_allinonewebsolution"]; } if (isset ($ _ post ['i_custommade'])) {$ i_custommade = $ _POST ["i_custommade"]; } $ files = array ("$ i_allinonewebsolution", "$ i_custommade"); Это дало мне ошибку дважды – 2013-03-12 14:52:30

+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]); 
    } 
} 
+0

i_allinonewebsolution ']) } он дает ошибку в} Я не знаю почему? – 2013-03-12 14:43:17

+0

Пропущенные полуколонны извините –

+0

Первое правило разработки PHP, если вы получите сообщение об ошибке, вы, вероятно, пропустили точку с запятой. –

0

Когда я делаю подобные вещи с БД запросами (где результаты могут часто быть в Select запросов NULL) я делаю тест, чтобы увидеть, если переменная был установлен.

Используйте isset, чтобы проверить, действительно ли данные были отправлены.

например.

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

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

+0

Я сделал это. но он все еще дает ошибки. $ files = array ("$ i_allinonewebsolution", "$ i_custommade"); if (isset ($ files)) – 2013-03-12 14:48:52

0

убедитесь, что значения POST не пусты, попробуйте простой, если условие, как если (пусто ($ _ POST [ 'i_allinone']) & & пусто ($ _ POST [ 'заказ таможня'])), прежде чем приступить к фактической логики на странице 2

вы также можете использовать нуль, is_set и т.д., чтобы проверить, если POST или R Equest значения являются пустыми

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

Просто дайте попробовать! Извините за расширенный код.

+0

Я не понимаю код. когда он пуст, его просто нужно игнорировать. Я не знаю, как реализовать if else в коде, который я опубликовал. – 2013-03-12 14:47:27

+0

Это не будет очень хорошо масштабироваться, если будет добавлено больше флажков. –

+0

Да, я согласен с тобой. Я просто попытался объяснить, как преодолеть нынешний сценарий. –