0

ユーザーがログインしたときに、すべての mysql 情報を取得するにはどうすればよいですか? 登録システムとログインシステムがあります。ユーザーがログインするとき、ユーザー名とパスワードを入力します。入力できる変数はこれら 2 つだけです。ユーザーが入力したものではない、そのプロファイルの他のすべての変数を取得するにはどうすればよいでしょうか。ユーザー名は一意です。すべての 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

mysqliまたはpdoを使用してみてください。mysql_* 関数は公式に非推奨です

$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']内で1 つの特定のフィールドを使用します。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

まず、カスタム暗号化ルーチンは、特にコード (またはその変形) をここに投稿した場合、安全とは見なされません。

第 2 に、通常の MD5 (恐ろしく安全でないと考えられている) に比べて、ルーチンには追加のセキュリティがありません。あなたのルーチンが計画 MD5 よりも 3 倍長くかかるとしましょう。大したことですが、1 秒あたり 10 億回の MD5を実行できるため、10 億個の最も一般的なパスワードを試すときに、せいぜい攻撃者のクラッキング時間に数秒追加したことになります。

独自のパスワード ルーチンをロールしようとしないでください。実際、独自のユーザー ログインとセッション コードを展開するべきではありません。CakePHP のようなフレームワークを使用します。(ユーザー認証用のプラグインが必要な場合があります。bcrypt() を使用していることを確認してください)。

フレームワークを使用すると、多くの既存の例と「ベスト プラクティス」が得られます。より高いレベルでプログラミングします。実際、フレームワークは多くの場合、SQL インジェクションや XSS など、知らない攻撃から保護します。

于 2013-04-28T21:26:59.567 に答える