【问题标题】:Simple php "Undefined index" error on form submit表单提交上的简单 php“未定义索引”错误
【发布时间】:2014-05-02 06:07:25
【问题描述】:

除了$fname$mname$lname 之外,每个$_POST 项目都会出现此错误。我不明白为什么。我已经搜索了一个解决方案,并且 isset 的建议是最常见的,但是我尝试了几种不同的形式,它仍然不适合我。

注意:未定义索引:第 13 行 C:\xampp\htdocs\php\signin.php 中的邮政编码

注意:未定义索引:第 15 行 C:\xampp\htdocs\php\signin.php 中的 homephone

注意:未定义索引:第 16 行 C:\xampp\htdocs\php\signin.php 中的 mobphone

signin.php

<?php

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

    $fname=$_POST['firstname'];
    $mname=$_POST['middlename']; 
    $lname=$_POST['lastname'];
    $dob=$_POST['dateofbirth'];
    $address=$_POST['address'];
    $city=$_POST['city'];
    $state=$_POST['state'];
    $country=$_POST['country'];
    $postcode=$_POST['postcode'];
    $email=$_POST['email'];
    $homephone=$_POST['homephone'];
    $mobphone=$_POST['mobphone'];
    $preferred=$_POST['preferred'];

    include_once("includes/link.php");

    $sql=("INSERT INTO `member` VALUES ('$fname', '$mname', '$lname', '$dob', '$address', '$city', '$state', '$country', '$postcode', '$email', '$homephone', '$mobphone', 'preferred')");

    mysqli_query($link, $sql);

    mysqli_close($link);
    }
?>

link.php

<?php

    $hostname = "localhost";
    $user = "root";
    $password = "********";
    $link = mysqli_connect($hostname, $user , $password);

    if (!$link){
    echo "server is being lame";
    exit;
    };
    mysqli_select_db($link, "cp2cwonrlvDB3");
    if (!mysqli_select_db($link, "cp2cwonrlvDB3")){
    echo "Could not connect brudda";
    };

?>

表单html:

<html>
<head>
<title>Example form</title>
<style type="text/css">

label
{
width: 100px;
float: left;
text-align: right;
margin-right: 0.5em;
display: block
}

.reset {
margin-left:50px;
}

h3 {
margin-left:15px;
}

</style>
<script>
<?php
    include 'includes/connection.php'
?>
</script>
</head>

<body>

<div class="container">
    <h2>Sign up to CWON</h2>
    <form method="POST" action="signin.php" novalidate>

        <label for="fisrtname">First Name:</label>
        <input type="text" name="firstname" required placeholder="Enter your first name" maxlength="25"><br />

        <label for="middlename">Middle Name:</label>
        <input type="text" name="middlename" placeholder="Enter your middle name"  maxlength="25"><br />

        <label for="lastname">Last Name:</label> 
        <input type="text" name="lastname" required placeholder="Enter your last name"  maxlength="25"><br />

        <label for="dateofbirth">Date of Birth:</label> 
        <input type="date" name="dateofbirth" required maxlength="25"><br />

        <label for="address">Address:</label> 
        <input type="text" name="address" required maxlength="100" placeholder="Enter your home address"><br />

        <label for="city">City:</label> 
        <input type="text" name="city" required maxlength="100" placeholder="Enter your city"><br />

        <label for="state">State:</label> 
        <select name="state">
            <option value="NSW">NSW</option>
            <option value="QLD">QLD</option>
            <option value="VIC">VIC</option>
            <option value="SA">SA</option>
            <option value="WA">WA</option>
            <option value="NT">NT</option>
            <option value="TAS">TAS</option>
        </select> <br />

        <label for="country">Country:</label> 
        <input type="text" name="country" required maxlength="100" placeholder="Enter your country"><br />

        <h3>Preferred contact:</h3>
        <label for="preferred">Home Phone:</label>
        <input type="radio" name="preferred" value="Home Phone"><br /><br />

        <label for="preferred">Mobile Phone:</label>
        <input type="radio" name="preferred" value="Mobile Phone"><br /><br />

        <label for="preferred">Email:</label>
        <input type="radio" name="preferred" value="Email"><br /><br />

        <label for="homenumber">Home Number:</label>
        <input type="text" name="homenumber" placeholder="Enter your home number"><br />

        <label for="mobnumber">Mobile Number:</label>
        <input type="text" name="mobnumber" placeholder="Enter your mobile number"><br />

        <label for="email">Email Address:</label> 
        <input type="email" name="email" required maxlength="100" placeholder="Enter your email address"><br />

        <label for="postcode">Postcode:</label>
        <input type="number" name="postcode" required min="1000" max="9999" placeholder="4-digit"><br />

        <label for="occupation">Occupation:</label> 
        <input type="text" name="occupation" maxlength="50" placeholder="Enter your occupation"><br />

        <label for="hobbies">Hobbies:</label> 
        <input type="text" name="hobbies" maxlength="200" placeholder="separate with commas"><br />

        <label for="interest">Interests:</label> 
        <select name="interest">
            <option value="Fund Raisers">Fund Raisers</option>
            <option value="Domestic Volunteering">Domestic Volunteering</option>
            <option value="Foreign Volunteering">Foreign Volunteering</option>
            <option value="All of the above">All of the above</option>
        </select> <br /><br />

        <label for="terms">Terms and Conditions</label> 
        <input type="checkbox" name="terms"><br /><br /><br />

        <label for="newsletter">Sign up for the CWON newsletter</label> 
        <input type="checkbox" name="newsletter"><br /><br /><br /><br />

        <input type="reset" name="reset" value="Reset" class="reset" onclick="set_focus()" />
        <input type="submit" name="submit" value="Submit" class="submit">

    </form>
</div>

【问题讨论】:

  • 检查每个 POST 字段 isset($_POST['field_name'])

标签: php mysql


【解决方案1】:

看到$$_POST 数组中。全部删除。

 $dob=$_POST['$dateofbirth'];
              ^------------------ That (Remove them all)

编辑:

您需要更改邮政编码的名称,因为它反映了手机。

 <label for="postcode">Postcode:</label>
 <input type="number" name="postcode" required min="1000" max="9999" placeholder="4-digit"><br />

现在将它们更改为...

$homephone=$_POST['homenumber']; //<--- Should be homenumber.`
$mobphone =$_POST['mobnumber'];
$postcode =$_POST['postcode'];

【讨论】:

  • 如此明显却又如此隐蔽。 :3
  • 我已经删除了它们,现在我只剩下您在上面编辑的问题中看到的三个错误。
  • Fox ,请按照@YUNOWORK 对您的问题的要求发布 HTML 代码。
  • @Fox,希望您进行了更改,但在检查请求变量之前始终使用 isset 构造...
  • @Fox,使用mysqli_escape_string 过滤变量以避免SQLInjection。
【解决方案2】:

在尝试访问参数之前,您需要检查并确保存在值。这将确保在您尝试使用它们之前设置它们。这可以使用isset() 函数来完成。示例:

// check values exist before using them
if(isset($_POST['$dateofbirth'])){
    $dob=$_POST['$dateofbirth'];
}

此外,您的 SQL 容易受到注入攻击。您确实应该在查询中使用参数之前对其进行清理。 MySQLi Parameterized Queries 或 PDO Queries 将被推荐。

请注意最终错误不包括 $,因此删除它并不能完全解决问题。

【讨论】:

  • 你是对的关于消毒,但我只是在玩插入一个虚拟网站来学习。至于检查值,我不完全确定如何以我的技能水平做到这一点。我会读进去的。
  • 编辑建议检查值的方法;)
【解决方案3】:

变化:

$dob=$_POST['$dateofbirth'];

收件人:

$dob=$_POST['dateofbirth'];

所有人都一样。

【讨论】:

  • 您忘记在字段名称中省略“$”
  • 谢谢,尽管有错误,您还是很快回答了。现在我只剩下三个类似的错误。
【解决方案4】:

您没有名称为“homephone”和“mobphone”的输入,只有“homenumber”和“mobnumber”

$homephone=$_POST['homenumber'];
$mobphone=$_POST['mobnumber'];

【讨论】:

    猜你喜欢
    • 2015-09-29
    • 2014-02-15
    • 2015-01-20
    • 2015-11-12
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多