Php MySQLi未定义的值(变量)

时间:2015-02-04 01:01:36

标签: php

好的,所以我修正了我的错误,但我仍然收到错误。我不习惯使用MySQLi,但我想帮助我的朋友为他正在制作的网站工作。

    <?php

if(isset($_POST['submit']))
{
$firstname = filter($_POST['firstname']);
$lastname = filter($_POST['lastname']);
$age = filter($_POST['age']);
}

$db = new MySQLi('localhost', 'root', '', 'register');
    if ($db->connect_error) {
            $message = $db->connect_error;
            die($message);
    }


    $sql = 'SELECT * FROM users';
    $result = $db->query($sql);
    if ($db->error) {
            $message = $db->error;
            die($message);
    }

    $db->query("INSERT INTO users (firstname,lastname,age)
    VALUES ('".$firstname."', '".$lastname."', '".$age."')");

    mysqli_close($db);

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form action="confirmation.php" method="POST">
First Name:<br />
<input type="text" name="firstname" placeholder="First name" />
Last Name:<br />
<input type="text" name="lastname" />
Age:<br />
<input type="text" name="age"  />
Submit:<br />
<input type="submit" name="submit" />
</form>
</body>
</html>

这是我们得到的错误 - &gt;

( ! ) Notice: Undefined variable: firstname in C:\wamp\www\website\register.php on line 25
Call Stack
# Time Memory Function Location
1 0.0008 244952 {main}( ) ..\register.php:0

( ! ) Notice: Undefined variable: lastname in C:\wamp\www\website\register.php on line 25
Call Stack
# Time Memory Function Location
1 0.0008 244952 {main}( ) ..\register.php:0

( ! ) Notice: Undefined variable: age in C:\wamp\www\website\register.php on line 25
Call Stack
# Time Memory Function Location
1 0.0008 244952 {main}( ) ..\register.php:0

当我在旧的MySQL中执行此操作时,我不会得到这样的错误,所以我很困惑,因为当我这样做时,它对我有效,但是使用SQLi我得到了错误。

3 个答案:

答案 0 :(得分:1)

在任何MySQL查询尝试之前,此代码块必须是第一个。

if(isset($_POST['submit']))
{
    $firstname = filter($_POST['firstname']);
    $lastname = filter($_POST['lastname']);
    $age = filter($_POST['age']);
}

此代码块定义使用的变量。在您当前的示例中,直到查询尝试之后才会设置变量 - 这就是您收到错误的原因。

因此:

<?php

if(isset($_POST['submit']))
{
    $firstname = filter($_POST['firstname']);
    $lastname = filter($_POST['lastname']);
    $age = filter($_POST['age']);
    $db = new MySQLi('localhost', 'root', '', 'register');
    if ($db->connect_error) {
            $message = $db->connect_error;
            die($message);
    }


    $sql = 'SELECT * FROM users';
    $result = $db->query($sql);
    if ($db->error) {
            $message = $db->error;
            die($message);
    }

    $db->query("INSERT INTO users (firstname,lastname,age)
     VALUES ('".$firstname."', '".$lastname."', '".$age."')");

    mysqli_close($db);
}

?>

答案 1 :(得分:1)

您应该确保字段中实际包含数据。

$required = array(
    'firstname',
    'lastname',
    'age'
);

$missing = array();
foreach($required as $item) {
    if(!isset($_POST[$item}) || empty($_POST[$item])) {
        $missing[] = $item;
    }
}

if(!empty($missing)) {
    die("You need to supply the required fields. (" .implode(", ", $missing). ")");
} else {
    // run the query here.
}

如您所见,我们运行$required数组以确保在$_POST超全局中设置值并且为空。因为我们要求他们运行它。

但我仍然认为你的filter()函数有事可做。你能提供吗?

答案 2 :(得分:0)

试一试:

<?php

if(isset($_POST['submit']))
{
$firstname = filter($_POST['firstname']);
$lastname = filter($_POST['lastname']);
$age = filter($_POST['age']);


$db = new MySQLi('localhost', 'root', '', 'register');
    if ($db->connect_error) {
            $message = $db->connect_error;
            die($message);
    }


    $sql = 'SELECT * FROM users';
    $result = $db->query($sql);
    if ($db->error) {
            $message = $db->error;
            die($message);
    }

    $db->query("INSERT INTO users (firstname,lastname,age)
     VALUES ('".$firstname."', '".$lastname."', '".$age."')");

    mysqli_close($db);
}
else { die("No post data was submitted");  }
?>