2012-04-05 31 views
2

我使用this code來驗證我的URL。Http URL保護在localhost中工作,但在服務器上失敗

  1. 其工作罰款,我localhost但是當我加載到服務器(GoDaddy的),它的反覆詢問用戶名和密碼。

  2. 我想要控制這些用戶名和密碼字段並將它們連接到我的數據庫。

對於正在使用這樣的代碼:

$conid = mysql_connect("localhost", "root", ""); 
if(!$conid) { 
    die("sorry unable to establish a connection".mysql_error()); 
} 
echo "connected succesfully<br>"; 
mysql_select_db("passurl", $conid); 
$rr = mysql_query("select password from validate where username='$user' "); 
while($row = mysql_fetch_array($rr)) { 
    $x = $row['password']; 
} 
if($x == $password) { 
    //take into the website 
} 

因此當用戶名密碼&由用戶輸入,就成功驗證它考慮到該頁面。

我使用PHP-MYSQL,因爲我有初步的知識,是編程的新手。

善意幫助我解決上述兩個問題與適當的測試代碼。

編輯: 問題一在本地工作,使用的鏈接中提供的代碼相同。問題二是試圖從我的本地數據庫中檢索那些usernamepassword字段,以便可以在我的本地主機上授予登錄名(如果它在稍後階段工作,我將使數據庫聯機)。

編輯-2:

ty.php包含像

<?php 

$auth_realm = 'Access restricted'; 

require_once 'auth.php'; 

echo "You've logged in as {$_SESSION['username']}<br>"; 
echo '<p><a href="?action=logOut">LogOut</a></p>' 

?> 

<center><h1>now you see the protected content</h1></center> 

auth.php代碼包含

<?php 
    $_user_ = 'test'; 
    $_password_ = 'test'; 
    session_start(); 

$url_action = (empty($_REQUEST['action'])) ? 'logIn' : $_REQUEST['action']; 
$auth_realm = (isset($auth_realm)) ? $auth_realm : ''; 

if (isset($url_action)) { 
    if (is_callable($url_action)) { 
     call_user_func($url_action); 
    } else { 
     echo 'Function does not exist, request terminated'; 
    }; 
}; 

function logIn() { 
    global $auth_realm; 

    if (!isset($_SESSION['username'])) { 
     if (!isset($_SESSION['login'])) { 
      $_SESSION['login'] = TRUE; 
      header('WWW-Authenticate: Basic realm="'.$auth_realm.'"'); 
      header('HTTP/1.0 401 Unauthorized'); 
      echo 'You must enter a valid login and password'; 
      echo '<p><a href="?action=logOut">Try again</a></p>'; 
      exit; 
     } else { 
      $user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : ''; 
      $password = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; 
      $result = authenticate($user, $password); 
      if ($result == 0) { 
       $_SESSION['username'] = $user; 
      } else { 
       session_unset($_SESSION['login']); 
       errMes($result); 
       echo '<p><a href="">Try again</a></p>'; 
       exit; 
      }; 
     }; 
    }; 
} 

function authenticate($user, $password) { 
    global $_user_; 
    global $_password_; 

    if (($user == $_user_)&&($password == $_password_)) { return 0; } 
    else { return 1; }; 
} 

function errMes($errno) { 
    switch ($errno) { 
     case 0: 
      break; 
     case 1: 
      echo 'The username or password you entered is incorrect'; 
      break; 
     default: 
      echo 'Unknown error'; 
    }; 
} 

function logOut() { 

    session_destroy(); 
    if (isset($_SESSION['username'])) { 
     session_unset($_SESSION['username']); 
     echo "You've successfully logged out<br>"; 
     echo '<p><a href="?action=logIn">LogIn</a></p>'; 
    } else { 
     header("Location: ?action=logIn", TRUE, 301); 
    }; 
    if (isset($_SESSION['login'])) { session_unset($_SESSION['login']); }; 
    exit; 
} 

?> 

所以一旦我們打ty.php它要求用戶名和密碼,並在驗證成功它顯示受保護的下。所有這些在localhost中工作正常,但在服務器上不起作用。

有人可以請幫我出這
感謝提前:)

+0

正確的格式,請 – JimmyBanks 2012-04-05 12:53:30

+0

請你能告訴你滿了,實際的代碼。同時驗證您的公共主機上的數據庫連接是否正常。 – DaveRandom 2012-04-05 12:57:52

+0

@DaveRandom完整的代碼與所提供的鏈接相同。 – krishna 2012-04-05 13:06:54

回答

0

您需要創建您的GoDaddy的託管服務,root和密碼爲空的數據庫用戶名和密碼不能打通你。根是本地服務器的默認用戶名,並且您沒有爲其設置任何密碼,因此""可用作密碼。您必須在遠程服務器上設置用戶名和密碼才能使其工作。

mysql_connect("your-host-server", "a-username", "a-secret-password"); // Password can't be empty and username can't be root, hope you understand 
+0

我有一些以前的經驗,如何使數據庫在線,沒有問題。首先它不在當地工作。 – krishna 2012-04-05 13:05:57

0

您正在循環使用這些密碼,但只會在循環後檢查一個值。

你的代碼是:

while($row = mysql_fetch_array($rr)) { 
    $x = $row['password']; 
} 
if($x == $password) { 
    //take into the website 
} 

它應該是:

while($row = mysql_fetch_array($rr)) { 
    if ($password == $row['password']) { 
     // take into the website 
    } 
} 
相關問題