2013-09-16 50 views
2

当我在我的本地主机SQL,它的工作原理。但是现在,当我将它上传到我的客户端SQL时,它确实没有。当我登录时,它应该重定向到edit.php,它已经从数据库检查名称和密码是否正确,但它保持空白。我不知道该怎么做,因为它在我的本地主机sql上工作。PHP错误重定向

我在哪里登录,登录表单,(login.php中)

<?php 

include_once("logikinnitus.php"); 

session_start(); 
if(isset($_SESSION['logged'])) 
{ 

    header('Refresh: 2; URL=http://www.heakohv.ee/fava/admin/edit.php'); 
    echo "olete juba sisse logitud!"; 

    }else { 

    if (isset($_POST["submit"])){ 

    $name = $_POST["user"]; 
    $pass = $_POST["pass"]; 

    $object = new User(); 
    $object -> login($name, $pass); 
} 

?> 

<html> 
<head></head> 
<body> 

<form method="post" action="login.php"> 
    Username: <input type="text" name="user"/> 
    Password: <input type="password" name="pass"/> 
    <input type="submit" name="submit" value="login"> 
</form> 

<?php 

} 

    ?> 

</body> 
</html> 

我在哪里检查密码和用户是正确的(logikinnitus.php)

<?php 

include_once("connection.php"); 


Class User { 

    private $db; 

    public function __construct(){ 

     $this->db = new Connection(); 
     $this->db = $this->db->dbConnect(); 
    } 

    public function login($name, $pass){ 

     if(!empty($name) && !empty($pass)){ 

      $st = $this -> db -> prepare("select * from users where name=? and pass=?"); 
      $st -> bindParam(1, $name); 
      $st -> bindParam(2, $pass); 
      $st -> execute(); 

      if($st -> rowCount() == 1){ 

       session_start(); 
       $_SESSION['logged'] = true; 
       echo "Olete edukalt sisse logitud"; 
       header('URL=http://www.heakohv.ee/fava/admin/edit.php'); 
       exit(); 

      } 
      else{ 

       echo "Parool või kasutajanimi on vale"; 

      } 

     } 
     else{ 

      echo "Palun täida kõik väljad!"; 

     } 

    } 

} 

?> 

PHP连接(连接.php)

<?php 

class Connection{ 

    public function dbConnect(){ 
     return new PDO("mysql:host=host; dbname=name", "pass", ""); 
    } 
} 

?> 

警告我在打开错误报告时得到。

警告:在session_start()[function.session启动]:打开(/家/ LA02/16840949/tmp目录/ sess_46e83b3c6e65b60a68dd14f525bd92a5,O_RDWR)失败:没有这样的文件或目录(2)在/ home/LA02/16840949 /在线管理/ login.php中6

警告:在session_start()[function.session启动]:不能发送会话cookie - 头已经发出(输出开始/home/la02/16840949/admin/connection.php 3)在上线/home/la02/16840949/admin/login.php 6

警告:在session_start()[function.session启动]:无法发送会话缓存限制器 - 已经发送了头(输出开始/ home/la02/16840949/admin/connection.php:3)在/ home/la02/16840949/admin/logi n.php第6行

警告:未知:开(/家/ LA02/16840949/tmp目录/ sess_46e83b3c6e65b60a68dd14f525bd92a5,O_RDWR)失败:没有这样的文件或目录(2)在未知在线0

警告:未知:无法写入会话数据(文件)。请确认session.save_path的当前设置在第0行的Unknown中是正确的(/ home/la02/16840949/tmp)。

如果我添加session.save_path“文件夹”,它不会使我的登录表单再次出现。 ..我从头看只有空白页,即使没有错误 -

有任何问题,随时问。

+0

难道是因为你在重定向到edit.php之前'回声'? – jonhopkins

+0

你可以打开php错误报告来帮助调试 - '<?php error_reporting(E_ALL);函数ini_set( '的display_errors',1); ...' – Sean

+0

第一和最后2警告是要看的。检查以确保您的tmp文件夹“/ home/la02/16840949/tmp”存在并且具有写入权限。如果这不是正确的位置,你应该更新你的php.ini文件中的tmp文件夹位置'session.save_path' – Sean

回答

3

没有标题URL。使用Location: http://domain.com进行重定向。

此外,在发送标题之前,您不能输出任何内容,因此请先删除所有echo

在您的第一个代码中,您必须在发送标题后添加die。没有它,脚本将被执行到最后(这里可能不是问题,但是您应该在重定向时始终停止脚本)。

+0

他没有使用'URL'标题,他正在使用'Refresh'标题,该标题使用了'URL'选项,虽然技术上贬值,但它是有效的 –

+1

@PatrickEvans看看第二块代码在'login()'函数中 - 'header('URL = http:// www ...)' – Sean

+0

@Elon这当然是代码的另一个问题,但不是所有初始警告。但是,一旦他处理了警告,他也必须处理这个问题。 – gview

0

警告告诉你什么是问题---会话文件无法读取或写入,因为它们似乎是将它们写入* nix用户主目录。

警告:在session_start()[function.session启动]:打开(/家/ LA02/16840949/tmp目录/ sess_46e83b3c6e65b60a68dd14f525bd92a5, O_RDWR)失败:(2)在 /家庭没有这样的文件或目录/ LA02/16840949 /管理/登录。php on line 6

你的代码是否在调用session_save_path?如果不是,则需要检查适用的php.ini文件中的session.save_path变量的值。你可以在你的文档根目录创建一个简单的脚本:

<?php phpinfo(); 

如果您对这些设置的运行值的任何问题。

这也可能是一个权限问题,这取决于您的php/web服务器的配置方式。通常会话文件将写入/ tmp目录,但在你的情况下它们不是。如果你实际上打算把会话文件写到它正在写的地方,如果该目录不存在,并且/或者运行php进程的用户没有读/写这些文件的权限,重新得到你得到的错误。

+0

另外,请参阅Elon指出的问题......您的标题有错,正如他所示。你想使它保持一致 - 在两个地方都使用位置标题,或者更好的方法是将它移到一个方法来使代码变干。 – gview

+0

如果我添加session.save_path“文件夹”它甚至不会使我的登录表单再次出现......我从头看到只有空白页,即使没有错误 –