未定义的变量多个错误


undefined variable multiple errors

我目前正在开发一个网站,但我的注册页面中不断收到 2 个错误。这些是错误:

Notice: Undefined variable: error in C:'xampp'htdocs'olympus'register.php on line 35
Notice: Undefined variable: message in C:'xampp'htdocs'olympus'register.php on line 36

这些是他们引用的代码行:

line 35 - $smarty->assign('error',$error);
line 36 - $smarty->assign('message',$message);

我已经仔细检查了所有内容,但找不到为什么会出现这些错误。有人可以帮我这些吗?

编辑:这是到目前为止的完整寄存器.php文件。

<?php
require_once 'smarty.php';
if($_POST) {
    $password = $_POST['password'];
    $confirm = $_POST['confirm'];
    if($password != $confirm) {
        $error = 'Passwords do not match!'; 
    } else {
        require_once 'config.php';      // our database settings
        $conn = mysql_connect($dbhost,$dbuser,$dbpass)
            or die('Error connecting to mysql');
        mysql_select_db($dbname);
        $query = sprintf("SELECT COUNT(id) FROM users WHERE UPPER(username) = UPPER('%s')",
            mysql_real_escape_string($_POST['username']));
        $result = mysql_query($query);
        list($count) = mysql_fetch_row($result);
        if($count >= 1) { 
            $error = 'that username is taken.';
        } else {
            $query = sprintf("INSERT INTO users(username,password) VALUES ('%s','%s')",
                mysql_real_escape_string($_POST['username']),
                mysql_real_escape_string(md5($password)));
            mysql_query($query);            
            $userID = mysql_insert_id($conn);
            require_once 'stats.php';
            setStat('atk',$userID,'5');
            setStat('def',$userID,'5');         
            setStat('mag',$userID,'5');
            $message = 'Congratulations, you registered successfully!';
        }
    }   
}
$smarty->assign('error',$error);
$smarty->assign('message',$message);
$smarty->display('register.tpl');
?>

你的错误清楚地描述了正在发生的事情:

未设置$error$message。仅此而已。

您至少应该在该行之前初始化它们:

$error = $message = '';

$error = $message = array();

而且,顺便说一句:它只是注意,而不是语法错误,所以可以避免该错误在开始时不显示此代码:

error_reporting(E_ALL & ~E_NOTICE);

编辑:

如果未设置$_POST(未发送表单(,则不会进入条件。因此,您的两个变量是未定义的。因此,只需在开始时预先定义它们即可。将您的代码更改为以下内容:

<?php
require_once 'smarty.php';
$error = $message = ''; // THIS IS ADDED HERE...
if($_POST) {
    $password = $_POST['password'];
    $confirm = $_POST['confirm'];
    if($password != $confirm) {
        $error = 'Passwords do not match!'; 
    } else {
        require_once 'config.php';      // our database settings
        $conn = mysql_connect($dbhost,$dbuser,$dbpass)
            or die('Error connecting to mysql');
        mysql_select_db($dbname);
        $query = sprintf("SELECT COUNT(id) FROM users WHERE UPPER(username) = UPPER('%s')",
            mysql_real_escape_string($_POST['username']));
        $result = mysql_query($query);
        list($count) = mysql_fetch_row($result);
        if($count >= 1) { 
            $error = 'that username is taken.';
        } else {
            $query = sprintf("INSERT INTO users(username,password) VALUES ('%s','%s')",
                mysql_real_escape_string($_POST['username']),
                mysql_real_escape_string(md5($password)));
            mysql_query($query);            
            $userID = mysql_insert_id($conn);
            require_once 'stats.php';
            setStat('atk',$userID,'5');
            setStat('def',$userID,'5');         
            setStat('mag',$userID,'5');
            $message = 'Congratulations, you registered successfully!';
        }
    }   
}
$smarty->assign('error',$error);
$smarty->assign('message',$message);
$smarty->display('register.tpl');
?>

或者只是移动这个:

$smarty->assign('error',$error);
$smarty->assign('message',$message);

在那个条件下,if($_POST) {在最后。