简单 PHP 表单模板
Simple PHP Form Templating
您有一个 PHP 表单,其中包含以下字段:
(代码块 1)
City: <input type="text" name="city"><br>
表单的 action attribute
设置为 itself
。当 submitted
到服务器时,页面验证该字段,如果它无效,它 return 与以下页面相同:
- 一条错误消息
- 表单文本输入框周围的红色边框
- 用户最初在表单输入文本框中输入的值
如果无效,我可以使用 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
,您会怎么做?
请将您的答案集缩小为:
- 纯 PHP 答案(没有任何外部模板库或 PHP 框架)。
- 适合那些 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"
,如果为假则什么都不回显。
您有一个 PHP 表单,其中包含以下字段:
(代码块 1)
City: <input type="text" name="city"><br>
表单的 action attribute
设置为 itself
。当 submitted
到服务器时,页面验证该字段,如果它无效,它 return 与以下页面相同:
- 一条错误消息
- 表单文本输入框周围的红色边框
- 用户最初在表单输入文本框中输入的值
如果无效,我可以使用 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
,您会怎么做?
请将您的答案集缩小为:
- 纯 PHP 答案(没有任何外部模板库或 PHP 框架)。
- 适合那些 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"
,如果为假则什么都不回显。