PHP - 带 POST 验证的 for 循环

问题描述 投票:0回答:1

我是 PHP 新手,我正在做一些非常简单的应用程序(测试)。 我有一个包含以下代码的表格:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["val1"])) {
    $err_val1 = "Error";
  } else {
    $val1 = test_input($_POST["val1"]);
  }
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
<div class='col-lg-1 center'>
<label>1</label>
<input type='text' class='form-control' name='val1'>
<span class='error'><?php echo (!empty($err_val1)) ? 'Error' : '';?></span>
</div>

有没有办法使用 for(或 foreach)循环?因为有 139 个“val”,我想优化代码,避免同一部分重复 139 次。

php forms for-loop validation
1个回答
0
投票

是的,有一个办法:

for ($i = 1; $i <= 139; $i++) {
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["val" . $i])) {
      extract([("err_val" . $i) => "Error"]);
    } else {
      extract(("val" . $i) => test_input($_POST["val" . $i]));
    }
  }
}

上面未经测试的代码的目的是,如果对应的值为空,则创建 err_val(如 err_val123);如果对应的值不为空,则创建 val(如 val123)。

extract
获取键值对的关联数组,并将键提取到具有相同名称和分配给它们的值的变量中。也许我犯了一些错别字,如果这不起作用,请告诉我。

但是这段代码可读性不是很好,为什么我们不使用数组来代替呢?

$vals = [];
$errors = [];
for ($i = 1; $i < 139; $i++) {
  if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["val" . $i])) {
      $errors[$i] = "Error";
    } else {
      $values[$i] = test_input($_POST["val" . $i]);
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.