在我的注册表单上得到一个“未定义的变量”错误,我不知道如何修复它

问题描述:

因此,我创建了一个注册表单,并且出现“未定义的变量”错误,完整的错误如下所示:在我的注册表单上得到一个“未定义的变量”错误,我不知道如何修复它

说明:未定义变量:用户名在 C:\ XAMPP \ htdocs中\ phpacademy \ CMS \管理员\ signup.php第8行

说明:未定义变量:密码 C:\ XAMPP \ htdocs中\第9行的phpacademy \ cms \ admin \ signup.php

现在首先我的数据库的登记表格是这样的:

Schema Name:cms 

Tables:users,articles 

Users table:user_id,user_name,user_password 

现在对于我有index.phpconnection.phpsignup.php下面的代码是代码:

的index.php:

 <?php 

echo "<form action='signup.php' method='POST'> 
     <input type='text' name='username' placeholder='Username'><br> 
    <input type='password' name='password' placeholder='Password'><br> 
    <button type='submit'>SIGN UP</button> 
</form>"; 
?> 

signup.php:

<?php 
 

 
require 'connection.php'; 
 

 
$statement = $pdo->prepare("INSERT INTO users (username, password) 
 
    VALUES(:username, :password)"); 
 
$result = $statement->execute(array(
 
    "username" => $username, 
 
    "password" => $password 
 
)); 
 
$statement = null; 
 

 
?>

和connection.php:

<?php 
 

 
try{ 
 
$pdo = new PDO('mysql:host=localhost;dbname=cms', 'root', ''); 
 
} catch (PDOException $e) { 
 
\t exit('Database error.'); 
 
\t 
 
} 
 
if(empty($pdo)) die("pdo variable is empty!"); 
 
?>

现在只是让你们知道这是index.php是一个较大的代码的一部分,也因为这是的一部分当我把connection.php放在另一个文件夹中时,文件大得多,我找不到connection.php的错误,如果你们还有其他问题,我会回答他们,谢谢!

+4

可能的复制[PHP: “注意:未定义变量”, “注意:未定义指数” 和 “通知:未定义偏移”](HTTPS://计算器。com/questions/4261133/php-notice-undefined-variable-notice-undefined-index-and-notice-undef) – aynber

+0

你没有从signup.php显示正确的行,所以我们不能指出确切的问题,但检查dup链接。 – aynber

+0

对不起,我不知道我编辑帖子发生了什么,希望它有帮助! – Crepi

定义您的变量。

在signup.php

$username = $_POST['username']; 

$password = $_POST['password']; 

将这个修改略低于

require('connection.php'); 

也不要以纯文本形式存储密码。这是非常不安全的。 用途:

password_hash 

而且

password_verify 

编辑 你没有正确地绑定的占位符。你也在访问错误的列。修改后的版本是低于

$statement = $pdo->prepare("INSERT INTO users (user_name, user_password) 
VALUES(:username, :password)"); 
$result = $statement->execute(array(
":username" => $username, //bind placeholders properly 
":password" => $password // bind placeholders properly 
)); 

$statement = null; 
+0

我编辑的代码,现在我没有得到一个错误,但没有任何输入我的数据库里面: prepare(“INSERT INTO users(username,password) VALUES(:username,:password)”); $ result = $ statement-> execute(array( “username”=> $ username, “password”=> $ password )); $ statement = null; ?> – Crepi

+0

检查更新回答 – Akintunde007

+0

对不起,您在查询本身中实际上发生了什么变化?我似乎错过了它。编辑 - Nevermind,我现在看到冒号。请记住@Crepi你可以只执行'VALUES(?,?)',然后用'execute([$ username,$ password])'绑定''。对于PDO,我相信这是查询以任何方式发送到数据库的方式,并且对我来说更容易阅读。 – GrumpyCrouton

signup.php没有$ username或$ password的值。您需要添加$username = $_POST['username']和密码相同的东西

+0

它在编辑的问题 – CptMisery

+0

嗨编辑我的代码感谢您的帮助,但现在我没有得到一个错误,但没有被放入我的数据库: prepare(“INSERT INTO users(username,password) VALUES(:username,:password)”); $ result = $ statement-> execute(array( “username”=> $ username, “password”=> $ password )); $ statement = null; ?> – Crepi

+0

看起来您的表列名称不正确。该查询试图插入到'用户名',但你的问题说该表具有'user_name'。您还应该打开PDO错误报告:https://*.com/questions/8776344/how-to-view-query-error-in-pdo-php – CptMisery