- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试创建一个注册 php 代码,这样当我不在计算机旁时我就可以注册人们,但由于某种原因,它不会创建表,也不会创建文件夹,即使不存在。
输出是:
( ! ) Notice: Undefined variable: db_add_user
added user
user folder already created
user image folder already created
user profile picture already there
didn't create user table
done
这是代码
连接.php
<?php
$servername = "localhost";
$username = "root";
$password = "";
// Create connections
$main_db = new mysqli($servername, $username, $password, "main_db");
$user_db = new mysqli($servername, $username, $password, "u");
$chat_db = new mysqli($servername, $username, $password, "chat");
$log_db = new mysqli($servername, $username, $password, "log");
?>
index.php
<?php
require('/website/live/includes/checkadmin.php')
?>
<html>
<head>
<title>register</title>
<link rel="stylesheet" type="text/css" href="/main.css">
</head>
<body class="disableNotifications">
<?php include("/website/live/includes/nav.php"); ?>
<form action="register.php" method="post" >
<input type="text" name="user" placeholder="user" required>
<input type="text" name="login" placeholder="login" required>
<input type="text" name="pass" placeholder="pass" required>
<input type="text" name="email" placeholder="" required>
<input type="text" name="year" placeholder="" required>
<button type="submit"><h2>register</h2></button>
<button type="reset"><h2>reset</h2></button>
</form>
</body>
</html>
注册.php
<?php
#makes sure user is admin
require("/website/live/includes/checkadmin.php");
#opens connection to database
require("/website/live/includes/connection.php");
$query = $main_db->query("SELECT user FROM main_table WHERE user = '$_POST[user]'", MYSQLI_USE_RESULT);
if ($query) {
while ($row = $query->fetch_array()) {
$db_add_user = $row['user'];
}
}
if ($db_add_user != $_POST['user']) {
#adds user to main database
$inserttable = "INSERT INTO `main_table` (`ID`, `user`, `email`, `year`, `login`, `pass`, `admin`, `master`, `banned`) VALUES (NULL, '$_POST[user]', '$_POST[email]','$_POST[year]' ,'$_POST[login]', '$_POST[pass]', 'False', 'False', 'False')";
if ($main_db->query($inserttable, MYSQLI_USE_RESULT) === TRUE) {
echo "added user <br>";
}
else {
echo "didn't add user <br>";
}
#makes folders
if (file_exists("'/website/live/u/' . $_POST[user]") === TRUE) {
mkdir('/website/live/u/' . $_POST['user']);
echo "created user folder <br>";
}
else {
echo "user folder already created <br>";
}
if (file_exists("'/website/live/u/' . $_POST[user] . '/images'") === TRUE) {
mkdir('/website/live/u/' . $_POST['user'] . '/images');
echo "created user image folder <br>";
}
else {
echo "user image folder already created <br>";
}
if (file_exists("'/website/live/images/logo.png','/website/live/u/'.$_POST[user].'/logo.png'") === TRUE) {
copy('/website/live/images/logo.png','/website/live/u/'.$_POST['user'].'/logo.png');
echo "copyed user logo across <br>";
}
else {
echo "user profile picture already there <br>";
}
#adds folders to user database
$makeimages = "CREATE TABLE `$_POST[user]` ('name' TEXT NOT NULL , `time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , `upvotes` INT NOT NULL DEFAULT '0' , `downvotes` INT NOT NULL DEFAULT '0' , UNIQUE `name` (`name`))";
if ($user_db->query($makeimages, MYSQLI_USE_RESULT) === TRUE) {
echo "created user table <br>";
}
else {
echo "didn't create user table <br>";
}
}
else {
echo "user already added <br>";
die;
}
#not going to redirect so erros can be displayed
echo "done <br>";
?>
顺便说一句,电子邮件输入只是一些原因。
最佳答案
我想由于 undefined variable ,您的查询失败了:
Notice: Undefined variable: db_add_user
$query = $main_db->query("SELECT user FROM main_table WHERE user = '$_POST[user]'", MYSQLI_USE_RESULT);
if ($query) {
while ($row = $query->fetch_array()) {
$db_add_user = $row['user'];
}
}
如果查询为 false(或不返回结果),则 while 永远不会运行,因此永远不会设置变量。至少“不好的形式”的一件事是这样的
'$_POST[user]'"
键没有引号,这应该发出类似未定义常量的警告,然后 PHP 将默认常量值 = 常量的名称,或 name
。
这就是它失败的原因值得怀疑,但人们永远不知道。无论如何,当期望得到单个结果时,这里的 while 循环本身是毫无意义的。特别是当使用 fetch_array
而不仅仅是 fetch
时。也就是说,我已经有大约 4 年没有使用 Mysqli 了,所以当我这些天使用 PDO 时,我对此有点生疏了。但除非我弄错了,否则 fetch_array
应该返回整个结果集,从而也使 while 循环变得毫无意义。
如果查询确实运行,您的用户可能不正确。
注意 - 这不一定是答案,但对于评论来说太多了。
接下来,忽略它完全对 SQL 注入(inject)开放的事实,当将 $_POST
值直接连接到 SQL 中时,您应该检查该帖子项的值是否确实是它应该是。如果不是,那么一切都会崩溃。即 $_POST['user']
就是您所想的。
此外,还有关于 while 循环的另一件事。
通过我的方式完成您的代码。 fetch_array
返回类似这样的内容
[
0 => ['item' => 'value' ]
]
换句话说,是一个多维数组。因此,您的 while 循环在编码时永远无法提取正确的 $row['user']
值,因为 row
是整个结果集,包装在容器数组中。因此,您将查看数组中您认为自己所在位置的上一级。 IE。行数组,而不是单行。
正如 @Javad 的评论中提到的,您在 if 语句中的 file_exists
检查也是不正确的。
file_exists("'/website/live/u/' . $_POST[user]");
包含单引号和双引号(键周围也缺少引号)。并且应该是这样的形式
file_exists('/website/live/u/' . $_POST['user']);
file_exists("/website/live/u/{$_POST['user']}"); //I prefer the {} for variable interpolation, yep that's a big word that means variable interpretation, or more simply PHP will just fill the variable value in.
等等
真的,想想第一个错误对您的代码意味着什么,在您的脑海中将这个 $db_add_user
替换为 ?
或 undefined
。当它运行时,它将进入循环,因为这肯定不等于发布的用户值。通过不正确的格式文件存在检查,该文件将永远不会存在,这会导致它创建正确的文件,因为这些文件的编码是正确的。因此,下次运行它时,它会执行相同的操作,创建正确的文件/文件夹,这些文件/文件夹与未编码的文件存在检查不匹配。
这一行非常令人不安(这就是为什么我花时间解释下面的内容):
$inserttable = "INSERT INTO `main_table` (`ID`, `user`, `email`, `year`, `login`, `pass`, `admin`, `master`, `banned`) VALUES (NULL, '$_POST[user]', '$_POST[email]','$_POST[year]' ,'$_POST[login]', '$_POST[pass]', 'False', 'False', 'False')";
想象一下我将其作为我的密码发布。
$_POST[pass] = "password', true, true, false )--";
--
注释掉了其余的 sql,所以我只是让自己成为您网站的管理员和主人。 (假设您的意思是 true
而不是 'true'
作为字符串)因为您的查询变成这样的
"INSERT INTO `main_table` (`ID`, `user`, `email`, `year`, `login`, `pass`, `admin`, `master`, `banned`) VALUES (NULL, 'god', 'gad@heaven.com','2017' ,'God', 'password', true, true, false) --', 'False', 'False', 'False')"
--
之后的任何内容都不算数,因为数据库认为它是注释。现在我并不是说这完全有效,因为我不习惯利用 SQL 注入(inject)漏洞,但它已经足够接近了,您应该认真考虑使用准备好的语句。
关于php mysql 注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126933/
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!