简单 PHP 表单模板

Simple PHP Form Templating

您有一个 PHP 表单,其中包含以下字段:

(代码块 1)

City: <input type="text" name="city"><br>

表单的 action attribute 设置为 itself。当 submitted 到服务器时,页面验证该字段,如果它无效,它 return 与以下页面相同:

  1. 一条错误消息
  2. 表单文本输入框周围的红色边框
  3. 用户最初在表单输入文本框中输入的值

如果无效,我可以使用 if then else 结构和 return code block 2

(代码块 2)

<?php echo "The form field with red border has an invalid entry"; ?>
City: <input type="text" name="city"
style="border-color:red" value="<?php echo $record->city ?>"><br>

我的问题是,如果您要向 code block 1 添加一些模板,这样您就不需要 code block 2,您会怎么做?

请将您的答案集缩小为:

  1. 纯 PHP 答案(没有任何外部模板库或 PHP 框架)。
  2. 适合那些 PHP 是他们所知道的唯一服务器端脚本的人(并且他们相对缺乏经验)。

您可以创建一个 $has_error 关联数组并将其直接集成到您的原始表单中,而不是使用 if/else,如下所示:

City: 
<input type="text" name="city" class="<?= $has_error['city']['class'] ?>" value="<?= $record->city ?>">
<span><?= $has_error['city']['message'] ?></span>
<br>

并像这样构造您的验证错误:

$has_error = [
  'city' = [
    'class' => '',
    'message'=> ''
  ]
]

然后在验证端应用错误 class 和消息(无论您在哪里提交表单)。因此,当 city 输入字段未通过验证时,您的 $has_error 数组将如下所示:

$has_error = [
  'city' = [
    'class' => 'error',
    'message'=> 'This field has an error'
  ]
]

您的错误 class 看起来像这样:

.error{
  border: 2px solid red;
}

解决这个问题的一个简单方法是将 code block 2 的格式添加到您的 CSS 文件,然后使用 PHP 将 class 添加到您的输入。

CSS:

.errorField {
    border-color: red;
}

HTML/inline PHP:

City: <input type="text" <?php echo errorCity ? 'class="errorField"' : '' ?> name="city" value="<?php echo $record->city ?>"><br>

如果输入无效,则让您的验证 PHP 将 errorCity 设置为 true

内联 PHP 正在做的是检查 bool errorCity 的值,如果为真则回显 class="errorField",如果为假则什么都不回显。