mysqli_fetch_array和if-else条件进行验证

时间:2017-09-22 11:16:23

标签: php mysqli

我的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错误?

如果你们知道这个问题,请帮帮我吗?

3 个答案:

答案 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";
    }
}

祝你好运。

相关问题