注意:未定义的索引/ isset使值返回错误

时间:2013-09-25 02:07:20

标签: php html if-statement isset

所以我环顾四周试图找到有类似问题的人但却找不到我想要的东西。我正在创建一个注册页面来学习一些基本的PHP,起初我得到错误“通知:未定义的索引”,但我通过使用“isset();”解决了这个问题。但这给了我另一个问题,

注意:不要让我发布图片抱歉。

http://img571.imageshack.us/img571/9176/h0nx.png

注意:我已经拥有它,以便在您单击“提交”并收到错误后,它将重新发布值,以便您不必重新键入所有内容。

isset使得提交后框的值等于1(真)。

问题更深入了:

if ($submit) {
if ($fullname && $username && $password && $repeatedpassword && $email) {
    //encrypt passwords
    $password = md5($password);
    $repeatedpassword = md5($repeatedpassword);

    if($password!=$repeatedpassword) {
        echo "Your passwords didn't match.";

        if(strlen($password)<6){
            echo "Your password must be atleast six characters long.";
        }else{
        //FINISH UP
        }
    }else{
        echo "Please fill in all fields.";
    }
}

}

如果你抬头看图片,你会看到它说“请填写所有字段”。即使所有内容都已填写,所以我的if语句出了问题。

由于isset(),我需要找到一种更好的方法来摆脱Undefined Index错误;在输入字段中返回值1,我需要你的帮助来弄清楚我的if语句失败的原因。

第一次在这里发帖很抱歉,如果我不够描述,谢谢。

编辑:

$submit = isset($_POST['submit']);
$fullname = strip_tags(isset($_POST['fullname']));
$username = strip_tags(isset($_POST['username']));
$password = strip_tags(isset($_POST['password']));
$repeatedpassword = strip_tags(isset($_POST['repeatedpassword']));
$email = strip_tags(isset($_POST['email']));
$date = date("Y-m-d");

            <table>
            <tr>
                <td>
                Your full name:
                </td>
                <td>
                <input maxlength='100' type='text' name='fullname' value='<?php echo $fullname?>'>
                </td>
            </tr>
            <tr>
                <td>
                Desired username:
                </td>
                <td>
                <input maxlength='100' type='text' name='username' value='<?php echo $username?>'>
                </td>
            </tr>
            <tr>
                <td>
                Desired password:
                </td>
                <td>
                <input maxlength='100' type='password' name='password' value='<?php echo $password?>'>
                </td>
            </tr>
            <tr>
                <td>
                Repeat password:
                </td>
                <td>
                <input maxlength='100' type='password' name='repeatedpassword' value='<?php echo $repeatedpassword?>'>
                </td>
            </tr>
            <tr>
                <td>
                Your email adress:
                </td>
                <td>
                <input maxlength='100' type='text' name='email' value='<?php echo $email?>'>
                </td>
            </tr>
        </table>

3 个答案:

答案 0 :(得分:2)

这是你的问题(以及使用isset作为值的其他类似行)

$fullname = strip_tags(isset($_POST['fullname']));

您需要将isset用作测试而不是值

if(isset($_POST['fullname'])) {
   $fullname = strip_tags($_POST['fullname']);
} else {
   //set some error notification for user
   $fullname = "";
}

你也必须改变这个

if ($fullname && $username && $password && $repeatedpassword && $email) {

类似

if ($fullname !="" && $username != "" && $password != "" && $repeatedpassword != "" && $email != "") {

答案 1 :(得分:0)

如果您执行md5()作为第一步,这将无效:尝试使用密码'a',您会看到......

if(strlen($password)<6){

这条线应该是最好的

if($password!==$repeatedpassword) {

这看起来也很糟糕

if ($fullname && $username && $password && $repeatedpassword && $email)

答案 2 :(得分:0)

我总是使用小函数,并调用它ifset ...

ifset(&$var){
   if(isset($var))
      return $var;
   else
      return NULL;
}