【问题标题】:Can someone help me with my php/html form?有人可以帮我处理我的 php/html 表单吗?
【发布时间】:2014-08-19 06:50:23
【问题描述】:

你好,我有一个问题,

我无法弄清楚为什么我的脚本没有按我的预期工作。有人可以帮我找出问题所在吗?

我的意图是通过 (php_self) 验证同一页面上的表单,因此当某些内容无效时,它将通过输入旁边的 echo 函数显示错误。

问题是它没有回显错误

----这是PHP代码-----

//define variables and set te empty//
$name = $email = $remark = "";
// errors // 
$ErrEmail = $ErrName = $ErrRemark = "";
// pre match //
$ErrMatchEmail = "";
// succes & fail //
$error = $succes = "";

if (isset($_POST['submit'])) {
    $name = Trim(stripslashes($_POST['name']));
    $lastname = Trim(stripslashes($_POST['lastname']));
    $number = Trim(stripslashes($_POST['number']));
    $email = Trim(stripslashes($_POST['email']));
    $remark = Trim(stripslashes($_POST['remark']));

    if (empty($name)) {
        $ErrName = 'Empty';
    } else {
        $ErrName = '';
    }

    if (empty($email)) {
        $ErrEmail = 'Empty';
    } else {
        $ErrEmail = '';
    }

    if (empty($remark)) {
        $ErrRemark = 'Empty';
    } else {
        $ErrRemark = '';
    }

    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
        $ErrMatchEmail = "email is not valid";
    } else {
        $ErrMatchEmail = "";
    }

    if (empty($ErrEmail) && empty($ErrName) && empty($ErrRemark) && empty($ErrMatchEmail)) {
        $to = 'contact@domain.nl';
        $subject = 'Contact Form: domain.nl';

        $body = 'test';

        $headers = 'From: '.$email."\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

        if (mail($to, $subject, $body, $headers)) {

            $succes = 'form is send';
        }
    } else {
        $error = 'something went wrong';
    }
}

-------------还有这个html代码----

<form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data">
    <input placeholder="Name*" name="name" type="text"/><?php echo $ErrName; ?>
    <input placeholder="Last name" name="lastname"/>
    <input placeholder="Number" name="number"/>
    <input placeholder="E-mail*" name="email"/><?php echo $ErrMatchEmail; ?><?php echo $ErrEmail; ?>
    <textarea placeholder="Remark/Question*" name="remark"/></textarea><?php echo $ErrRemark;
    <button type="submit">Send</button><button type="Reset">Reset</button>
    <?php echo $succes; echo $error; ?>
</form> 

【问题讨论】:

  • 只是简单地看了一下,我想你忘记了&lt;?php echo $ErrRemark;的结束括号
  • 代码做了什么或不做什么......?
  • 它没有回显问题所在的错误

标签: php html email


【解决方案1】:

试试下面的代码。验证用户输入不需要多个变量。我用一个数组来存储所有的错误。

<?php
if(isset($_GET['flag']) and isset($_GET['msg'])) {
    if($_GET['flag'] == 1 ) {
        echo "<span style='color: green'>$_GET[msg]</span>";
    }

    if($_GET['flag'] == 0) {
        echo "<span style='color: red'>$_GET[msg]</span>";
    }
}
?>


<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
    <table>
        <tr>
            <td><input type="text" name="firstname" placeholder="First Name*"/></td>
        </tr>
        <tr>
            <td><input type="text" name="lastname" placeholder="Last Name"/></td>
        </tr>
        <tr>
            <td><input type="number" name="number" placeholder="Number"/></td>
        </tr>
        <tr>
            <td><input type="email" name="email" placeholder="Email*"/></td>
        </tr>
        <tr>
            <td><textarea name="remarks" placeholder="Remarks/Questions*" cols="30" rows="10"></textarea></td>
        </tr>
        <tr>
            <td><input type="submit" value="Submit" name="btnSub"/> <input type="reset" value="Reset"/></td>
        </tr>
    </table>
</form>

<?php
if (isset($_POST['btnSub'])) {
    $errors = array();
    if (empty($_POST['firstname'])) {
        $errors[] = 'Please enter your first name';
    } else {
        $firstname = $_POST['firstname'];
    }

    if (empty($_POST['lastname'])) {
        $lastname = '';
    } else {
        $lastname = $_POST['lastname'];
    }

    if (empty($_POST['number'])) {
        $number = '';
    } else {
        $number = $_POST['number'];
    }

    if (empty($_POST['email'])) {
        $errors[] = 'Please enter your email address';
    } else {
        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errors[] = 'Invalid email address supplied';
        } else {
            $email = $_POST['email'];
        }
    }

    if (empty($_POST['remarks'])) {
        $errors[] = 'Please enter your remarks or question';
    } else {
        $remarks = $_POST['remarks'];
    }

    //Now check for the errors
    if (!empty($errors)) {
        $error = '';
        foreach($errors as $err) {
            $error .= $err.'<br>';
        }
        header("Location: $_SERVER[PHP_SELF]?flag=0&msg=$error");
        exit;
    }

    $to = 'contact@domain.nl';
    $subject = 'Contact Form: domain.nl';

    $body = 'test';

    $headers = 'From: '.$email."\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    if(mail($to,$subject,$body,$headers)){
        $success = 'Form is send';
        header("Location: $_SERVER[PHP_SELF]?flag=1&msg=$success");
        exit;
    } else {
        $error = 'Something goes wrong...';
        header("Location: $_SERVER[PHP_SELF]?flag=0&msg=$error");
        exit;
    }

}

【讨论】:

  • 使用 GET 在 URL 中传递您的错误消息允许用户显示他们想要的任何内容,并且不是显示消息的真正好的解决方案。您应该使用一个数组(就像您所做的那样)但使用键,其中一个键对应于一个字段名称,因此您可以为每个字段显示错误。见这里:stackoverflow.com/questions/11237655/…
【解决方案2】:

您检查了一个名为 submit 的表单字段,但您的表单中没有。像这样检查您的表单验证:

if(isset($_POST))

甚至更好

if(!empty($_POST))

或者只是检查方法

if($_SERVER['REQUEST_METHOD'] == 'POST')

有很多方法可以检查表单是否已提交,而无需特定的字段检查。通过您的检查,如果必须删除该字段,您的验证将不再有效。

【讨论】:

  • 另外,PHP 修剪函数是使用 trim() 而不是 Trim() 调用的。
【解决方案3】:

您需要先更改代码中的某些行

if (isset($_POST['submit'])){

改成

if($_SERVER['REQUEST_METHOD']=='POST'){

第二个按钮不发送信息,

在您的 HTML 代码中更改这一行

<button type="submit">Send</button>

到这里

<input type="submit" value='submit'/>

重置按钮也一样

在表单操作中也进行第二次更改

action="<?=$PHP_SELF?>"

action=""

记住不要在php中发送信息

谢谢

【讨论】:

    【解决方案4】:

    嘿,我明白你的意思了: 1)我首先建议您在前端使用 html 中的 use 或 required 进行验证。见下文

    <form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data">
            <input placeholder="Name*" name="name" type="text" required/><?php echo $ErrName; ?>
            <input placeholder="Last name" name="lastname" required/>
            <input placeholder="Number" name="number" required/>
            <input placeholder="E-mail*" name="email" required/><?php echo $ErrMatchEmail; ?><?php echo     $ErrEmail; ?>
            <textarea placeholder="Remark/Question*" name="remark" required/></textarea><?php echo $ErrRemark;
            <button type="submit">Send</button><button type="Reset">Reset</button>
            <?php echo $succes; echo $error; ?>
        </form> 
    

    此外,您的 php post 方法正在监听 $_POST["submit"] 但尚未为提交按钮命名。以下是您的整体代码的外观:

    <?php
    //define variables and set te empty//
    $name = $email = $remark = "";
    // errors // 
    $ErrEmail = $ErrName = $ErrRemark = "";
    // pre match //
    $ErrMatchEmail = "";
    // succes & fail //
    $error = $succes = "";
    
    if (isset($_POST['submit'])) {
        $name = Trim(stripslashes($_POST['name']));
        $lastname = Trim(stripslashes($_POST['lastname']));
        $number = Trim(stripslashes($_POST['number']));
        $email = Trim(stripslashes($_POST['email']));
        $remark = Trim(stripslashes($_POST['remark']));
    
        if (empty($name)) {
            $ErrName = 'Empty';
    
    
        } else {
            $ErrName = '';
        }
    
        if (empty($email)) {
            $ErrEmail = 'Empty';
    
    
        } else {
            $ErrEmail = '';
    
        }
    
        if (empty($remark)) {
            $ErrRemark = 'Empty';
    
        } else {
            $ErrRemark = '';
        }
    
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
            $ErrMatchEmail = "email is not valid";
    
    
        } else {
            $ErrMatchEmail = "";
        }
    
        if (empty($ErrEmail) && empty($ErrName) && empty($ErrRemark) && empty($ErrMatchEmail)) {
            $to = 'contact@domain.nl';
            $subject = 'Contact Form: domain.nl';
    
            $body = 'test';
    
            $headers = 'From: '.$email."\r\n";
            $headers .= "MIME-Version: 1.0\r\n";
            $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    
            if (mail($to, $subject, $body, $headers)) {
    
                $succes = 'form is send';
            }
        } else {
            $error = 'something went wrong';
    
    
        }
    }
    
    ?>
    
    <form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST" enctype="multipart/form-data">
        <input placeholder="Name*" name="name" type="text" required/><?php echo $ErrName; ?>
        <input placeholder="Last name" name="lastname" required/>
        <input placeholder="Number" name="number" required/>
        <input placeholder="E-mail*" name="email" required/><?php echo $ErrMatchEmail; ?><?php echo $ErrEmail; ?>
        <textarea placeholder="Remark/Question*" name="remark" required/></textarea><?php echo $ErrRemark;?>
        <button type="submit" name="submit">Send</button><button type="Reset">Reset</button>
        <?php echo $succes; echo $error; ?>
    </form> 
    

    【讨论】:

      【解决方案5】:

      例如,不要这样写:

      <input placeholder="Name*" name="name" type="text"/>
      

      在斜线之前的末尾添加一个“必需”。

      <input placeholder="Name*" name="name" type="text" required/>
      

      【讨论】:

        猜你喜欢
        • 2021-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 2020-06-04
        • 1970-01-01
        • 2016-04-28
        相关资源
        最近更新 更多