如何解决当用户从表1登录时,仅显示表2中的数据
我的数据库中有两个表。
userTable(user_id,companyName,pass)具有所有用户及其公司名称,并且登录数据来自此处。
productionTable(production_id,companyName,deliveryNotes)也有,带有发货单的公司名称。
在这里的主要思想是,每当用companyName登录的用户只能看到他的表。
我想做以下事情:
if (userInput === userInsideTable && companyInput === companyInsideTable) {show only his information}
这是我的登录信息 所以现在我应该在登录名或其他页面中应用这里的逻辑
<?php
session_start();
$conn = mysqli_connect('localhost','root','','test_db1');
if (!$conn) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit();
} else {
if (isset($_POST['myS'])) {
$myU = mysqli_real_escape_string($conn,$_POST['myU']);
$myP = mysqli_real_escape_string($conn,$_POST['myP']);
$myC = mysqli_real_escape_string($conn,$_POST['myC']);
$sql = "SELECT * FROM userTable WHERE myUsername = ? AND myPassword = ? AND myCompany = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("sss",$myU,$myP,$myC);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if ($result->num_rows === 1) {
session_regenerate_id();
$_SESSION['myU'] = $row['myUsername'];
$_SESSION['myC'] = $row['myCompany'];
session_write_close();
echo ("<script>window.location = 'test.php';</script>");
} else {
echo ("<script>alert('Username/Password is Incorrect!')</script>");
echo ("<script>window.location = 'index.php';</script>");
}
}
}
?>
<form action="index.php" method="post">
username<input type="text" name="myU" id="">
pass <input type="password" name="myP" id="">
company<input type="text" name="myC" id="">
<input type="submit" value="login" name="myS">
</form>
这是我的test.php
<?php
session_start();
$con = mysqli_connect('localhost','test_db1');
// Check connection
if (!$con) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
} else {
$result = mysqli_query($con,"SELECT * FROM productionTable WHERE company = " . $_SESSION['myC'] . " ");
while ($row = mysqli_fetch_assoc($result)) {
echo $row["production_id"];
echo $row["company"];
echo $row["notes"];
}
}
mysqli_close($con);
什么是仅登录用户信息的最佳方法?
如果用户1的公司x1的密码为123,并且他/她仅从另一张表中看到了相关信息
有人可以提出不同的逻辑吗
例如
登录页面和结果页面
登录页面是用户帐户管理和结果页面生成表,或者根本不显示
解决方法
该问题详细说明了两个表中的某些列,但是test.php
中的sql引用了迄今未声明的列-company
。假设列的初始声明正确,并且两个表都包含companyName
详细信息,则应该可以使用该公共列在表之间伪造join
。
以下任何一项均未经测试,因此避免了可能的错误。关于用户密码,您需要解决一些问题-根据所作的注释,该哈希值应为哈希值,这会影响index.php
中用于确定会话变量的逻辑。
test.php
中的sql试图在两个表之间创建联合,从而将用户与公司联系起来。使用适当的sql模式和数据会更容易!注意hte sql使用别名作为表名,以使sql易于阅读。
<?php
#index.php
session_start();
if( $_SERVER['REQUEST_METHOD']=='POST' && isset(
$_POST['myS'],$_POST['myU'],$_POST['myP'],$_POST['myC']
)) {
$conn = mysqli_connect('localhost','root','','test_db1');
$myU = $_POST['myU'];
$myP = $_POST['myP'];
$myC = $_POST['myC'];
/*
user password should be hashed!
*/
$sql = "SELECT count(*) as `count` FROM `userTable` WHERE `myUsername` = ? AND `myPassword`=? and `myCompany` = ?";
$stmt = $conn->prepare( $sql );
$stmt->bind_param( "sss",$myU,$myP,$myC );
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($count);
if( $count==1 && $stmt->num_rows==1 ){
session_regenerate_id();
$_SESSION['myU'] = $myU;
$_SESSION['myC'] = $myC;
session_write_close();
exit(header('Location: test.php'));
}
echo "
<script>
alert('Username/Password is Incorrect!');
location.search = 'error=true';
</script>";
}
?>
和test.php
文件可能是...
<?php
#test.php
session_start();
if( isset(
$_SESSION['myU'],$_SESSION['myC']
) ){
$con = mysqli_connect('localhost','test_db1');
$sql='select * from `userTable` u
inner join `productionTable` p on p.companyName=u.companyName
where p.companyName=? and u.myUsername=?';
$stmt=$con->prepare($sql);
$stmt->bind_param('ss',$_SESSION['myC'],$_SESSION['myU'] );
$stmt->execute();
$result=$stmt->get_result();
while( $rs = $result->fetch_array( MYSQLI_ASSOC ) ){
echo $rs[''];
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。