我刚接触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个"天",我想优化代码,避免重复139次相同的部分.

=Edit=

我设法解决了这个问题.

    $errors = [];
    $fields = ['val1', 'val2', 'val3', ...];
    $values = [];
    $values['val1'] = $values['val2'] =$values['val3'] = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      foreach ($fields as $field) {
        if (empty($_POST[$field])) {
          $errors[] = $field;
        } else {
          $values[$field] = $_POST[$field];
        }
      }
    
      if (empty($errors)) {
          ... execute SQL INSERT statement ...
      }

表格

for ($i = 1; $i <= 3; $i++) {
echo "<div class='col-lg-1 center'>";
echo "<label>".$i."</label>";
echo "<input type='text' class='form-control' name='val".$i."' value='".$values['val' . $i]."'>";
if (in_array('val'.$i, $errors)):
echo "<span class='error'>Error</span>";
endif;
echo "</div>";
}

推荐答案

是的,有一种方法:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  for ($i = 1; $i <= 139; $i++) {
    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获取键-值对的关联数组,并将键提取到具有相同名称和赋值的变量中.也许我做了一些打字错误,让我知道如果这不是它的工作方式.

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

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

Php相关问答推荐

将一个数字分配到一系列因素中(就像贪婪算法)

无法添加ProxyClass__setInitialized()上的忽略

一列必须指定多个变量的Laravel查询

Symfony Api平台:按自定义实体方式排序结果

将产品类别添加到WooCommerce产品附加信息

WooCommerce/WordPress:简单的产品属性显示

用于计算付款费用的WooCommerce管理编辑产品中的自定义复选框

使用HPOS过滤WooCommerce中的订单列表

Font Awesome 加载图标未显示在 WooCommerce 管理员列表中

Laravel 在数据库上显示加密列

Woocommerce 相关产品按其类别或排名数学主要类别

使用 Spomky Labs JWT 框架中的 verifyWithKey 验证 id_token JWT 的签名需要 30 秒以上

PHP向API发送curl请求

从插件更改主题功能,function_exists 不起作用

为WooCommerce中的Guest用户保存唯一的客户代码到订单中

如何使用 WhatsApp Cloud API 向 WhatsApp 发送消息,而无需在发送消息之前注册收件人号码?

如何获取用户之间的最新消息列表

正则表达式 (php) 匹配单个 [ 或单个 ] 但忽略 [[ ]] 之间的任何内容?

Docker: unixodbc.h 没有这样的文件或目录.已安装 unixodbc-dev 时出现pecl install sqlsrv错误

如何在 php/laravel 中获取元素在数组中的位置