2011-06-03 1 views
2

私はデータベースに接続するための簡単なチュートリアルを探して、次にユーザー名とパスワードを比較してアクセスできるようにしたいと考えました。これは初心者向けのコーディングですが、少なくとも私は練習してうまくいけば、もっとプログラミングをすることができます。PHPとSQLを練習しようとしていますが、私はロジックが正しいかどうか分かりません

check.php

<?php 
    //Need session// 

    $username = 'root'; 
    $password = 'root'; 
    $host = 'localhost'; 
    $db_name = 'pcart'; 

    $connection = mysql_connect($host, $username, $password) or die('cannot be connected'); 

    mysql_select_db($db_name, $connection) or die ('Could not select database'); 
    $user=$_POST['username']; 
    $pass=$_POST['password']; 

    $query = "Select username, password from tbladmins"; 
    $user_result = mysql_query($query); 
    echo $user_result; 
    if (mysql_num_rows($user_result)==0) 
    { 
     echo "no rows to print"; 
    } 
    while ($row=mysql_fetch_array($user_result, MYSQL_ASSOC)) 
    { 
     $checkuser=$row["username"]; 
     $checkpass=$row["password"]; 
    } 
    mysql_free_result($user_result); 

    if !($user == $checkuser and $pass == $checkpass) 
    { 
     echo'where are you'; 
     $results= mysql_query("Select * from tbladmins;") or die('error connecting to mysql'); 
     if(mysql_num_rows($results)==0) 
     { 
      echo "no rows found, nothing to print so i am exiting"; 
     } 
     print "test successful" 
     mysql_free_result($results); 
    } 
    else 
    { 
     echo "Wrong user or password! If you forgot, email Josephine for the username 
     and password"; 
    } 
?> 

のindex.php

<html> 
    <head> 
     <title>Partner Portal 
     </title> 
    </head> 
    <body id="partners-page"> 
     <div id="main"> 
      <form method="post" action="Check.php"> 
       <input type="text" name="username" value=""/> 
       <input type="password" name="password" value=""/> 
       <input type="submit" name="submit" value="submit"> 
       <input type="reset" name="reset" value="reset"> 
      </form> 
      <a href="#">forgotten password</a> 

     </div> 
     <!--#main--> 

     </div><!--div partner-page--> 
</html> 

EDIT

問題は、ユーザー名とパスワードが一致した場合、私がテストしていたときに、それは何も表示されませんということですデータベースにあるもの...だから私は何か見落としましたか?ユーザー名とパスワードの入力をテストしたときにページが空白になったのはなぜですか?

+2

$ locahost = 'localhost'のスペルが間違っています。 dbconfig.phpでは、$ localhost = 'localhost'でなければなりません。 –

+2

データベース接続にPDOを使用することを検討してください。 – tamasd

+0

@弥来、PDOとは何ですか?私が無知であれば申し訳ありませんが、コードを書き始めました。 – joe

答えて

3

ニースのジョセフィーヌ、これは素晴らしいスタートです!今、私はあなたが言うことを聞いたことを知っている、猫を肌にする百万の方法があります、これは例外ではありません。上記を達成するには本当にたくさんの方法がありますが、遅くにこの方法をやっていますが、どうすればいいのでしょうか。

データベース接続とユーザ管理を安全に行うため、すべてのPHPフレームワークに含まれています。これはすべてあなたのために行われますので、基本的には設定ファイルに記入してください。

それがすべての関係をどのように結びつけ、正しい方向にあるのかを知ることは素晴らしいことです。 :D

フレームワークでは、すべてのアプリケーションで使用するコードを再利用する必要があります。ソフトウェアエンジニアであるため、再利用するため、場所を問わずすべての場所に複製する必要はありません。

もう1つのことは、このようなコードは隠されているので、私はそれを気絶させることができず、正しくテストされていることを知っています。

良い仕事を続けてください:Dそれは、を取得し、多くもっと面白いより深いあなたはウサギの穴を下ります。

+0

私は知っているけど、テストしようとしているときに空白を表示するので、私のコードは機能しません。 phnフレームワークがpinnaclecartの外にあるとき、pinnaclecartデータベースとうまく動作しますか? – joe

+0

$ _REQUESTの代わりにvar_dump($ _ POST)を試してください。 –

+0

はい、すでに$ _POSTに変更されていますが、何も起こりません:(私はまだ考えています... – joe

0

ジョセフィン、ベース/土木用です。はい。より良いセキュリティを実現するために、常にパスワードをハッシュするためにMD5/SHAを追加することができます。

+0

@グレー咀、どのようにmd5/shaを追加するには?私はこれに慣れていません。私はそれをgoogleに – joe

+0

こんにちはMD5/SHA(暗号化/暗号化のための)標準的なハッシングメソッドの一つです。 PHPでは、md5($ str)またはsha1($ str)を呼び出すことができます。 md5($ str)またはsha1($ str)をエコーし​​てその効果を確認することは、間違いなく歓迎します。 G'luck。 –

+0

@Gray Tsui、プレーンmd5/shaだけでなく、塩で – sanmai

0

は、私はそれが失敗するだろうと見ることができる唯一の明白な理由は、(代わりにlocalh-locah-、)ここではタイプミスです:

$locahost = 'localhost'; 

それは良いスタートだが、それはあなたのように見えますまだあなたの前には長い旅があります。

明白なもののいくつかは以下のとおりです。

1)なぜローカルホスト$として「ローカルホスト」を含む変数に名前を付けますか?なぜあなたはリテラルを使用していなかった - それは確かに、mysql_connectに渡された変数がしかmysql_connectためを使用している)

2本$ホストと呼ばれてきたために、より理にかなって?変数宣言と関数呼び出しが2つの別々のインクルードファイルに分割されているのはなぜですか?

3)特定のエラーメッセージを表示していないのはなぜですか? 1つはおそらく実行中のある時点で生成されたでしょう - あなたがそれを見た場合、あなたはあなたの投稿にそれを提供していたはずです。あなたがそれを見ていない場合は、理由を考えて時間を割いてください(そして、あなたが次回にそれを見られるようにしてください)。

4)テストリグで作業したら、tbladminで数千の行があるときにスクリプトがどのように実行されると思いますか?非手続き型コードを使用して複雑なタスクを実行すると、コードをデバッグするのが困難になることがあります。ロジックを押し下げると、ほとんどの場合パフォーマンスが向上します。考えてみましょう:インラインコードを使用して

$qry = "SELECT * from tbladmins WHERE username='" 
     . mysql_real_escape_string($_REQUEST['username'], $connection) 
     . "' AND password = '" 
     . mysql_real_escape_string($_REQUEST['password'], $connection) 
     . "'"; 

5)内のファイルを含めることは厄介な習慣です - あなたは制限している場合にファイルを含めるだけで、あなたは自分を救う、適切なタイミングでそれらを呼び出す明示的に機能し、クラスや定数を宣言あなたのプログラムがより複雑になるにつれ、多くの悲しみ。

6)インクルードファイルは、モジュラープログラミングの代替物ではありません。上記(5)も参照してください。

幸運。

+0

私はそれに気付き、ファイルを分割する代わりにすべてを1つのファイル(check.php)に戻しました。 #3については、白と空白のページしか表示されないので、なぜそれがわからないのですか?私はまだ今まで考えている。私は知っているが、管理者はテストに使用されている。あなたが言ったことは、それがパートナーのためであれば同じになるからだ。 – joe

関連する問題