使用this code验证我的网址。
我的localhost
工作正常,但当我加载到服务器(goDaddy)时,它反复询问用户名和密码。
我想控制这些用户名和密码字段并将它们连接到我的数据库。
因为我正在使用这样的代码:
$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
}
所以当用户名和&amp;密码由用户输入,成功验证后进入该页面。
我正在使用PHP-MYSQL,因为我已经初步了解它,是编程的新手。
请帮助我使用合适的测试代码解决上述两个问题。
修改:
问题1在本地工作,并使用链接中提供的相同代码。问题二是我试图从我的本地数据库中检索那些username
和password
字段,以便可以在我的本地主机上授予登录(如果它在以后的阶段工作,我会将数据库带到在线) 。
修改-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 :(得分:0)
您需要在goDaddy托管服务root
上创建数据库用户名和密码,空密码无法通过。 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
答案 1 :(得分: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
}
}