数组 returns 空
Array returns null
我目前正在尝试使用 PHP 和 MySQL 创建登录名,但我被卡住了。应该只从数据库中给我数据的数组 returns "Null" 我使用了 var_dumb().
这是 index.php 文件:
<?php
include_once './Includes/functions.php';
?>
<!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<form method="POST">
<label>User ID :</label>
<input id="login_username" name="login_username" type="login"><br>
<label>Password :</label>
<input id="login_password" name="login_password" type="password" ><br>
<input id="login_submit" name="login_submit" type="submit">
</form>
</div>
</body>
</html>
这是 function.php 文件:
<?php
require_once 'dbconnect.php';
function SignIn() {
$lUser = $_POST['login_username'];
$lPassword = md5($_POST['login_password']);
$querySQL = "SELECT * FROM tblUser WHERE dtUser='$lUser' AND dtPassword='$lPassword'";
$queryResult = mysqli_query($dbc, $querySQL);
while ($row = mysqli_fetch_assoc($queryResult)) {
$dataArrayLogin[] = $row;
}
if ($lUser == $dataArrayLogin['dtUser'] && $lPassword == $dataArrayLogin['dtPassword']) {
echo $dataArrayLogin;
$popup = "Login Succeed";
echo "<script type='text/javascript'>alert('$popup');</script>";
$_SESSION['user'] = $lUser;
header("Location: ./british.php");
} else {
echo $dataArrayLogin;
$popup = "Login Failed";
echo "<script type='text/javascript'>alert('$popup');</script>";
}
}
if (isset($_POST['login_submit'])) {
SignIn();
}
?>
你能帮帮我吗?
在您的 html 表格中,您没有 <form method="POST" action="SignIn">
。所以当你提交表格时,它不会去任何地方。
这可能是因为您没有结果?
无论如何,我已经检查了你的代码,它不是很好,因为你正在尝试使用这个:
$dataArrayLogin['dtUser']
您的 $dataArrayLogin
中没有 'dtUser' 密钥。
当您获取行时,您将其放入一个 while
循环中,并将数据收集到一个数组中:
while ($row = mysqli_fetch_assoc($queryResult)) {
$dataArrayLogin[] = $row;
}
删除 while 循环。简单使用:
$dataArrayLogin = mysqli_fetch_assoc($queryResult);
如果你 echo
一个 array
,结果将是 Array
。请改用 var_dump
。
您需要开始调试脚本。以下是我将采取的步骤:
- 对 $_POST 执行 var_dump() 以查看它是否包含您想要的所有值
- 回显 $querySQL 以查看是否所有值都正确输入
- 检查您的数据库是否确实包含您尝试登录的记录
- 使用 mysqli_error();
获取 mysql 错误
这应该会揭露您的错误。
编辑:
- 我经常发现在我的脚本中放置一些回声以找出正在访问代码的哪些部分以及正在跳过哪些部分是很有用的。
- 我会在您的查询中添加 LIMIT 1,因为应该只有一个用户具有输入的凭据。这样你也可以跳过 while 循环。
像这样更改查询
$querySQL = "SELECT * FROM tblUser WHERE dtUser=' ".$User." ' AND Password=' ".$Password." ' ";
我目前正在尝试使用 PHP 和 MySQL 创建登录名,但我被卡住了。应该只从数据库中给我数据的数组 returns "Null" 我使用了 var_dumb().
这是 index.php 文件:
<?php
include_once './Includes/functions.php';
?>
<!DOCTYPE html
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<form method="POST">
<label>User ID :</label>
<input id="login_username" name="login_username" type="login"><br>
<label>Password :</label>
<input id="login_password" name="login_password" type="password" ><br>
<input id="login_submit" name="login_submit" type="submit">
</form>
</div>
</body>
</html>
这是 function.php 文件:
<?php
require_once 'dbconnect.php';
function SignIn() {
$lUser = $_POST['login_username'];
$lPassword = md5($_POST['login_password']);
$querySQL = "SELECT * FROM tblUser WHERE dtUser='$lUser' AND dtPassword='$lPassword'";
$queryResult = mysqli_query($dbc, $querySQL);
while ($row = mysqli_fetch_assoc($queryResult)) {
$dataArrayLogin[] = $row;
}
if ($lUser == $dataArrayLogin['dtUser'] && $lPassword == $dataArrayLogin['dtPassword']) {
echo $dataArrayLogin;
$popup = "Login Succeed";
echo "<script type='text/javascript'>alert('$popup');</script>";
$_SESSION['user'] = $lUser;
header("Location: ./british.php");
} else {
echo $dataArrayLogin;
$popup = "Login Failed";
echo "<script type='text/javascript'>alert('$popup');</script>";
}
}
if (isset($_POST['login_submit'])) {
SignIn();
}
?>
你能帮帮我吗?
在您的 html 表格中,您没有 <form method="POST" action="SignIn">
。所以当你提交表格时,它不会去任何地方。
这可能是因为您没有结果?
无论如何,我已经检查了你的代码,它不是很好,因为你正在尝试使用这个:
$dataArrayLogin['dtUser']
您的 $dataArrayLogin
中没有 'dtUser' 密钥。
当您获取行时,您将其放入一个 while
循环中,并将数据收集到一个数组中:
while ($row = mysqli_fetch_assoc($queryResult)) {
$dataArrayLogin[] = $row;
}
删除 while 循环。简单使用:
$dataArrayLogin = mysqli_fetch_assoc($queryResult);
如果你 echo
一个 array
,结果将是 Array
。请改用 var_dump
。
您需要开始调试脚本。以下是我将采取的步骤:
- 对 $_POST 执行 var_dump() 以查看它是否包含您想要的所有值
- 回显 $querySQL 以查看是否所有值都正确输入
- 检查您的数据库是否确实包含您尝试登录的记录
- 使用 mysqli_error(); 获取 mysql 错误
这应该会揭露您的错误。
编辑:
- 我经常发现在我的脚本中放置一些回声以找出正在访问代码的哪些部分以及正在跳过哪些部分是很有用的。
- 我会在您的查询中添加 LIMIT 1,因为应该只有一个用户具有输入的凭据。这样你也可以跳过 while 循环。
像这样更改查询
$querySQL = "SELECT * FROM tblUser WHERE dtUser=' ".$User." ' AND Password=' ".$Password." ' ";