2012-02-21 44 views
1

私は非常によく似た質問をしました。私はそれが仕事をしたと思っていたが、それはしませんでした!私の人生のために、私はなぜこれがうまくいかないのか理解できません!私はユーザーがログインしているときにhtmlのフォームを消したい!これまでのところ私のコードをheres! (HTMLはloooongあるとして、私は文句を言わない、すべてのコードが表示されますが、私はこれは私がPHPの初期の初心者の段階で午前心に留めてください、releventだと思う):PHPとHTML - ユーザがログインしたときに<form>を隠す

私は私のページの上部にこれを持っています

<?php 
if (isset($_GET['showerror'])) 
$errorcode = $_GET['showerror']; 
else 
$errorcode = 0; 
?> 

は、次に試してみて、フォームを隠し、ユーザー名/パスワードが間違っている場合、エラーを表示するようにするコードは:

<?php 
if ($errorcode == 1) 
    { 
    echo "<h3>Your login has failed. Try again</h3>"; 
    } 
?> 

<?php 
session_start(); 

if (!isset($_SESSION['is_logged_in'])) { 
?> 

<form id="login" name="login" action="logincheck.php" method="post"> 
      User Name: 
      <input type="text" name="username"></input> 
      Password: 
      <input type="password" name="password"></input> 
      <input type="submit" name="submit" value="login"></input> 
      <a href="javascript: void(0)" onclick="popup('register.html')" > (Register)</a> 
      <br /><br /><br /> 
     </form> 
<? 
} 
?> 

次のコードは、私がログイン資格情報が正しいかどうかを確認するために書いたもので、 index.htmlページに戻すには、errorcodeに値を割り当てて、資格情報が間違っている場合はエラーメッセージが表示され、正しい場合はフォームを非表示にするためにis_logged_inに値を割り当てます。両方の場合において、我々は、ディスプレイ上のフォームとeroorメッセージ、またはno形式およびメッセージなしで戻ったindex.htmlにうまくいけば、いずれかの電源が入っている:

<?php 
session_start(); 
require "dbconn.php"; 

$username = $_POST['username']; 
$password = $_POST['password']; 

$sql = "SELECT * FROM person WHERE name ='".$username."' AND password='".$password."'"; 

$result = mysql_query($sql) or die(mysql_error()); 

$row = mysql_fetch_array($result); 

if ($row != null) 
    { 
    $_SESSION['username'] = $row['name']; 
     header("Location: index.html?is_logged_in=1?"); 
    exit(); 
    } 
else 
    { 
    header("Location: index.html?showerror=1"); 
    exit(); 
    } 
?> 

(dbconn.phpは、MySQLデータベースへの接続の私です)問題は、2つの結果のどちらも、エラーメッセージが表示されず、何も起こっていないので、私が間違っている場所を判断するのが難しいため、隠された形式が得られないということです。

何か助けてくれてありがとう...私はxamppを正しくセットアップして、たくさんのことを学ぶ準備をしていましたが、今ここ数時間良いところにいらしています!

EDIT:まだこのコードを編集しています!いくつかのコードを表示していませんでしたが、私は今完了したと思います!

+0

とにかく、$ usernameと$ passwordにはmysql_real_escape_string()を使うべきです! – Dion

+0

私はそれを見て、私は絶対初心者ですので、ハード暗号化や何も....基本的な機能を持つグリップにしようとしている! – Phil

+1

私は怪しげに見える2つのことを見ていますが、私は答えを投稿したいとは思えません。とにかく:1)session_start()は常にすべてのPHPの最上位になければなりません - それが使用されている文書? 2) 'header(" Location:index.html?is_logged_in = 1? ");の2番目の疑問符も間違っているように見えます。あなたがこれら2つのことを変えるとどうなりますか? – davogotland

答えて

1

あなたはセッション変数is_logged_inを設定していない、($行!= nullの場合は括弧の間)のログインファイルに

$_SESSION["is_logged_in"] = 1; 

を入れ

0

フォームを非表示にするときにセッションをチェックすると、$_SESSION['is_logged_in']が検索されますが、ユーザーがログインしたときにそのセッションを設定していません。つまり、usernameのセッション変数です。あなたのような何かを追加する必要があります。

$_SESSION['is_logged_in'] = 1; 
0

検証が成功した後に実行私はあなたのロジックで[「is_logged_in」]あなたは$ _SESSIONの値を設定するステートメントを欠落しているかもしれないと思ううーん、

($行!= null)の条件は、トリックを行う必要がある場合は、あなたに

$_SESSION['is_logged_in'] = "1"; 

に追加します。 =)

これは、is_logged_inという名前のセッション変数をチェックしているが、コードで設定されていないため存在しないためです。

代わりに、 'isset' if文で "$ _SESSION ['name']"を確認することもできます。

sidenoteでは、SQL文の一部として使用する文字列をエスケープすることをお勧めします。 PHPを使用すると、簡単な方法の1つはPHPに組み込まれたmysql_real_escape_string関数を使用することです。ユーザー入力が直接SQLステートメントに渡されると、SQL Injectionという攻撃が発生する可能性がありますが、これは非常に危険です。= D

0

あなたのを隠すために、スタイルを使用することができます形式:

.form 
{ 
display:block; 
} 

.form error 
{ 
display:none; 
} 

は、あなたがそれを隠すことができ、あなたのフォームのための新しいクラスを追加するために)使用することで、このAPI addClassを(jQueryを使ってちょっとしたトリックを使用しています。

しかし、間違ったパスワードや間違ったユーザー名を入力した場合は、フォームの横にエラーを表示して、ユーザー名とパスワードを再度入力することをおすすめします。

if (!isset($_SESSION['is_logged_in'])) 

0

は変更してみてください

if (!empty($_GET['is_logged_in'])) 

しかし、その後、再び、あなたは、これはユーザーの資格情報を検証するための非常に危険な方法であることを理解する必要があります。すべてのユーザー入力にをmysql_real_escape_stringの

重要使用

www.site.com?is_logged_in=lolhacked 
0

これを試してください:あなたのようなURLを書き込むことによって、単純に偽の自分のログには、可能性があり、ユーザbecuase URLパラメータに変数のこれらの種類を渡すことはありません、またはあなたは非常に簡単にハックすることができますダンKanzeからのコメントを参照してください。しかしMYSQLIの拡張を学ぶ方が良い。Prepared Statements、より簡単で洗練された、より安全な ここに例があります。 http://mattbango.com/notebook/web-development/prepared-statements-in-php-and-mysqli/

また、このコードは、ユーザーが$ _GET [「is_logged_in」]を設定することができ引き起こし、非常に安全ではありません!==「1」manuell、あなたは多分ユニークな値で、ユーザーのPCにクッキーを追加する必要があり、ユーザーがログインしていて、その値がDBに保存されているユーザー/パスのペアと一致していることを確認してください。

ちょうどGoogleの安全なログインフォームPHPなどです。

<?php 


require "dbconn.php"; 


if(@$_GET['showerror'] == "1"){ 
    echo "Your login has failed. Try again"; 
    exit; 
} 


if(!empty($_POST['username']){ 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']); 
    $sql = "SELECT * FROM person WHERE name ='".$username."' AND password='".$password."'"; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $row = mysql_fetch_array($result); 
    if(!empty($row)){ 
     $_SESSION['username'] = $row['name']; 
     header("Location: index.html?is_logged_in=1?"; 
     exit(); 
    }else{ 
     header("Location: index.html?showerror=1"); 
     exit(); 
    } 
} 

if(@$_GET['is_logged_in'] !== "1"){ 
    // DISPLAY FORM 
}else{ 
    // DO YOUR STUFF 
} 

?> 
+0

mysql_real_escape_stringは廃止され、ブラインドSQLインジェクション攻撃に使用できます。これを使わないでください。 –

+0

ああ、もう使用しないでください。準備された文だけ、私の答えを編集します。知ってくれてありがとう。 – user1015314

0

まあ、私はPHPで非常に新しい、まだ自分自身を学んでいます。私が言うことの1つは、パスワードを暗号化する必要があるということです。 "md5($ password);"を使用してください。そこに他の暗号化アルゴリズムがありますが、私にとってはmd5が最も一般的に使用されているようです。

ログインスクリプトに関して、私が他のプログラマーから素早く学んだことの1つは、必要なときに$ _GET []を使うことです。 ?Page =、?viewphoto =、など。URLに「ログインした」状態を保存しないでください。クッキーを使用! :)

「mysql_real_escape_string()」にもう1つ必要なことは、それらを使用する必要があります!!!!!!またはハッカーは簡単にSQLインジェクションスクリプトを実行します。それらを使用する方法についてのPHPページを見てください。

私のコードが正しいとは言いません(やはりPHPにとってはまだまだ新しいことです)。

if(!count($err)) 
{ 
    $_POST['username'] = mysql_real_escape_string($_POST['username']); 
    $_POST['password'] = mysql_real_escape_string($_POST['password']); 
    $_POST['rememberMe'] = (int)$_POST['rememberMe']; 

    // Escaping all input data 

    $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM {$bd_prefix}Members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'")); 

    if($row['usr']) 
    { 
     // If everything is OK login 

     $_SESSION['usr']= $row['usr']; 
     $_SESSION['id'] = $row['id']; 
     $_SESSION['rememberMe'] = $_POST['rememberMe']; 
     $_SESSION['logged'] = true; 

これは、私がもう一度年をコード化したログインスクリプトのほんの始まりにすぎません。コードの一部が正しくコーディングされていない可能性があり、これを行うためのより良い方法があるかもしれません。それは当時私のために働いた。

関連する問題