2011-08-15 30 views
0

現在、電子メールアドレスとパスワードの2つのテキストフィールドを持つhtmlログインページがあります。 HTMLにはフォームと、データ入力を確認するためにJavaScriptをトリガーするボタンが含まれています。データが有効な場合、データはPHPアプリケーションに送信されます。HTML、Javascript、PHPログインページ

このphpアプリケーションは、ログインの詳細が有効か無効かによって応答が異なります。ここで

は私のPHPです:

if(isset($_POST['username']) && isset($_POST['password'])){ 
    //connect to database 
    $dbh = connect(); 
    $user = mysql_real_escape_string($_POST['username']); 
    $usertype = mysql_real_escape_string($_POST['usertype']); 
    $pass = md5($_POST['password']); 
    $query = ""; 
    if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $user)) { 
     if($usertype == "SupportStaff"){  
     $query = "SELECT staffId, fName, lName, gender, email FROM SupportStaff WHERE email = '$user' AND password = '$pass'"; 
     }else{  
     $date = $_POST['currdate'];  
     $query = "SELECT athleteId, fName, lName, gender, email FROM Athletes WHERE email = '$user' AND password = '$pass'"; 
     } 

     //make query 
     $result = mysql_query($query) or die ("didn't query"); 

     //see if there's an EXACT match 
     $num = mysql_num_rows($result); 
     if ($num == 1){ 
     $row = mysql_fetch_assoc($result); 
     if($usertype == "Athlete"){  
      $user = str_replace("@","at",$user); 
      $user = str_replace(".","dot",$user); 
      $user .= "Entries"; 
      $query = mysql_query("SELECT * FROM $user WHERE date = '$date'"); 
      $exists = false; 
      if(mysql_num_rows($query) == 1){ 
     $exists = "true"; //to see if questionnaire is complete 
      }else{ 
     $exists = "false"; 
      } 
      $row['complete'] = $exists;    
     } 
     echo json_encode($row); 
     } else { 
     echo ($user." "); 
     echo ($pass); 
     echo ("&result=invalid"); 
     } 
    }else{ 
     mysql_close($dbh); 
     echo ("&result=false"); //invalid e-mail address 
    } 
    mysql_close($dbh); 
} 
?> 

それは&result=false OR &result=invalidをエコー表示した場合、それが成功した場合、私は、エラーメッセージまたは類似した何かを表示し、再びログインページにアップサービスされるユーザーをしたいと思います( echo json_encode($row))それはhome.html(すなわち、ホームページ)にかかるべきです...これを達成する最良の方法は何ですか?

+0

参照[PHPログインスクリプト](http://php-login-script.com/)を使用して提出されているかどうかをテストすることができます

<form name="input" action="login.php" method="post"> 

を持つべきですコードを読んで、その仕組みを理解してください。がんばろう! – CuriousMind

+0

あなたの質問をコードで更新する前に私の答えを提出しましたが、私の提案はまだ解決策の1つです。コードを効果的に書くと、純粋に手続き型コードの代わりに関数(または完全なOOコード)を書くことによって、PHPファイルが大きくなりすぎたり/乱雑になるのを防ぐことができます。 – ChrisW

答えて

0

Ajaxまたはredirect server sideのいずれかを使用してください。

Ajaxルート(すでにクライアントサイドスクリプトを実行している場合は賢明でしょう)に進む場合は、jQuery's Ajax機能を参照してください。具体的には、postがおそらくあなたの要件を満たします。

私は確信していますが、クライアント側の検証だけではサイトを保護するには不十分であることを強調する必要があります。クライアント側の検証は、セキュリティの一形態ではなく、ユーザーエクスペリエンスを向上させる方法と見なすべきです。サーバー側に手動でリクエストすることで、クライアント側の検証を簡単に回避できます。

0

オプションがいくつかあります:

  • あなたは、サーバーへのAJAX呼び出しを使用して、JavaScriptでそれを完全に行うことができます。その後、ログインが成功したかどうかに応じて、JavaScriptのページの内容が更新されます。これは非常に扱いにくいかもしれないので、もしあなたがjavascriptとAJAXの呼び出しに慣れていないなら、私はこれをお勧めしません。
  • PHPページに少しのコードを追加して、表示したいページにすぐにリダイレクトすることができます。
  • PHPページを変更して、表示する内容をすぐに表示することができます(たとえば、データが無効であった場合にログインページを再度表示するなど)。
1

ログインコードに別のPHPファイルが必要な理由はありますか?あなたのログインフォームがlogin.phpというページ上にあると仮定すると、同じファイル内にすべてのログインコードを持つことができます。フォームは、あなたがどのようなデータがまだ

if(count($_POST) > 0) 
{ 
    //if data has been submitted, then test whether it's correct, and if it is, show relevant content 

    //If validation fails, show form 
    display_form(); 
} else 
{ 
    display_form(); 
} 
+0

はい、これはベストプラクティスであるため、データベースとインターフェイスするWebサービスを提供したいと思います。それはPHPからHTMLを分離するための 'クリーンな'ソリューションのようだ... – user559142

関連する問題