Php 表单验证错误消息

Php 表单验证错误消息,php,html,validation,Php,Html,Validation,我有以下表格: <form method="post" action="<?= htmlspecialchars($_SERVER['PHP_SELF']) ?>" id="submit-form"> <label for='fname'>Name</label> <input type='text' name="customer" value="" id="customer" maxlength='50'/>

我有以下表格:

 <form method="post" action="<?= htmlspecialchars($_SERVER['PHP_SELF']) ?>" id="submit-form">
      <label for='fname'>Name</label>
      <input type='text' name="customer" value="" id="customer" maxlength='50'/>
      <?php echo "<h1>$errName</h1>" ?>
      <label for='fname'>Company Name</label>
      <input type='text' name="company" value="" id="company" maxlength='50' />
      <label for='email'>Email Address</label>
      <input type='text' name='email' value="" id='email' maxlength='50'/>
      <label for='number'>Telephone Number</label>
      <input type='text' name="phone" value="" id="phone" maxlength='20'/>
      <input type="hidden" name="campaign" id="campaign" value="Getting Started" maxlength='300'>
      <input type='submit' name="submit-btn" id="submit-btn" value='Send Request'/>
    </form>
我在显示
name
字段的错误消息时遇到问题。正则表达式只允许字母和空格。如果有人输入12348jack之类的输入,则
$error
变量应设置为
true
,并且不应发送电子邮件

但是,每次我这样做时,都会发送电子邮件,并且我的表单上不会显示任何错误消息

有谁能给我指出我的错误方向吗


非常感谢

我认为这是一个范围问题

您正在创建此测试的电子邮件

 if ($errors == false) {

     ....
但是您从未在
验证\u输入中实际设置
$errors
,因为它超出范围

我建议您更改函数以传递
$errors
变量,如下所示。注意
&$

function validate_input($data, $type, &$errors) {
然后您的函数将可以访问它

因此,您的验证调用将是

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = validate_input($_POST['customer'], "name", $errors);
    $email = validate_input($_POST['email'], "email", $errors);
    $company = validate_input($_POST['company'], "company", $errors);
    $phone = validate_input($_POST['phone'], "number", $errors);
    $campaign = validate_input($_POST['campaign'], "campaign", $errors);
}

为什么不创建一个包含所有HTML代码的变量,然后通过echo输出到视频,这样如果您想创建验证和管理HTML代码

$fields = array ('name'=> '<input type='text' name="customer" value="" id="customer" maxlength='50'/>'...[all your form components]...);

if(!empty($_POST)){
    $validate_input($postedData,$postedType);
}
然后是要渲染的位置

 $buffer = <form method="post" action=" htmlspecialchars($_SERVER['PHP_SELF']) " id="submit-form">
    foreach (fields as $key => $htmlCode){
        $buffer.= "<label>$key</label><".$htmlCode.">;
        if(!empty($this->errors[$key])
            $buffer.="<label class='error'>".$this->errors[$key]."</label>";

    }
$buffer=
foreach(字段为$key=>$htmlCode){
$buffer.=“$key;
如果(!empty($this->errors[$key])
$buffer.=''.$this->errors[$key]。'';
}
这部分代码未经测试,但我希望我已经告诉您这是一个问题

您可以在验证函数中使用
global
关键字

function validate_input($data, $type) {
global $errors;
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
....


提交表单时,我也推荐@RiggsFolly solution

。抱歉,我没有看到所有的php代码:)如果可能的话,最好避免使用global,在这种情况下,使用global是完全不必要的事实上,我在看到你的解决方案试图给他另一个解决方案后编辑了我的解决方案,你很高兴感谢你的帮助,这确实解决了问题
 $buffer = <form method="post" action=" htmlspecialchars($_SERVER['PHP_SELF']) " id="submit-form">
    foreach (fields as $key => $htmlCode){
        $buffer.= "<label>$key</label><".$htmlCode.">;
        if(!empty($this->errors[$key])
            $buffer.="<label class='error'>".$this->errors[$key]."</label>";

    }
function validate_input($data, $type) {
global $errors;
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
....