- ベストアンサー
ログイン認証で問題が発生しています
- ログイン認証の処理で問題が発生しており、正しいemailとpasswdに合致するユーザーの名前を表示できません。
- 問題が発生したログイン認証の処理により、正しいemailとpasswdの組み合わせにもかかわらず、ユーザー名の表示ができません。
- ログイン認証の処理に問題があり、emailとpasswdの組み合わせに合致するユーザーの名前の表示ができません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>$passwd=addslashes($_POST['passwd']); addslashes()では不十分です。 mysqlのエスケープはmysql_real_escape_string()を使いましょう。 http://jp.php.net/mysql_real_escape_string -- >$sql="select * from users where email='{$_POST['email']}' and {$_POST['email']}をそのまま突っ込んでどうするんですか^^; エスケープされた文字列を格納した変数の$emailを入れないとせっかくのインジェクション対策が意味ありません。 $sql="select * from users where email='" . $email . "' and -- >$_session['name']=$name; グローバル変数$_SESSIONは大文字です。 小文字だと別変数として扱われてしまいます。 -- >if(mysql_num_rows($rs)>0){ >$_session['login']=1; >header('location:'. "top.php"); >exit; >} >mysql_close($con); mysql_close()される前にexitされてます。 挙動的には変わりませんが美しいコードではありません。 if(mysql_num_rows($rs)>0){ $_SESSION['login']=1; header("location:top.php"); } mysql_close($con); exit; このようにすべきでしょう。 -- 「動作しない原因」としてはおそらく$_SESSIONが小文字になっている、ということだと思います。
その他の回答 (1)
- wp_
- ベストアンサー率54% (132/242)
画面が真っ白になるのは何かしらのエラーが起きているからです。 エラーログを見れば原因が出ています。 /etc/httpd/log /etc/apache2/log この辺にあります。 エラーログが見れない場合は error_reporting(E_ALL); をphpの最初の方に記述すると画面にエラーが出るようになります。 予測ですが、 >$con=mysql_connect(localhost,@@,@@); $con=mysql_connect("localhost",@@,@@); かな。 あと ようこそ<? $_SESSION['name']?> さん<br> ↓ ようこそ<?= $_SESSION['name']?> さん<br> の間違いですかね。 ほかにもいろいろ突っ込みたいところはありますが、まずはエラーログの見方を覚えて 自分なりのdebug方法を確立した方が良いです。
お礼
ご回答ありがとうございます アドバイスの通りやってみたのですが、今度は画面が真っ白になってしまって、何も表示されなくなってしまいました・・・ $con=mysql_connect(localhost,@@,@@); mysql_select_db("@@"); $passwd=mysql_real_escape_string($_POST['passwd']); $email=mysql_real_escape_string($_POST['email']); $name=mysql_real_escape_string($_POST['name']); $sql="select * from users where email='" . $email . "' and passwd='" . $passwd . "'"; $_SESSION['name']=$name; $rs=mysql_query($sql); if(mysql_num_rows($rs)>0){ $_SESSION['login']=1; header("localhost:top.php"); } mysql_close($con); exit; ?> 何かおかしいなところございますか?