好的,所以我修正了我的错误,但我仍然收到错误。我不习惯使用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我得到了错误。
答案 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"); }
?>