简单的PHP表单模板

时间:2016-10-28 17:31:29

标签: php html forms templating

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

(代码区块1)

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

表单action attribute设置为itself。当submitted到服务器时,页面会验证该字段,如果该字段无效,则返回相同的页面:

  1. 错误消息
  2. 表单文本输入框周围的红色边框
  3. 用户最初在表单输入文本框中输入的值
  4. 我可以使用if then else构造,如果无效则返回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是他们所知道的唯一服务器端脚本的人(而且他们相对缺乏经验)。

2 个答案:

答案 0 :(得分:0)

您可以创建$ 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'=> ''
  ]
]

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

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

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

.error{
  border: 2px solid red;
}

答案 1 :(得分:0)

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

CSS:

.errorField {
    border-color: red;
}

HTML /内联PHP:

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

如果输入无效,请将验证PHP设置为errorCitytrue

内联PHP正在做的是检查bool errorCity的值并回显class="errorField"如果它是真的,或者如果它是假的则没有。