Как заставить PHP игнорировать не выбранные подкатегории, даже если они содержат контент? - PullRequest
0 голосов
/ 18 мая 2011

У меня проблемы с PHP.

Вот сокращенная версия HTML:

<label for="yes_or_no">would you like to tell me your favourite colours?</label>
    <input type="radio" name="yes_or_no" id="yes" value="yes" />
    <label for="yes">yes</label>
    <input type="radio" name="yes_or_no" id="no" value="no" />
    <label for="no">no</label>

<div id="colours_box">

<label for="colours">great! please select from the following list:</label>

<input type="checkbox" name="colours[]" id="blue" value="blue" />
<label for="blue">blue</label>

<input type="checkbox" name="colours[]" id="yellow" value="yellow" />
<label for="yellow">yellow</label>

<input type="checkbox" name="colours[]" id="red" value="red" />
<label for="red">red</label>

<input type="checkbox" name="colours[]" id="green" value="green" />
<label for="green">green</label>

<input type="checkbox" name="colours[]" id="other_colour" value="other_colour" />
<label for="other_colour">other_colour</label>

<div id="other_colour_box">
    <textarea name="other_colour_detail" id="other_colour_detail"></textarea>
</div>

</div>

Colour_box DIV скрыт и появляется при выборе #no и исчезает при выборе #yes с использованием некоторого базового JavaScript. DIV other_colour_box делает аналогичную вещь - по умолчанию он скрыт, и когда отмечен #other_colour, он появляется, когда не отмечен, он исчезает.

Я бы хотел, чтобы это было так:

  • , если в первом случае выбрано «да», все флажки и текстовое поле игнорируются, даже если они сначала выбрали «нет» и вводили данные в флажки и текстовое поле.

  • если текстовая область other_colour_detail была записана, но впоследствии не проверено значение other_colour, для текстовой области other_colour_detail ничего не возвращается

Вот PHP:

$yes_or_no = $_POST['yes_or_no'] ;
$colours = $_POST['colours'] ;
$other_colour_detail = $_POST['other_colour_detail'] ;

$colours_to_email .= implode("\n\t", $colours) ;

if (($yes_or_no == 'no') && ($colours != "")) {
    $colours_to_email ;
}
if (($yes_or_no == 'no') && ($other_colour != "") && ($other_colour_detail != "")) {
    $details_of_other_colour = ":\n\t$other_colour_detail" ;
}

После этого мне будет отправлено по электронной почте что-то вроде этого:

"Did they want to tell me which colours they preferred?\n" .
"$yes_or_no-\t" . "$colours_to_email" .
"$details_of_other_colour" ;

Спасибо, что посмотрели,

Martin.

1 Ответ

1 голос
/ 18 мая 2011

Мне трудно понять, в чем проблема, но если я вас правильно понимаю, вам понадобится вложенный if:

$text = '';

if ($yes_or_no == 'yes')
{
  // only add $yes_or_no to the text
}
else
{
  // add colours[] to text, you might want to add a check to not add 'other_colour'
  foreach ($colours as $colour)
  {
    if ($colour != 'other_colour')
    {
      // add $colour to text
    }
  }

  if (in_array('other_colour', $colours) && !empty($other_colour_detail))
  {
    // add other_colour stuff to text
  }
}

// send your text
...