有人可以用我的php / html表单帮助我吗?

时间:2014-08-19 06:50:23

标签: php html email

你好,我有一个问题,

我无法弄清楚为什么我的脚本无法正常工作。有人可以帮我弄清问题是什么吗?

我的目的是通过(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> 

5 个答案:

答案 0 :(得分: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;
    }

}

答案 1 :(得分:0)

您检查名为submit的表单字段,但表单中没有。检查您的表单验证,如下所示:

if(isset($_POST))

甚至更好

if(!empty($_POST))

或者只是检查方法

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

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

答案 2 :(得分:0)

您需要先在此行中更改代码中的部分行

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

将其更改为

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

第二个按钮不发送信息,

更改HTML CODE中的这一行

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

到此

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

同样重置按钮

第二次改变形式动作

action="<?=$PHP_SELF?>"

action=""

并记住这不要在php中发送信息

由于

答案 3 :(得分:0)

嘿,我明白你的意思了: 1)我首先建议您在前端验证使用或在html中使用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 [&#34;提交&#34;]但是提交按钮没有给出名字。以下是整体代码的外观:

<?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> 

答案 4 :(得分:0)

例如,而不是写这个:

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

在斜杠前面添加“必需”。

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