2013-04-24 122 views
0

我很难过。我有一个login.php页面,其中包含我的index.php页面顶部包含的SQL登录信息(主机名,数据库,用户名,密码)(使用require_once)。登录信息位于条件语句中,用于确定我是在远程服务器还是在本地测试服务器上,并提供正确的登录信息。现在,当它直接进入远程服务器的index.php页面时,它变得很奇怪,不起作用(因为它不会与数据库建立连接),但它在测试服务器上工作,如果我首先访问远程服务器上的login.php站点(它不回应任何内容),然后访问远程服务器上的index.php页面,则会起作用。我禁用了缓存。为什么会发生这种情况,我该如何解决?首先访问http://distantfuturejosh.com/playground/pendingaxioms(它不会工作),然后访问http://distantfuturejosh.com/playground/pendingaxioms/login.php(提供一个空白页),然后返回http://distantfuturejosh.com/playground/pendingaxioms(它会工作,你会看到图像出现)。SQL登录仅在访问登录页面后才有效

这里是的login.php页面:

<?php 

    $requesturi = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    $pos = strpos($requesturi, "www.distantfuturejosh.com"); 

    if ($pos === 0) 
    { 
     $db_hostname = "xxxxxxxx"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "xxxxxxxx"; 
     $db_password = "xxxxxxxx"; 
    } 
    else 
    { 
     $db_hostname = "localhost"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "root"; 
     $db_password = "root"; 
    } 

?> 
+0

首页,当我第一次访问对我来说工作正常,但这可能是持久状态。试着回应'$ requesturi'和'$ pos'的值,看看它们是否符合你的期望。 – jpmc26 2013-04-24 06:02:18

+0

请注意,每次运行php脚本时都必须建立一个新的数据库连接。 – 2013-04-24 07:02:58

回答

1

尝试使用

session_start(); 

你的文件的开头。

+0

我在登录文件的开头添加了'session_start();'当然是<?php'后面,但它的行为和以前完全一样。我也尝试将它添加到索引页面(在'require_once'login.php';'之前),但没有观察到任何变化。 – wetjosh 2013-04-24 05:58:47

+0

只需在$ pos = strpos($ requesturi,“www.distantfuturejosh.com”)后打印$ pos的值; – 2013-04-24 06:04:54

+0

你知道吗,我之前试过,我用echo代替它,它确实修复了它。为什么在变量可以在条件语句中使用之前,必须先回显变量?现在我的页面顶部有一个丑陋的“0”。 – wetjosh 2013-04-24 06:33:55

0

尝试使用if ($pos === false)代替if ($pos === 0)这样

<?php 

    $requesturi = $_SERVER['HTTP_HOST']; 
    $pos = strpos($requesturi, "distantfuturejosh"); 

    if ($pos === false) 
    { //local 
     $db_hostname = "localhost"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "root"; 
     $db_password = "root"; 
    } 
    else 
    { //remote 
     $db_hostname = "xxxxxxxx"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "xxxxxxxx"; 
     $db_password = "xxxxxxxx"; 
    } 

?> 

我想你检查用户登录和包括login.php在其他PHP页面与include /subfolder/login.php;

+0

我试过了,远程工作,本地没有。 – wetjosh 2013-04-24 07:20:45

+0

你的意思是,当你在本地运行时,它不会进入'else'语句吗?或者它到达那里,但无法连接到你的本地主机数据库? – Amir 2013-04-24 07:25:04

+0

当我访问http:// localhost/pendingaxioms页面但我认为,因为它没有连接到数据库,因为凭据是错误的。我的意思是如果我删除if语句,只使用本地服务器的证书,它本地正常工作,但我试图以避免不得不来回更改证书,而且,如果我先访问login.php页面,它会起作用吗?我还想知道为什么... – wetjosh 2013-04-24 15:49:28