PHP和Oracle会话登录

时间:2012-07-30 10:48:33

标签: php oracle11g

这是我的PHP代码+ Oracle登录表单的问题 在这个PHP文件中,我创建了登录功能。但我有这样的错误:

    Warning: oci_num_rows() expects parameter 1 to be resource, string given in C:\xampp\htdocs\developers\it\session.php on line 12
Wrong

-

<?php
session_start();
include ("config.php");
$username = $_POST['username'];
$password = $_POST['password'];
$do = $_GET['do'];
if($do=="login")
{
    $cek = "SELECT PASSWORD, USER_LEVEL FROM T_USERS WHERE USERNAME='$username' AND PASSWORD='$password'";
    $result = oci_parse($conn, $cek);
    oci_execute($result);
    if(oci_num_rows($cek)==1)
    {
        $c = oci_fetch_array($result);
        $_SESSION['username'] = $c['username']; ociresult($c,"USERNAME");
        $_SESSION['USER_LEVEL'] = $c['USER_LEVEL']; ociresult($c,"USER_LEVEL");
        if($c['USER_LEVEL']=="ADMINISTRATOR")
        {
            header("location:supervisor.php");
        }
        else if($c['user_level']=="User")
        {
            header("location:user.php");
        }
        else if($c['user_level']=="Root")
        {
            header("location:administrator.php");
        }
        else if($c['user_level']=="Manager")
        {
            header("location:manager.php");
        }
        else if($c['user_level']=="Admin")
        {
            header("location:admin.php");
        }
        else if($c['user_level']=="Director")
        {
            header("location:director.php");
        }
    }
    else
    {
        echo "Wrong";
    }
}
?>

我试图在谷歌搜索,但仍然没有找到任何东西。 有人知道,问题是什么? 谢谢你的进步。

3 个答案:

答案 0 :(得分:2)

根据您的脚本而不是

if(oci_num_rows($cek)==1) 

你应该致电

if(oci_num_rows($result)==1)

答案 1 :(得分:1)

当您要求从$result返回的行数时,您可能希望使用$cek而不是oci_num_rows()。但是,确实希望避免直接在字符串中使用$username$password。它会让您对SQL注入攻击敞开大门,因此请考虑将oci_parseoci_bind_by_name一起使用。

之后,您还应该在重定向序列之后始终调用exit(),因为如果不这样做,脚本将继续运行(这可能是其他地方的安全问题)。

答案 2 :(得分:0)

我也遇到同样的情况,所以我用这样的脚本欺骗了它,但我不知道是否有影响。因为会话和验证进行得很顺利。

    $username =$_POST['username'];
    $password = $_POST['password'];

    $conn = oci_connect('xxx', 'xxx', 'localhost/MYDB');
    $pass_encription = md5($password);
    $query = "SELECT * from *table_name* WHERE *field1*='".$username."' and *field2*='".$password."'";
    $result = oci_parse($conn, $query);
    oci_execute($result);
    $exe = oci_fetch($result);
     if ($exe > 0)
     {
        oci_close($conn);
        oci_execute($result);
        $row        =oci_fetch_array($result);

        $sid        = $row['field_1_parameter'];
        $snama      = $row['field_2_parameter'];
        $sjab       = $row['field_3_parameter'];

        $session    = array     ( 
                                    'field_1_array'             =>$sid,
                                    'field_2_array'             =>$snama,
                                    'field_3_array'             =>$sjab 
                                );

        if($sjab == 'Administrator')
            {
                $this->session->set_userdata($session);
                redirect('redirecting_page');
            }

`