0

ユーザーがユーザー名とパスワードを入力するlogin.phpにhtmlフォームがあります。次に、html 関数の validateForm() を使用して、両方のフィールドにデータが入力されたことを検証します。これが true を返した場合、OCI を使用してデータベースに対してユーザー名が有効であり、パスワードの有効期限が切れていないことを検証する check_user_pw.php ファイルを呼び出します。これが true を返す場合、$str_submit 経由でログイン用のフォームを送信します。ユーザーが入力した情報をデータベースに問い合わせるために、ユーザーがフォームにデータを入力した後に実行する check_user_pw.php ファイルが必要です。フォームの送信前に validateForm() と check_user_pw.php の両方が実行されるように、php ファイルを onsubmit ボタンに追加する方法を教えてください。また、php ファイルから関数のようなブール値を返すことはできますか、それともパラメータを使用してログインに戻す必要がありますか。

login.php (部分コード):

<?php  

<script>  
function validateForm()  
{  
var u=document.forms["LoginForm"]["ssousername"].value;  
var p=document.forms["LoginForm"]["password"].value;  
var x=new Boolean(true);  

if (u==null || u=="" || p==null || p=="")  
 {  
 alert("Username and password must be entered");  
 x=false;  
 }  
return x;  
}    
</script>  

<form action="<? php print($str_submit) ?>" onsubmit="return validateForm()" method="post" name="LoginForm" AutoComplete="off">  
<input type='hidden' name='site2pstoretoken' value='<?php print($str_token) ?>'>   
<input type='hidden' name='W_url' value='<?php print($str_submit) ?>'>  
<input type='hidden' name='subscribername' value='<?php print($subscribername) ?>'>  
<table id="logintab">  
<tr><td><font class="standard_div">User Name:</font></td><td><input type='text' name='ssousername' size='25' maxlength='30' value=''></td>  
<td><div class="notes_div">(not case sensitive)</div></td></tr>
<tr><td><div class="standard_div">Password:</div></td><td><input type='password' name='password' size='25' maxlength='30' value=''></td>  
<td><div class="notes_div">(case sensitive)</div></td></tr>   
</table>  
</form>  
<?  

check_user_pw.php:

<?php    
$ssousername = $_POST['ssousername'];   
$ssousername = strtoupper($ssousername);   

//Clear out variables  
unset($g_enabled_yn, $g_msg, $g_pw_last_chg, $pw_to_exp);  

$today = date('m/d/y');  
$today_p10 = date('m/d/y', strtotime('+' . 10 . ' days'));  //today + 10 days  

$c = ocilogon("a_imps", "*******", "test");  

//Check if user enabled.  
$s = ociparse($c, "begin a_imps.is_portal_user_enabled(:bv2, :bv3, :bv4); end;");  
ocibindbyname($s, ":bv2", $ssousername);     //input bind variable  
ocibindbyname($s, ":bv3", $g_enabled_yn,1);  //output bind variable  
ocibindbyname($s, ":bv4", $g_msg,300);       //output bind variable  
ociexecute($s);

 //Check pw expiration.  
$s = ociparse($c, "begin :bv := ods.get_last_pwchg(:bv2); end;");    
ocibindbyname($s, ":bv2", $ssousername);    //input bind variable  
ocibindbyname($s, ":bv",  $g_pw_last_chg, 8); //output bind variable    
ociexecute($s);  
ocilogoff($c);    

$ssousername = strtoupper($ssousername);  
GLOBAL $ret;  
$ret = true;  

if ($g_enabled_yn == "N")  //If account disabled, display message.-->  
{         
  ?>  
  <script>  
    alert("<? php print($g_msg) ?>");  
  </script>  

  <script>  <!--Clear history and go back to main page-->  
    var Backlen=history.length;    
    history.go(-Backlen);              
    window.location.href="http://imps-forms.main_page"  
  </script>   

  <?php          
  $ret = false;  
}  
else  

  if ($g_pw_last_chg != "" && $g_pw_last_chg != null)  
  { 
    //60 days from last chg pw date, pw will expire.  Change nbr below to 60  
    $pw_to_exp = date('m/d/y', strtotime($g_pw_last_chg. '+' . 80 . ' days'));  

    if ($pw_to_exp <= $today)  
    {  
       ?>       
       <script type="text/javascript">  
         alert("Your password expired on <?php echo $pw_to_exp; ?>");  
       </script>  

       <script>  <!--Clear history and go back to main page-->  
         var Backlen=history.length;    
         history.go(-Backlen);  
         window.location.href="http://imps-forms.main_page"  
       </script>  

       <?php  
       $ret = false;  
    }   
  }  
return $ret;  
?>  
4

1 に答える 1

0

AJAX とおそらく JSON について読んでください。これで、そのタスクを実行できます。しかし、Javascript が機能しないように、フォームを偽造することができます。この場合、サーバー側でユーザーを検証する必要があります。このフォームでのアプローチは正しくないようです。フォームのセキュリティについても読んで、最初に他のログイン スクリプトを確認する必要があります。

于 2013-07-18T15:22:21.860 に答える