我的php出了点问题,
我正在进行帐户验证,如果数据存在,它将显示“有数据”,否则“无数据”...
当我输入第一个“行”reference_id并提交时,它会显示“有数据”这是正确的,但是当我输入第二个到最后一个'行'时,它显示“无数据”,即使它存在于我的数据库!
数据库:
reference_id (varchar 250)
status (varchar250)
PHP
if (isset($_POST['submit_valid'])) {
if (!empty($_POST['reference_id']))
{
$query = mysqli_query($con, "SELECT * FROM client_record");
$result = mysqli_fetch_array($query);
if ($result['reference_id'] == $_POST['reference_id'])
{
echo"<script type='text/javascript'> alert('There is data'); window.location.href='next_page.php'; </script>";
}
if ($result['reference_id'] !== $_POST['reference_id']) {
echo"<script type='text/javascript'> alert('No data.'); window.location.href='this_page.php'; </script>";
}
}
}
我不确定是mysqli_fetch_array
错误还是if-else错误?
如果你们知道这个问题,请帮帮我吗?
答案 0 :(得分:1)
$query = mysqli_query($con, "SELECT * FROM client_record");
$result = mysqli_fetch_array($query);
这将为您提供表格中的第一行。
添加WHERE reference_id = :refid
条款?!
然后绑定refid参数,以避免SQL注入。
答案 1 :(得分:1)
您的查询执行目前仅查看第一行。需要循环fetch
以遍历所有行。 e.g。
$query = mysqli_query($con, "SELECT * FROM client_record");
$result = mysqli_fetch_array($query);
应该是
$query = mysqli_query($con, "SELECT * FROM client_record");
while($result = mysqli_fetch_array($query)) {
但效率低下。查找特定记录时,请使用where
子句。参数化查询还将阻止SQL注入和引用问题。 i
中的bind_param
是一个整数,如果您的ID是字符串,请使用s
。
$prepared = mysqli_prepare($con, "SELECT * FROM client_record where reference_id = ?");
mysqli_stmt_bind_param($prepared, 'i', $_POST['reference_id']);
mysqli_stmt_execute($prepared);
mysqli_stmt_store_result($prepared);
while (mysqli_stmt_fetch($prepared)) {
答案 2 :(得分:1)
Lapiz,问题实际上是比较运算符:
($result['reference_id'] == $_POST['reference_id'])
这将检查数组中返回的集合中的第一个reference_id。
解决这个问题的最好方法是使用if (in_array(5, $result))
,其中5是针,$ result是数组haystack。
因为你要做的就是检查返回的数据集中是否存在引用。
这也是很好的设计实践,每次都要收集结果并避免多次引用查询,一次点击数据库并查询结果集。
如果它是一个多维数组循环遍历集合:
foreach($result as $resultItem)
{
if(in_array("reference_id", $resultItem, true))
{
echo "There is Data";
}
}
祝你好运。