1

所以首先,这里是代码:

  $greens = $_REQUEST['greens'];
  $squash = $_REQUEST['squash'];
  $tomatoes = $_REQUEST['tomatoes'];

  $single = $greens xor $squash xor $tomatoes;


  if (isset($greens,$squash,$tomatoes)) {

    $array = [$greens,$squash,$tomatoes];
    $product = implode(', ',$array);

  } else if (isset($greens,$squash)) {

    $array = [$greens,$squash];
    $product = implode(', ',$array);

  } else if (isset($greens,$tomatoes)) {

    $array = [$greens,$tomatoes];
    $product = implode(', ',$array);

  } else if (isset($squash,$tomatoes)) {

    $array = [$squash,$tomatoes];
    $product = implode(', ',$array);

  } else if (isset($single)) {

    $product = $single;

  } else {

    $product = $_REQUEST['vendor_product'];

  }

这是提交供应商注册表单的 php 文件的一部分。如果供应商选择“生产”作为他们的产品类型,则会出现一组复选框选项,并且需要选择至少一个选项。根据选项集,选定的值将在一个字段中共同提交到数据库中。如何在数据库中查看它们的示例有:'Greens, Squash & Zucchini''Greens, Squash & Zucchini, Tomatoes''Greens'等。', '如果选择了多个选项,则插入其中。

上面的代码有效,但想知道是否有办法简化它,因为我很可能会添加更多选项供用户选择。另外,即使每个条件都有多个真结果,三元运算符还能用吗?我对理解那个运营商还是很陌生。

4

2 回答 2

2
$names = ['greens', 'squash', 'tomatoes'];

$array = [];
foreach ($names as $name) {
    if (isset($_REQUEST[$name])) {
        $array[] = $_REQUEST[$name];
    }
}

$product = implode(', ',$array);

if (count($array) == 0) {
    $product = $_REQUEST['vendor_product'];
}
于 2015-12-20T19:59:57.390 回答
0

简化此代码并同时使其更灵活的最佳方法是更改​​表单本身并使用数组。

代替

<input type="checkbox" name="green" value="Greens" />
<input type="checkbox" name="squash" value="Squash & Zucchini" />
<input type="checkbox" name="tomatoes" value="Tomatoes" />

你将会有

<input type="checkbox" name="produce[]" value="Greens" />
<input type="checkbox" name="produce[]" value="Squash & Zucchini" />
<input type="checkbox" name="produce[]" value="Tomatoes" />

和 PHP 代码:

if (empty($_REQUEST['produce'])) {
    $product = $_REQUEST['vendor_product'];
} else {
    $product = implode(', ', $_REQUEST['produce']);
}

或使用三元运算符:

$product = empty($_REQUEST['produce']) ? implode(', ', $_REQUEST['produce']) : $_REQUEST['vendor_product'];
于 2015-12-20T20:22:08.213 回答