Php 在一个数据库中使用两个表的不同登录方式
嗨,我登录了一个网站 我使用数据库中的1个帐户表成功地创建了一个帐户 现在我为另一个帐户制作了另一张表。这两个表的属性不同,这就是我将它们分开的原因 通过使用此算法,我很难在第二个日志中记录时间 输入的登录名和密码来自另一个使用HTML表单的页面Php 在一个数据库中使用两个表的不同登录方式,php,mysql,Php,Mysql,嗨,我登录了一个网站 我使用数据库中的1个帐户表成功地创建了一个帐户 现在我为另一个帐户制作了另一张表。这两个表的属性不同,这就是我将它们分开的原因 通过使用此算法,我很难在第二个日志中记录时间 输入的登录名和密码来自另一个使用HTML表单的页面 <?php //Start session session_start(); //Include database connection details require_once("config.php");
<?php
//Start session
session_start();
//Include database connection details
require_once("config.php");
require("clean.php");
//Array to store validation errors
$errmsg_arr = array();
//Validation error flag
$errflag = false;
//Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);
//Input Validations
if($login == '') {
$errmsg_arr[] = 'Login ID missing';
$errflag = true;
}
if($password == '') {
$errmsg_arr[] = 'Password missing';
$errflag = true;
}
//If there are input validations, redirect back to the login form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: login-form.php");
exit();
}
//Create query for patient
$qry="SELECT * FROM user_info WHERE login='$login' AND password='".md5($password)."'";
$result=mysql_query($qry);
//Check whether the query was successful or not
if($result) {
if(mysql_num_rows($result) == 1) {
//Login Successful User
session_regenerate_id();
$user_info = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $user_info['ID_NO'];
$_SESSION['SESS_FIRST_NAME'] = $user_info['FNAME'];
$_SESSION['SESS_admin'] = $user_info['admin'];
$_SESSION['SESS_itResult'] = $user_info['itResult'];
//print "Login a success!";
session_write_close();
header("location: member-index.php");
exit();
}
else {
//Create query for
$qry="SELECT * FROM specialist_info WHERE spec_username='$login' AND spec_password='".md5($password)."'";
$result2=mysql_query($qry);
//Check whether the query was successful or not
if($result2) {
if(mysql_num_rows($result2) == 1) {
//Login Successful User
session_regenerate_id();
$specialist_info = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $specialist_info['spec_id'];
$_SESSION['SESS_FIRST_NAME'] = $specialist_info['name'];
$_SESSION['SESS_admin'] = 1;
//print "Login a success!";
session_write_close();
header("location: member-index.php");
exit();
}
else {
//Login failed
header("location: login-failed.php");
exit();
}
}
}
}
else {
die("Query failed");
}
}
?>
我能够登录第一个(意味着PHP和MySQL之间有连接)帐户,但是第二个我不能
从我所了解的情况来看,我无法进入这一关。“如果(mysql_num_行($result2)==1)”
我知道数据库的第二个表中有数据,因为我检查了它(有MD5 yes)
也许我的逻辑是错的。建议?:D谢谢 我不确定代码是否正确(稍后将进行审查),但您可以尝试重构您的表,这样您就有了一个包含用户属性的单独表,这样您就可以动态地处理属性,而不必每次有不同类型的用户时都创建不同的表 编辑: 尝试:
var\u dump(mysql\u num\u rows($result2))
如果显示返回值为false,则查询有问题,否则它与任何行都不匹配
现在我为另一个帐户制作了另一张表。这两个表的属性不同,这就是我将它们分开的原因
没有
它们都是为了相同的目的-您应该使用一个表,如果您不能有效地适应单个表中两种类型的实体之间的差异,请添加1或2个具有1:1非义务关系的表
但现在,即使有这种混乱且潜在危险的结构,您也不需要2个查询和所有代码:
SELECT 'std' AS src, id_no, fname, admin, itResult
FROM user_info
WHERE login='$login'
AND password='".md5($password)."'
UNION
SELECT 'ext' AS src, spec_id AS id_no, name AS fname, 1 AS admin, NULL AS iResult
FROM specialist_info
WHERE spec_username='$login'
AND spec_password='".md5($password)
很明显,如果你的用户名/密码都是相同的,这会中断,但实际上是一样的
if(mysql_num_rows($result) == 1) {
无论如何都是多余的-您只需检查
if ($row=mysql_fetch_assoc($result)) {
您发布的许多代码都与您描述的问题无关,但是完全没有注释/日志记录/调试为我们提供了一点解决问题的方法。这两个组合强烈表明,在这里偷猎之前,你没有费心清理不相关的部分。如果你可能包括一些调试/记录功能,你可能已经自己解决了。如果答案是有帮助的,或者更好的,解决你的问题,请考虑接受或投票。var_dump显示了什么?不,结果显示函数返回一个值为0的整数。这意味着表中没有匹配的行。如果var_dump的结果是bool(false),则表示查询有问题。现在,您应该尝试找出语法正确的查询与任何行都不匹配的原因。尝试打印查询并将其与数据库匹配。