dポイントプレゼントキャンペーン実施中!

PHP5&MySQL5&XP-SP2
pear::DB接続でテーブルと連動したlogin.phpを作成しています。
m_studentというテーブルのstuidとstpassというフィールドを使いチェックしています。
stuidとstpassのデータの中身が数字だとログインできますが、半角の英語だとログインできません。
--ある特定の文字だと英語でもログインできます。
どなたか、ご経験、ご指導いただけると幸いです。

--login.php
session_start();
include_once('connection.php');
$id=$_REQUEST['name'];
$_SESSION['name']=$_REQUEST['name'];
$_SESSION['pass']=$_REQUEST['pass'];

$query = mysql_query("select * from m_student where `stuid`='$id'");
$row=mysql_fetch_assoc($query);

if(($row['stpass']!='') && ($row['stpass']==$_SESSION['pass']))
{
?>
<script language="JavaScript" >
parent.location.href='../learningsite-jp/index.php';
</script>
<? }
else {

if($_REQUEST['error']==1){ ?>
<script language="javascript">alert('IDとパスワードが間違っています。');</script>
<? $_REQUEST['error']=0;}
?>
--ここからhtmlの記述
--以下、HTMLの中でjavaでチェックをかけている部分
<script language="javascript">
function check(){
var str1 = document.login.name.value;
var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;

if (str1=='')
{
alert('Please enter user id.');
document.login.name.focus();
return false;
}

else if(document.login.pass.value=='' ){
alert('Please enter the password.');
document.login.pass.focus();
return false;
}

else
return true;
}

function lostpass(){

document.getElementById('login').style.display='none'
document.getElementById('lostpass').style.display='block'

}
</script>

---connection.php
<?php
mysql_connect('localhost', 'root', 'Koji0615')
or die('Could not connect: ' . mysql_error());
mysql_select_db('learning_bdb') or die('Could not select database');
mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis");
?>

A 回答 (1件)

pear::DBはどこに?なんてツッコミはほっといて・・・


とりあえず、入力された値と、そのIDのデータをDBから引いて、自分の目で確認したらどうでしょう?

print_r($_REQUEST);

で入力されたものがどうかみれますよね。まずその値が正確か確認しましょう。そのあとに、DBからIDで引いた値も見ましょう。

print_r($row);

あたりですね。
これらの値を自分で見て、あってるかどうか、あってるのにログインできてないのはなぜか、という風に、1ステップずつ処理が正しいか確認しましょう。

それから、ここに書き込むために省略したのかもしれませんが、おもいっきりSQLインジェクションに脆弱ですよね。
最低でも

$query = mysql_query("select * from m_student where `stuid`='".mysql_real_escape_string($id)."'");

としましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!