如何在 PHP 登录脚本中验证来自 SQL 的串联?
Posted
技术标签:
【中文标题】如何在 PHP 登录脚本中验证来自 SQL 的串联?【英文标题】:How do I validate a concatenation from SQL in a PHP login script? 【发布时间】:2018-07-06 14:39:06 【问题描述】:我正在编写一个包含 2 个字段(全名和密码)的登录脚本。我的 SQL 表有 ID、名字、姓氏、密码。用户将从一个选择中选择他们的名字,选择是从他们的名字和姓氏(全名)的串联中动态填充的,然后输入他们的密码。
//my SQL table
ID | firstname | lastname | password
-------------------------------------------
01 John Smith ezaccess
//my SQL query
$query2 = "SELECT CONCAT(firstname, ' ', lastname) AS fullname FROM tbl_users";
$result1 = mysqli_query($DBcon, $query2);
//my html select
<select class="form-control" name="fullname" required>
<option value="">Select name</option>
<?php while($row1 = mysqli_fetch_array($result1)):;?>
<option value="<?php echo $row1["fullname"];?>"><?php echo $row1["fullname"];?></option>
<?php endwhile;?>
</select>
所以这就是我迷路的地方,新创建的“全名”选择的验证。我只是更好地创建一个全名 SQL 列,然后验证它吗?我知道我刚刚从查询中创建了全名数组,但不知道如何继续使用它来验证我在上一个查询中的登录。
if (isset($_POST['btn-login']))
$fullname = strip_tags($_POST['fullname']);
$password = strip_tags($_POST['password']);
$fullname = $DBcon->real_escape_string($fullname);
$password = $DBcon->real_escape_string($password);
$query = $DBcon->query("SELECT * FROM tbl_users WHERE firstname AND lastname='$fullname'");
$row=$query->fetch_array();
$count = $query->num_rows;
if (password_verify($password, $row['password']) && $count==1)
$_SESSION['userSession'] = $row['user_id'];
header("Location: home.php");
else
$msg = "<div class='alert alert-danger'>
<span class='glyphicon glyphicon-info-sign'></span> Invalid name or Password !
</div>";
$DBcon->close();
【问题讨论】:
为什么要在顶部查询而不是底部查询中使用 concat?应该是同一个过程。$query = $DBcon->query("SELECT * FROM tbl_users WHERE firstname AND lastname='$fullname'");
改为$query = $DBcon->query("SELECT * FROM tbl_users WHERE CONCAT(firstname, ' ', lastname)='$fullname'");
你也应该停止使用转义字符串,转义密码在这里没有用处,你应该使用带有参数的准备好的语句作为全名。
给他们一半登录所需的数据似乎有点奇怪,大多数系统都希望你全部输入。
另外while($row1 = mysqli_fetch_array($result1)):;
应该删除尾随分号。
【参考方案1】:
虽然我玩过串联,但由于某种原因我没有让它工作,但这对最后一个查询起到了作用:
$query = $DBcon->query("SELECT * FROM tbl_users WHERE CONCAT(firstname, ' ', lastname)='$fullname'");
请注意,在这种情况下安全性不是优先事项,因此我的代码不是最安全的。
【讨论】:
以上是关于如何在 PHP 登录脚本中验证来自 SQL 的串联?的主要内容,如果未能解决你的问题,请参考以下文章
Facebook SDK:验证请求,以便 php 服务器知道它来自登录用户