0

当用户登录时,我如何获取他们所有的 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 仍会打印所有用户信息。不仅仅是数学信息。为什么?

4

3 回答 3

0

请尝试使用mysqlior pdomysql_* 函数已被正式弃用

$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';
}

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

于 2013-04-28T21:20:59.033 回答
0

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

$row = mysql_fetch_assoc($q);

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

尝试运行

print_r($row)

你会看到它的内容。

于 2013-04-28T21:21:06.093 回答
0

首先,自定义加密例程不被认为是安全的,特别是如果您在此处发布您的代码(或其变体)。

其次,与普通的 MD5(被认为非常不安全)相比,您的例程没有额外的安全性。假设您的例行程序花费的时间比计划 MD5 长 3 倍。重要的是,您每秒可以执行10 亿个 MD5 ,因此在尝试 10 亿个最常见的密码时,您最多可以为攻击者的破解时间增加几秒钟。

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

当您使用框架时,您将受益于拥有大量预先存在的示例和“最佳实践”。您将在更高级别进行编程。事实上,框架通常会针对您甚至不知道的攻击提供保护,例如 SQL 注入、XSS 等。

于 2013-04-28T21:26:59.567 回答