2

我迷路了。谁能解释我如何缩短这段代码。我有数百个这样的!我提交了一个带有输入值的表单。每当我不填写值时,我都会收到错误消息。所以我制作了这些 isset 块以防止返回错误。但我似乎效率很低!请帮助...谢谢

if(isset($_POST['input74'])){
$value74 = $_POST['input74'];
}else{
$value74 = "";#default value
}

if(isset($_POST['input75'])){
$value75 = $_POST['input75'];
}else{
$value75 = "";#default value
}

if(isset($_POST['input76'])){
$value76 = $_POST['input76'];
}else{
$value76 = "";#default value
4

7 回答 7

1

PHP 7 有一个新的运算符来解决这种特殊情况:空合并运算符(??) 替换了这个:

$foo = isset($foo) ? $foo : $bar

有了这个:

$foo = $foo ?? $bar;
于 2015-11-16T23:45:29.550 回答
1

您可以将其包装isset在这样的函数中

function myIsset(&$variable, $default = "")
{
    if(isset($variable))
    {
        return $variable;
    }
    else
    {
        return $default;
    }
}

然后你就这样称呼它$value74 = myIsset($_POST['input74']);

第二个参数默认为空字符串,因此如果您想设置默认值,您可以提供它或更改函数头中的默认值(如果它们都相同)。下面是显示代码工作的屏幕截图

测试

$_POST虽然是的,但至少每行代码与 1 行代码和上面的函数交换 5 行代码,您仍然会有一行。您可以将其简化为一个循环,就像我在此答案中的解释一样,但是没有看到表格并确认任何模式,我无法为此提供任何代码示例,因为您所展示的可能只是巧合

于 2015-11-16T22:31:27.610 回答
0

你可以使用array_merge.

您将使用提供的所有默认输入值设置默认数组。

$aryDefault = ['input74'=>'', 'input75'=>'',...]

然后array_merge使用您的 post 数组,它将填充所有缺失的值。注意:订单很重要,请查看文档

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。

使用array_merge($aryDefault, $_POST)以便$_POST覆盖默认值。

此外,您可以使用可变变量,以便您可以在循环中执行此操作。如果您的所有变量都以您的数组键命名,就像在您的示例中一样。

完整代码:

$aryDefault = ['input74'=>'', 'input75'=>'',...];
$aryFinal = array_merge($aryDefaults, $_POST);
foreach( $aryFinal as $key=>$value){
  $$key = $value;
}

你甚至可以用循环生成 $aryDefault,如果它超级大的话。

$aryDefault = array();
for(i=0;i<=100;i++){
  $aryDefault["input$i"] = "";
}
于 2015-11-16T23:16:59.527 回答
0

您可以创建一个简单的函数来封装 PHP 7 之前的代码:

function post($key, $default = null){
    return isset ($_POST[$key])?$_POST[$key]:$default;
}

自 PHP 7 起(使用空合并运算符 ( ??)):

function post($key, $default = null){
    return $_POST[$key] ?? $default;
}

或更好的功能只是简单(如上所述)

$value74 = $_POST['input74'] ?? ''; #default value
$value75 = $_POST['input75'] ?? ''; #default value
$value76 = $_POST['input76'] ?? ''; #default value
于 2015-11-16T23:32:29.220 回答
0

如果我理解您正确地看到您想要将变量设置为发布或其他默认值,您可以按照以下结构进行操作:

$variable = isset($_POST['name']) ? $_POST['name] : "defaultvalue";

这将设置它存在的变量,否则设置指定的默认值。我希望这有帮助。

于 2015-11-16T23:18:37.177 回答
0

PHP 支持表单中的数组。您可以使用索引命名表单字段,例如<input type="text" name="input[74]" ... />. 然后在 PHP 中,您可以使用fororforeach循环访问它们,因为它们将作为数组提供(即您将拥有$_POST["input"][74])。因此,您可以编写如下内容:

$values = $_POST["input"];
for ($i = 0; $i < MAX_INPUTS; $i++) {
  if (!isset($values[$i])) {
    $values[$i] = "";  // default value
  }
}

如果由于某种原因您无法更改 HTML 端,您仍然可以使用循环来动态创建字段名称并将数据复制到 PHP 端的数组中,例如:

$value = array();
for ($i = 0; $i < MAX_INPUTS; $i++) {
  $name = sprintf("input%d", $i);
  if (isset($_POST[$name])) {
    $value[$i] = $_POST[$name];
  } else {
    $value[$i] = "";  // default
  }
}

在这两种建议的解决方案中,您只有几行代码,而不是几乎相同行的数十次重复。在这两个示例中,我假设您的字段以开头input0并且总共有MAX_INPUTS字段。如果并非所有字段都存在(例如,您只有 input1、intput2、input74 和 input75),您可以创建一个包含字段编号的数组:

$field_list = array(1,2,74,75);

然后使用它来检查您的数据(这里是 HTML 字段名称中包含数组的示例):

$values = $_POST["input"];
foreach ($field_list as $num) {
  if (!isset($values[$num])) {
    $values[$num] = "";  // default value
  }
}
于 2015-11-16T22:27:35.740 回答
0

使用三元组来缩短代码:

$value74 = isset($_POST['input74']) ? $_POST['input74'] : 'Default value';
$value75 = isset($_POST['input75']) ? $_POST['input75'] : 'Default value';
$value76 = isset($_POST['input76']) ? $_POST['input76'] : 'Default value';

或者您也可以遍历 $_POST 数组,但必须进行一些过滤/验证。快速的想法:

if(!empty($_POST)) {
    $i = 0;
    $arr = array();
    foreach($_POST as $input) {
        $arr[$i] = $input;
        $i++;
    }
}

$arr然后会产生一个像

Array
(
    [74] => 'value74'
    [75] => 'value75'
    [76] => 'value76'
)
于 2015-11-16T23:05:01.010 回答