使用php和mysql登录系统

时间:2013-04-28 20:52:58

标签: php mysql

当用户登录时,如何获取所有mysql信息?我有一个注册系统和登录系统。当他们登录时,他们输入他们的用户名和密码,这些是我可以使用的唯一两个变量,因为他们输入了它们。如何获取该配置文件的所有其他变量,而不是用户输入的变量? 他们的用户名是唯一的。如何在我的所有php文件中使用其余的变量?

我的登录文件:

<?
/*Use of Sessions*/
if(!session_id())
session_start();

header("Cache-control: private"); //avoid an IE6 bug (keep this line on top of the page)

$login='NO data sent';

/*simple checking of the data*/
if(isset($_POST['login']) && isset($_POST['pass']))
{

/*Connection to database logindb using your login name and password*/
$db=mysql_connect('localhost','teachert_users','dogs1324') or die(mysql_error());
mysql_select_db('teachert_users');

/*additional data checking and striping*/
$_POST['login']=mysql_real_escape_string(strip_tags(trim($_POST['login'])));
$_POST['pass']=mysql_real_escape_string(strip_tags(trim($_POST['pass'])));
$_POST['pass']=md5($_POST['pass']);
$_POST['pass']=strrev($_POST['pass']);
$_POST['pass']=md5($_POST['pass']);
$_POST['pass'].=$_POST['pass'];
$_POST['pass']=md5($_POST['pass']);


$q=mysql_query("SELECT * FROM profiles WHERE username='{$_POST['login']}' AND     password='{$_POST['pass']}'",$db) or die(mysql_error());

/*If there is a matching row*/
if(mysql_num_rows($q) > 0)
{
    $_SESSION['login'] = $_POST['login'];
    $login='Welcome back, '.$_SESSION['login'];
    $login.='</br> we are redirecting you.';
echo $login;
echo '<META HTTP-EQUIV="Refresh" Content="2; URL=/php/learn/selectone.php">';    
    exit;    

}
else
{
    $login= 'Wrong login or password';
}

mysql_close($db);

}

//you may echo the data anywhere in the file
echo $login;

?>

我可以在$ _SESSION ['var']的所有其他文件中使用他们的登录名和密码; 我怎么得到其余的?喜欢他们的年龄?还是他们的名字?或者我的mysql文件中存储的任何变量。 是的,我知道MD5不是最好的,我们不要把它变成对此的讨论。

------------------------编辑---------------------- --------- 我想我会改写一下:

我用这个:

$q=mysql_query("SELECT * FROM profiles WHERE username='{$_POST['login']}' AND password='{$_POST['pass']}'",$db) or die(mysql_error());

如何从特定用户/个人资料中获取变量。就像他们的其他变量一样,例如他们的名字,在我的mysql中是fname。

-------------------------编辑--------------------- ------ 我已更新到:

    $mysqli = new mysqli('localhost', 'teachert_users', 'dogs1324', 'teachert_users');
if($mysqli->connect_errno) {
    echo "Error connecting to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$user = $_SESSION['login'];
$get_user_info_query = $mysqli->query("SELECT * FROM profiles WHERE username = '$user'");
if($get_user_info_query->num_rows) {
    while($get_user_info_row = $get_user_info_query->fetch_assoc()){
    if ($get_user_info_row['math']) {   
       print_r($get_user_info_row['math']);
        }        
    }
} else {
    echo 'User not found';
}

但print_r仍然会打印所有用户的信息。不仅仅是数学信息。为什么呢?

3 个答案:

答案 0 :(得分:0)

请尝试使用mysqlipdomysql_*功能已被弃用

$mysqli = new mysqli($dbserver, $dbmanager, $dbpass, $dbname);
if($mysqli->connect_errno) {
    echo "Error connecting to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli-    >connect_error;
}
$user = $_SESSION['login'];
$get_user_info_query = $mysqli->query("SELECT * FROM profiles WHERE username = '$user'");
if($get_user_info_query->num_rows) {
    while($get_user_info_row = $get_user_info_query->fetch_assoc()){
        print_r($get_user_info_row);
    }
} else {
    echo 'User not found';
}

这将打印mysql返回的整个行信息,以便在$get_user_info_row['username']语句中使用一个特定字段while

答案 1 :(得分:0)

这是使用mysql_方法获取数据信息的代码:

$row = mysql_fetch_assoc($q);

变量$ row将有一个数组,其中包含sql语句返回的字段。检查是否存在行后,请使用此行。

尝试运行

print_r($row)

你会看到它的内容。

答案 2 :(得分:0)

首先,custom encryption routines are not considered secure,特别是如果您在此处发布您的代码(或其变体)。

其次,你的例程对普通MD5(被认为是非常不安全)没有额外的安全性。让我们说你的例行程序比计划MD5长3倍。重要的是,你可以a billion MD5s per second,所以在尝试10亿个最常见的密码时,你最多只能为攻击者的破解时间增加几秒钟。

您永远不应该尝试滚动自己的密码例程。实际上,您也不应该滚动自己的用户登录和会话代码。使用像CakePHP这样的框架。 (您可能需要一个用户身份验证的插件。请确保它使用bcrypt()。)

当您使用框架时,您将获得许多预先存在的示例和&#34;最佳实践&#34;。你将在更高层次上编程。实际上,框架通常可以防止您甚至不知道的攻击,例如SQL注入,XSS等。