验证while循环

时间:2017-09-25 10:38:00

标签: php forms

我想验证包含多个输入字段的表单。其中大部分都是简单的文字/数字,并且工作正常。

对于表单的一部分,我创建了几个字段('year'和'text')并通过while循环复制它们。

它看起来像这样:

<?php while ($mcount <= 10):?>
<h4><?= __("Moment") ?> <?= $mcount ?></h4>
<div class="row">
    <label for="year_<?= $mcount ?>"><?= __("Year") ?></label>
    <input name="year_<?= $mcount ?>" value="" ></input>
    <span class="error">Error Message for this particular Year</span>
</div>
<textarea name="text_<?= $mcount ?>" maxlength="400"></textarea>
<span class="error">Error Message for this particular Textarea</span>
<?php $mcount++; ?>

我尝试用这个来验证表单:

$texts = [ 'text_1', 'text_2', 'text_3', 'text_4', 'text_5', 'text_6', 'text_7', 'text_8', 'text_9', 'text_10',];
    foreach ($texts as $mText) {
        if (empty($_POST[$mText])) {
            $errors[] = 1;
            echo "missingtext". $mText ;
        }
    }

我的问题是在验证中创建一个变量,该变量负责特定年份/文本的错误消息。以及如何在while循环中输出此变量。

作为特殊功能,可能会发生10个时刻的部分由foreach循环创建 - 由一个processwire中继器字段填充。

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

做一些明智的事情并使用PHP数组:

<?php while ($mcount <= 10):?>
<h4><?= __("Moment") ?> <?= $mcount ?></h4>
<div class="row">
    <label for="year[<?= $mcount ?>]"><?= __("Year") ?></label>
    <input name="year[<?= $mcount ?>]" value="" ></input>
    <span class="error">Error Message for this particular Year</span>
</div>
<textarea name="text[<?= $mcount ?>]" maxlength="400"></textarea>
<span class="error <?= isset($errors[$mcount])?"":"hidden" ?>">Error Message for this particular Textarea</span>
<?php $mcount++; ?>

然后在代码中,这是

的问题
foreach ($_POST["text"] as $ind => $mText) {
    if (empty($mText)) {
        $errors[$ind] = 1;            
    }
}

并且有一种风格:

.hidden { display: none; }

文档在creating arrays in an HTML form

上有更多信息

答案 1 :(得分:0)

在循环之外定义数组

public final class SomeThing{

  private String val;

  @JsonCreator
  public static SomeThing create(final String value) {
    SomeThing result = new SomeThing();
    result.setValue(value);
    return result;
  }

  public void setValue(String value) {
    this.val = value;
  }
}

这样做可以防止在每次迭代时覆盖数组。

然后在循环添加,

$texts = [ 'text_1', 'text_2', 'text_3', 'text_4', 'text_5', 'text_6', 'text_7', 'text_8', 'text_9', 'text_10',];
$errors = [];

这样做会为数组添加新的错误

然后一旦循环完成,

array_push($errors, mText . ' cannot be empty.');

如果if (!empty($errors)) { foreach($errors as $error) { echo $error; } } 不为空(如果存在错误),这样做会循环错误。

阅读材料

array_push