我一直得到Undefined index:name和Undefined index:email

时间:2014-02-28 08:32:33

标签: php html

这是我的第一个表格

<style>
    .wrap-form{
        width: 700px;
        min-height: 20px;
        background-color: lightblue;
        margin: 0 auto;
    }
</style>

<div class="wrap-form">
    <form method="post" action="advanced-form-send"></form>
     Name: <input type="text" name="name"><br>
    Email: <input type="text" name="email">
    <a href="advanced-form-send.php"><input type="submit" name="submit" value="Submit"></a>
</div>

这是我的表格2,数据将发送到

<?php
    $name = $_POST["name"];
    $email = $_POST["email"];

    echo $name;
    echo $email;
?>

我该如何解决这个问题?

7 个答案:

答案 0 :(得分:1)

这就是你的表单代码应该是这样的,<a href="..."围绕你的提交按钮导致表单不被提交,在你刚刚告诉浏览器的地方,当点击这个按钮时,取用户到页面advanced-form-search.php。您应该做的是将脚本名称放在应该在form标记的操作中提交表单的位置,然后添加一个提交按钮。别忘了关闭你的标签......你错过了</form>

<div><?php if(isset($_GET['err'])){ if($_GET['err']==1){ echo 'You didn\'t fill in your name'; } elseif($_GET['err']==2){ echo 'You didn\'t fill in a correct email address';}}?></div>
<div class="wrap-form">
    <form method="post" action="advanced-form-send.php">
        Name: <input type="text" name="name"><br>
        Email: <input type="text" name="email">
       <input type="submit" name="submit" value="Submit">
    </form>
</div>

以下是发送电子邮件的PHP代码:

<?php
    if(isset($_POST['name']) && !empty(trim($_POST['name']))){
         $name = $_POST["name"];
    } else {
         header("Location: page_where_the_form_is.php?err=1");
         die()
    }
    if(isset($_POST['email']) && filter_var(trim($_POST['email']), FILTER_VALIDATE_EMAIL)){
        $email = $_POST["email"];
    }
    else {
         header("Location: page_where_the_form_is.php?err=2");
         die()
    }
    $subject='Form Submitted On The Website';
    $message="Name: {$name}\nEmail: {$email}";
    mail($to_email, $subject, $message);


 ?>

答案 1 :(得分:0)

您已使用<input type="submit" name="submit"...包裹了<a href=...按钮。这样做可以防止您的表单作为POST请求提交,而是作为GET请求链接到。

git摆脱<a href...,并将action=advanced-form-send更改为action="advanced-form-send.php"

答案 2 :(得分:0)

您可以改善您的PHP代码:

<?php

    if (isset($_POST["name"])) {
        $name = $_POST["name"];
        echo $name;
    } else {
        echo 'Eror: Attribute "name" is missing!';
    }

    if (isset($_POST["email"])) {
        $email = $_POST["email"];
        echo $email;
    } else {
        echo 'Eror: Attribute "email" is missing!';
    }

 ?>

您的表单应该更改:

<form method="post" action="advanced-form-send.php">
    Name: <input type="text" name="name"><br>
    Email: <input type="text" name="email">
    <input type="submit" name="submit" value="Submit">
</form>

答案 3 :(得分:0)

您需要包装变量。其他答案是关于表格。这个答案是关于你对变量的处理。如果您使用尚未设置的变量,PHP将发出通知。通过使用isset(),您可以确定是否设置了变量,然后使用它。

<?php

    $name = isset($_POST["name"]) ? $_POST["name"] : '';
    $email = isset($_POST["email"]) ? $_POST["email"] : '';

    echo $name;
    echo $email;


 ?>

这样做可确保您的某个字段尚未发布时不会收到通知。如果他们有,你将拥有$ name和$ email的价值。如果不是那么变量将是空字符串。

答案 4 :(得分:0)

尝试这样,

<div class="wrap-form">
    <form method="post" action="advanced-form-send">
        Name: <input type="text" name="name"><br>
        Email: <input type="text" name="email">
       <input type="submit" name="submit" value="Submit">
</form>
</div>

答案 5 :(得分:0)

提交按钮应该是两个“表单”标记。此链接也是不必要的,因为输入“submit”会将带有数据的表单发送到您在表单标记的属性“action”中设置的页面。

<div class="wrap-form">
    <form method="post" action="advanced-form-send.php">
        Name: <input type="text" name="name"><br>
        Email: <input type="text" name="email">
<input type="submit" name="submit" value="Submit">
</form>
</div>

答案 6 :(得分:-2)

你错过了一个enctype ...你们都忘记了。羞耻你!

<form method="post" action="advanced-form-send.php" enctype="multipart/form-data"></form>