2016-08-05 5 views
1

connection.phpには3つのファイルがあります。 work.php login.php これらは私がデータベース内のユーザータイプまたは管理者のタイプを識別するために使用するコードです。それは、符号化/ devのプロセスで必要とされているので、私はMySQLを使用しMySQLとPHPの特定のユーザータイプ

私が遭遇しています問題は、私は、ユーザーのタイプを検出することができませんということです。 ユーザーの種類を識別することができる可能性があることをお勧めしますか。

enter image description here login.php

<?php 
// Try and connect to the database 
include('connection.php'); 
$selected = mysql_select_db("wildlife",$conn) 
    or die("Could not select "); 

    //$myusername = mysql_real_escape_string($conn,$_POST['username']); 
    //$mypassword = mysql_real_escape_string($conn,$_POST['password']); 
    if(isset($_POST['user']) && isset($_POST['pass'])){ 
      $user = $_POST['user']; 
      $pass = $_POST['pass']; 
      //$type = $_POST['type']; 

      // $query = mysql_query("SELECT * FROM wrd_users WHERE emp_username='$user' and emp_password='$pass'  
      //and emp_type = '1'"); 


      $query = mysql_query("SELECT * FROM wrd_users WHERE emp_username='$user' and emp_password='$pass' "); 

      if(mysql_num_rows($query) > 0) 
      { 
       //check if there is already an entry for that username 
       echo "<br>DETECTED Username AND PASS already exists!"; 
       $query = mysql_query("SELECT emp_type FROM wrd_users WHERE emp_type = '1' "); 
       if(mysql_num_rows($query) > 0) 
        { 
        //check if there is already an entry for that username 
         echo "<br>KING1"; 

        } 
       else 
        { 

         echo "<br>QUEEN1"; 
        } 

       $query = mysql_query("SELECT emp_type FROM wrd_users WHERE emp_type = '2' "); 
       if(mysql_num_rows($query) > 0) 
        { 
        //check if there is already an entry for that username 
         echo "<br>KING2"; 

        } 
       else 
        { 

         echo "<br>QUEEN"; 
        } 
      } 
      else 
      { 

       //header("location:index.php"); 
       echo(" No User Found"); 
       //header('work.php'); 
      } 
    } 
    mysql_close(); 
?> 

connection.php

<?php 
$conn = mysql_connect('localhost', 'root', '', 'wildlife'); 

    if (!$conn) 
    { 
     die('Connect Error: ' . mysql_errno()); 
    } 
    else 
    { 
     echo ("connected from connection.php"); 
    } 
?> 

結果としてwork.php

<?php 
include('login.php'); 
?> 

<html> 
<head><title>INDETIFY THE USER TYPE</title> 
</head> 
<body> 
<form action="login.php" method="post"> <!-- Sign In Process --> 
Username: <input type="text" name="user" id="emp_username"style="width:150"> 
<br /> 
Password: <input type="password" name="pass" id="emp_password"style="width:153"> 
<br /> 
<br /> 
<input type="submit" value="submit"> 
</form> 
</body> 
</html> 

**スーパー、スーパー**が入力されています

enter image description here

+0

あなたのコードはSQLインジェクションに対して脆弱です!ユーザーが$ _POST ['user']に悪質なデータを渡すとどうなりますか? mysql_関数を使用せず、バインドされたパラメータでmysqli_またはPDOを使用することを検討してください。 – iyop45

+1

[mysql_'データベース拡張](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)を使用しないでください。 は廃止予定ですPHP7で)特にPHPを学んでいるならば、あなたのエネルギーを 'PDO'データベース拡張を学ぶのに費やしてください。 [こちらから](http://php.net/manual/en/book.pdo.php)非常に簡単です – RiggsFolly

+0

クエリでOR文を使用すると、重複するコードを削除できます: '' WHERE emp_type = ' 2 'OR emp_type =' 1 ''' ' – iyop45

答えて

0

$query = mysql_query("SELECT * 
         FROM wrd_users 
         WHERE emp_username='$user' 
         and emp_password='$pass' "); 

if(mysql_num_rows($query) > 0) 
{ 
    //check if there is already an entry for that username 

    $row=mysql_fetch_array($query); 

    if($row['emp_type']=='1') 
    { 
     echo "<br>KING1"; 
    } 

    if($row['emp_type']=='2') 
    { 
     echo "<br>KING2"; 
    }      
} 
else 
{ 

    //header("location:index.php"); 
    echo(" No User Found"); 
    //header('work.php'); 
} 
+0

](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)、それ が廃止されて、あなただけのPHPを学習している特別場合(PHP7に永遠になくなって)あなたのエネルギーを 'PDO'データベース拡張を学ぶのに費やしてください。 [こちらから](http://php.net/manual/en/book.pdo.php)そのとても簡単 – RiggsFolly

1

まず、このコードを試してみてください:もうmysql_*機能を使用しないでください。関連する質問:Why shouldn't I use mysql_* functions in PHP?代わりにmysqli_*関数またはPDOデータベース拡張を使用してMySQLデータベースに接続してください。

第2:実装が間違っています。あなたの関数mysql_num_rowsは、クエリ内で言いましたすべてが「emp_typeが1であるすべての行を与えます」(または2)だったので、常に正確に1つの行を返します。しかし、あなたがによってemp_type 1 編集し、このようなクエリでその行を持っているので、これは必ず、1行を返します。その後

$result = mysql_query("SELECT emp_type FROM wrd_users WHERE emp_username = '$user'"); 

、あなたはあなたの結果のemp_typeレコードに何があるか読むことができます。

アンより良い方法は、SQLインジェクションを防ぐために、あなたの入力した情報を逃れるために、次のようになります。

$result = mysql_query("SELECT emp_type FROM wrd_users WHERE emp_username = '".mysql_real_escape_string($user)."'"); 

しかし、もう* mysql_使用するないを覚えています!

関連する問題