PHP foreach样式输入字段

时间:2014-02-15 22:05:22

标签: php function validation

晚上,

在PHP中使用foreach时,是否可以在受影响的输入字段中添加样式?我正在使用此代码来验证表单内的输入字段:

$errors         = array();
$values         = array();
$error_message  = '';

if(isset($_POST['update'])){
    foreach ($_POST as $key => $value) {
        $values[$key] = trim(stripslashes($value)); // input filter
    }

    if (check_input($values['invoice_email']) == false) {
        $errors['invoice_email'] = 'Please enter an email.';
    } else if (!preg_match('/([\w\-]+\@[\w\-]+\.[\w\-]+)/', $values['invoice_email'])) {
        $errors['invoice_email'] = 'Invalid email format.';
    }

    if (sizeof($errors) == 0) {
        $values = array();
        print 'Form is OK!';
    } else {
        foreach ($errors as $error) {
            print $error_message .= $error . '<br />';
        }
    }
}

如果有人想看到这个功能,那么代码就是:

function check_input($input) {
    if (strlen($input) == 0) {
        return false;
    } else {
        // TODO: other checks?

        return true;
    }
}

编辑:

我忘了说我希望受影响的输入字段的边框为1px纯红色,以便用户可以轻松查看他们缺少哪些输入字段或遇到问题。

2 个答案:

答案 0 :(得分:1)

编辑#2

您还可以使用HTML5选项required,而无需触及您的功能。

示例:

<input type="text" name="name" required />

此外,使用包含<b></b>变量的$error标记在您的循环中加载样式表:

foreach ($errors as $error) {

echo '<link rel="stylesheet" href="style_errors.css" type="text/css">';

    print $error_message .= '<b>' . $error . '</b>' . '<br />';
}

<强> CSS

<head>
<style>
.error1x input {
border: 1px solid red;
}

input {
border: 1px solid green;
}

</style>
</head>

参考:

除此之外,你可以使用JS / jQuery和AJAX也是一个额外的选择。


编辑#1

这是另一种使用三元运算符的方法:

<input type="text" name="input1" class="error1 <?php echo empty($_POST['input1']) ? $_POST['input1'] : 'noerror' ?>" />

<style>
.error1 { border: 1px solid red; }
.noerror { border: 2px solid green; }
</style>

并使用相同的CSS类来处理输入错误。


原始答案

您可以执行类似

的操作
$errors['invoice_email'] = '<div class="error1">Please enter an email.</div>';

然后只需使用CSS。

示例:

<?php
...
if (check_input($values['invoice_email']) == false) {
        $errors['invoice_email'] = '<div class="error1">Please enter an email.</div>';
    }

...

?>

// inside the same file
<style>

.error1 { border: 1px solid red; }

.noerror {
background:#c0c0c0;
}

</style>

或从外部样式表加载

示例输入字段

<input type="text" name="email" class="noerror">

答案 1 :(得分:0)

使用PHP渲染后,你无法操纵DOM,你需要使用Javascript才能完成这项工作。

然而,如果您使用php创建表单,并且每次发布后总是重新加载。 例如:

echo "<form><input type='text' name='email' id='email'></input>.....</form>"; 

您可以轻松地在输入中放置您想要的任何属性,以便在发布帖子后使其看起来像您想要的那样。

示例: 页面重新加载后,使用您想要的属性打印输入元素。

echo "<input type='text' style='border-radius:1px solid red' name='n1' id='n1'></input>";

如果您没有使用PHP创建表单并且想要在不重新加载页面的情况下进行更改,那么唯一的方法是使用javascript。

javascript中的equivelant将是:

document.getElementById['n1'].style.border="1px solid red";

尽管仅凭这一点无法帮助你。您需要使用javascript进行所有验证才能实现此目的。