WAMP本地主机上可行的PHP代码在Web服务器上无法运行。

3

所以,我使用PHP从头构建了一个网站,并使用WAMP服务器进行测试。

在本地主机上一切正常,但是将代码上传到服务器后,所有涉及数据库连接的内容都无法正常工作。

我已经检查了php中的POST是否在服务器上工作,并且它正在工作。我通过谷歌搜索更改了一些php.ini配置,我已经完成了这些操作:

register_globals = off; (was default)

allow_url_fopen = on; (was default)

magic_quotes_gpc = off; (was default)

表单代码

http://i.imgur.com/k5kMx9N.png

类中的登录函数

function LoginUser($UserName, $Password)
{
    //Protect from SQL Injection
    $clientusername = stripslashes(mysql_real_escape_string($UserName));
    $clientpassword = stripslashes(mysql_real_escape_string($Password));

    $clientusername = trim($clientusername);
    $clientpassword = trim($clientpassword);

    if($clientusername != "" && $clientusername != "Username" && $clientpassword != "" && $clientpassword != "Password")
    {           
        $this->ConnectToMySQL();
        $sql = "SELECT * FROM Users WHERE UserName = '" . $clientusername . "' AND Password = '" . $clientpassword . "'";
        $result = mysqli_query($this->DBConnection, $sql);
        mysqli_close($this->DBConnection);      
        // Mysql_num_row is counting table row      
        $count = mysqli_num_rows($result);
        // If result matched $myusername and $mypassword, table row must be 1 row
        if($count == 1){
            if(!isset($_SESSION))
                session_start();
            $row = mysqli_fetch_array($result);
            $_SESSION['ID'] = session_id();
            $_SESSION['timeout'] = time();
            session_write_close();
            return("O seu login foi feito com sucesso.</br></br><a href='privatemenu.php'>Ir para o Menu</a>");
        }
        else return("Não foram encontrados utilizadores com os dados fornecidos.</br></br><a href='login.php'>Voltar á pagina de Login</a>");

    }
    else return("Ocorreu um erro com a entrada dos seus dados.</br></br><a href='login.php'>Voltar á pagina de Login</a>");
}

因此,问题在于该函数始终返回“Ocorreu um erro com a entrada dos seus dados”文本。我输入登录数据,点击登录按钮,发帖工作正常,我已经测试了相同的表单并在另一个页面上回显了表单中的帖子,但是该函数从未通过第一个if语句。如果有任何需要澄清的地方,请问我,以便我可以更好地解释。因为我不认为是来自函数,我还有另一个只会对数据库进行插入并完全相同的操作。而奇怪的是,数据正确地通过了页面。因此感谢Paddyd,这是完全正常工作的代码:
function LoginUser($UserName, $Password)
{
    //Protect from SQL Injection
            $this->ConnectToMySQL();
    $clientusername = stripslashes(mysqli_real_escape_string($this->DBConnection, $UserName));
    $clientpassword = stripslashes(mysqli_real_escape_string($this->DBConnection, $Password));

    $clientusername = trim($clientusername);
    $clientpassword = trim($clientpassword);

    if($clientusername != "" && $clientusername != "Username" && $clientpassword != "" && $clientpassword != "Password")
    {           
        $sql = "SELECT * FROM Users WHERE UserName = '" . $clientusername . "' AND Password = '" . $clientpassword . "'";
        $result = mysqli_query($this->DBConnection, $sql);
        mysqli_close($this->DBConnection);      
        // Mysql_num_row is counting table row      
        $count = mysqli_num_rows($result);
        // If result matched $myusername and $mypassword, table row must be 1 row
        if($count == 1){
            if(!isset($_SESSION))
                session_start();
            $row = mysqli_fetch_array($result);
            $_SESSION['ID'] = session_id();
            $_SESSION['timeout'] = time();
            session_write_close();
            return("O seu login foi feito com sucesso.</br></br><a href='privatemenu.php'>Ir para o Menu</a>");
        }
        else return("Não foram encontrados utilizadores com os dados fornecidos.</br></br><a href='login.php'>Voltar á pagina de Login</a>");

    }
    else return("Ocorreu um erro com a entrada dos seus dados.</br></br><a href='login.php'>Voltar á pagina de Login</a>");
}

你应该将相关的代码粘贴到你的问题中,而不是包含链接。 - Paddyd
完成了回声,它正常工作,数据传递正确。 - JaimeASV
因此,正确的数据已经通过,但是 if 语句仍然失败了? - Paddyd
是的,问题是所有类似于此的函数都失败了。 - JaimeASV
1
我刚注意到你在代码中间调用了 session_start();。通常这应该是代码的第一行之一,因为它可能会导致发送标头时出现问题。尝试删除此调用或更早地调用它。 - Paddyd
显示剩余10条评论
1个回答

1

警告:mysql_real_escape_string():在/home/httpd/vhosts/jaimevale.com/httpdocs/config/configurations.php的第461行,用户'apache'@'localhost'(使用密码:NO)被拒绝访问

这些是导致问题的行:

$clientusername = stripslashes(mysqli_real_escape_string($UserName));
$clientpassword = stripslashes(mysqli_real_escape_string($Password));

您正在尝试使用mysql_real_escape_string而没有建立SQL连接。 在进行这些调用之前,请先建立连接或使用mysql_real_escape_string的替代方法。

请尝试在函数开头调用$this->ConnectToMySQL();

编辑:mysql_real_escape_string更改为mysqli_real_escape_string


仅调用$this->ConnectToMySQL(); 或同时调用$this->ConnectToMySQL();并添加$this->DBConnection作为第二个参数是无效的。第一个调用会产生相同的错误,而第二个调用则会出现以下警告: Warning: mysql_real_escape_string() expects parameter 2 to be resource, object given in /home/httpd/vhosts/jaimevale.com/httpdocs/config/configurations.php on line 462Warning: mysql_real_escape_string() expects parameter 2 to be resource, object given in /home/httpd/vhosts/jaimevale.com/httpdocs/config/configurations.php on line 463 - JaimeASV
我能想到的唯一可能是你没有正确设置数据库连接的凭据。 - Paddyd
它已经正确连接,我在服务器上运行的第一件事是运行一个数据库脚本来创建表并插入数据,它成功了。 - JaimeASV
在你的 ConnectToMySQL(); 函数中,你是使用 mysqli_connect() 还是 mysql_connect() - Paddyd
是的,我正要说那个 ;) - Paddyd
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接