首页 > 解决方案 > 跨多个页面使用用户提供的数据库凭据

问题描述

我正在学习将 MySQL 与 PHP 一起使用,并且在练习时,我尝试使用 Core PHP 和 MySQL 创建一个简单的 Web 应用程序。总结如下:

- 它有一个非常简单的 html 页面,其中 MySQL 的用户名(uname)和密码(pword)以表单形式输入,并通过 POST 方法发送到名为 PHP1.php 的 PHP 脚本

-PHP1 连接到 MySQL。代码是(跳过PHP标签):

//Get input username and password
$username = $_POST['uname'];
$password = $_POST['pword'];
//Server information
$server = "localhost";
//Connect
$conn = new mysqli($server, $username, $password);
//Check success/failure
if ($conn -> connect_error)
{
    die("Connection failed".$conn->connect_error);
}

连接后,PHP1 检索有关存储在各个帐户中的数据库的信息,并显示单选按钮以选择数据库,并通过 GET 方法将所选数据库的名称发送到另一个脚本 PHP2.php

-在 PHP2.php 中,我想在所选数据库中显示表格。但是,当控制权转移到 PHP2.php 时,与 MySQL 的连接将终止。我首先尝试在 PHP2.php 中包含我的 PHP1.php 文件并使用 $conn 变量,但是由于上述代码,它当然会尝试重新连接到 MySQL,同时,包含 uname 和 pword 的第一个请求是丢失导致身份验证错误。

我该如何克服这个问题?

编辑:我在这里看到了其他问题,但它们都有固定的用户名/密码,因此可以轻松地将连接脚本放在单独的文件中。我需要从用户那里获取用户名和密码。

标签: phphtmlmysqlmysqli

解决方案


使用Sessions将跨页面持久化会话变量:

PHP1

session_start();
$_SESSION['username'] = $username = $_POST['uname'];
$_SESSION['password'] = $password = $_POST['pword'];

$server = "localhost";
$conn = new mysqli($server, $username, $password);

PHP2

session_start();
$username = $_SESSION['username'];
$password = $_SESSION['password'];

$server = "localhost";
$conn = new mysqli($server, $username, $password);

在 PHP1 中,您将要检查$_POST值是否已设置,而在其他页面中,您将要检查$_SESSION变量是否已设置。见isset


推荐阅读