PHP用户定义的函数没有被调用?

Posted

技术标签:

【中文标题】PHP用户定义的函数没有被调用?【英文标题】:PHP user defined function not being called? 【发布时间】:2013-02-03 14:26:46 【问题描述】:

我有一个网页和一个用于检查会话变量的 session_check 文件。我在需要的网页顶部添加了require 'session_check.php'。我还使用echo 来检查session_check.php 文件是否被调用。

我在 session_check.php 中有一个函数,它会在注销时被调用,但它永远不会被调用。你能帮帮我吗?谢谢:)

session_check.php的代码

<?php
    //Database Connection 
    $db_host = $_SERVER['DB_HOST'];
    $db_uname = $_SERVER['DB_UNAME'];
    $db_pwd = $_SERVER['DB_PWD'];
    $db_name = $_SERVER['DB_DB'];

    $db_link = mysql_connect($db_host,$db_uname,$db_pwd);
    if(!$db_link)
        die("Could Not Connect:".mysql_error($db_link));
    
    mysql_select_db($db_name, $db_link) or die('Can\'t use db:'. mysql_error($db_link));

    //Logout function
    function user_logout($uname)
        $query = "UPDATE user SET last_used_token='' WHERE username='$uname'";
        mysql_close($db_link);
        session_destroy();
        header('Location:index.php');
        exit(); 
    

    //Getting session variables
    session_start();
    session_regenerate_id();
    $cur_authkey = $_SESSION['authkey'];
    $uname = $_SESSION['username'];

    //Session data checking 

    $query = "SELECT last_used_token FROM user WHERE username='$uname'";
    $result = mysql_query($query, $db_link) or die('Error while updating auth key <br /> Query:'.$query.'MySQL error no:'.mysql_errno().'<br /> MySQL error:'.mysql_error($db_link));
    $row = mysql_fetch_assoc($result);

    if($cur_authkey != $row['last_used_token'])
        user_logout($uname);
       

?>

调用网页的部分代码

<?php
    require 'session_check.php';
    mysql_close($db_link);
?>
<!DOCTYPE html>
<html>.....</html>

【问题讨论】:

将session_start()设置为php代码的第一行 不相关,但您会受到 SQL 注入攻击,除非您对输入进行清理或参数化 @OneManCrew 那没用.. @Ozzy 你的意思是使用mysql_escape_string($_SESSION['authkey']); 我的意思是您没有显示用于从用户那里获取 $uname 的代码,但是从您的代码中可以明显看出您没有使用准备好的语句。 net.tutsplus.com/tutorials/php/… 【参考方案1】:

我写的下面的代码是有效的。参考这些代码,你会得到解决方案。如果你想使用 require() 方法从第一页调用第二页,只需在第一页调用 require(secondpage url) 并删除第二页中的 session_start() 行。

首页(samplephp.php)

<?php
session_start(); 
$_SESSION['host']="localhost";
$_SESSION['dbusername']="root";
$_SESSION['dbname']="userinfo";
$_SESSION['username']="testuser";
$_SESSION['authkey']="1";
?>

<!DOCTYPE html>
<html><head></head><body>test<form action="session_check.php"><input type="submit" value="click here"></form></body></html>

第二页(session_check.php)

 <?php
    session_start(); 
        //Database Connection 
        $db_host = $_SESSION['host'];
        $db_uname =$_SESSION['dbusername'];
        $db_pwd = "";
        $db_name = $_SESSION['dbname'];

        $db_link = mysql_connect($db_host,$db_uname,$db_pwd);
        if(!$db_link)
            die("Could Not Connect:".mysql_error($db_link));
        
        mysql_select_db($db_name, $db_link) or die('Can\'t use db:'. mysql_error($db_link));

        //Logout function
        function user_logout($uname,$db_link)
            $query = "UPDATE usertable SET flag=1 WHERE username='$uname'";
            mysql_query($query, $db_link);
            mysql_close($db_link);
           session_destroy();
           echo "success";
            //header('Location:index.php');
            exit(); 
        

        //Getting session variables
        session_regenerate_id();
        $cur_authkey = $_SESSION['authkey'];
        $uname =$_SESSION['username'];
        //Session data checking 

        $query = "SELECT flag FROM usertable WHERE username='$uname'";
        $result = mysql_query($query, $db_link) or die('Error while updating auth key <br /> Query:'.$query.'MySQL error no:'.mysql_errno().'<br /> MySQL error:'.mysql_error($db_link));
        $row = mysql_fetch_assoc($result);
        if($cur_authkey != $row['flag'])
           user_logout($uname,$db_link);
            
    ?>

【讨论】:

【参考方案2】:

在第一个&lt;?php标签之后的代码开头使用session_start()

【讨论】:

你在哪里使用它。在 session_check.php 文件的顶部使用这个函数 是的,我把它放在&lt;?php之后就行了,但它仍然不起作用

以上是关于PHP用户定义的函数没有被调用?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 函数

用户在 set_time_limit PHP 时定义函数调用

为啥调用未定义函数时没有 PHP 错误?

php如何调用函数

ThinkPHP3.2.3自定义函数模版中无法调用

如何使用 jquery 调用 PHP 函数? [复制]