我目前正在构建一个连接到数据库以登录到Web应用程序的Web应用程序。webapp已经创建好了,我正在容器中构建这些东西。但现在我想在容器中添加一个数据库(网站也在容器中)以获得登录工作。什么是工作是,我可以注册一个帐户的电子邮件,名称和密码。它也存储在MySQL数据库中。但是当我尝试登录时,我得到了以下错误:
致命错误:未捕获的mysqli_sql_exception:用户“my_user”@“172.31.0.3”访问被拒绝(使用密码:是)在/var/www/html/login.php:22堆栈跟踪:Copyright © 2018 - 2019 www.jsjsj.com版权所有© 2019 www.sitemap.com版权所有并保留所有权利
用户my_user似乎没有获得正确的权限。我也给了这个账户所有的权限。
- Docker镜像 *:
FROM php:apache
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
- Docker编写 *:
version: '3.8'
services:
web:
image: web-db-0206
ports:
- 80:80
volumes:
- /home/user1/testwebdb:/var/www/html
depends_on:
- db
db:
image: mysql:5.7
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=my_password
- MYSQL_DATABASE=database
- MYSQL_USER=my_user
- MYSQL_PASSWORD=my_password
volumes:
- /home/user1/final_dockerfiles/website-database-test/db_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
environment:
- PMA_HOST=10.174.80.3
restart: always
volumes:
db_data:
- register.php*:
<?php
$servername = "db";
$username = "my_user";
$password = "my_password";
$database = "database";
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Check if the form is submitted
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// Get the form data
$email = $_POST["email"];
$name = $_POST["name"];
$password = $_POST["password"];
// Insert user data into the database
$sql = "INSERT INTO users (email, name, password) VALUES ('$email', '$name', '$password')";
if ($conn->query($sql) === true) {
echo "User registered successfully!";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
// Close the connection
$conn->close();
?>
<!DOCTYPE html>
<html>
<body>
<form action="register.php" method="POST">
<label>Email:</label>
<input type="email" name="email" required><br><br>
<label>Name:</label>
<input type="text" name="name" required><br><br>
<label>Password:</label>
<input type="password" name="password" required><br><br>
<input type="submit" value="Register">
</form>
</body>
</html>
***login.php***
<?php
session_start();
if (isset($_SESSION['user_id'])) {
// If the user is already logged in, redirect to the landing page
header("Location: landing.php");
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Database connection details
$servername = "db";
$username = "my_user";
$password = "my_password";
$database = "database";
// Get form data
$email = $_POST['email'];
$password = $_POST['password'];
// Create connection
$conn = new mysqli($servername, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Prepare and bind the SQL statement
$stmt = $conn->prepare("SELECT id FROM users WHERE email = ? AND password = ?");
$stmt->bind_param("ss", $email, $password);
// Execute the statement
$stmt->execute();
// Store the result
$stmt->store_result();
if ($stmt->num_rows === 1) {
// Login successful
$stmt->bind_result($user_id);
$stmt->fetch();
// Store user_id in session
$_SESSION['user_id'] = $user_id;
// Redirect to the landing page
header("Location: landing.php");
exit;
} else {
// Login failed
$login_error = "Invalid email or password";
}
// Close the statement and connection
$stmt->close();
$conn->close();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h1>Login</h1>
<?php if (isset($login_error)) { ?>
<p><?php echo $login_error; ?></p>
<?php } ?>
<form action="login.php" method="POST">
<label>Email:</label>
<input type="email" name="email" required><br><br>
<label>Password:</label>
<input type="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
1条答案
按热度按时间sg24os4d1#
在这段代码中,您使用
$password
作为用户密码来标记$password
配置参数。这就是为什么将数据库连接分离到一个单独的函数中,你可以
include
比这种方法要好得多。