質問 |
||
| QNo.4148506 | テーブル内の文字によりログインできません | |
|---|---|---|
| 質問者:idek |
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"); ?> |
|
困り度:
|
||
| 質問投稿日時: 08/07/03 16:40 |
||
回答良回答20pt |
|
| ANo.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)."'"); としましょう。 |
|---|---|
| 回答者:SHlVA | |
| 種類:アドバイス どんな人:専門家 自信:参考意見 |
|
| 回答日時: 08/07/06 07:01 |
|
| |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |