Объединение таблиц в MySql с одним общим полем, но разными значениями для общего поля - PullRequest
1 голос
/ 21 января 2012

как объединить 3 таблицы с одним общим полем, например

  • table1: c_id, имя пользователя, пароль, c_role
  • table2: p_id, имя пользователя, пароль, c_role
  • table3: s_id, имя пользователя, пароль, c_role

в этом поле c_role является обычным здесь, мне присвоено

  • перечисление '1' для c_roleв таблице1
  • перечисление '2' для c_role в таблице2
  • перечисление '3' для c_role в таблице3

для предоставления прав 3 различным пользователям, таким как corres, Principalи для сотрудников, когда они входят в систему .. Теперь, когда они входят в систему, он должен идентифицировать пользователя и перенести их на свою страницу.

Ответы [ 3 ]

1 голос
/ 22 января 2012

У вас должна быть одна таблица, содержащая следующие столбцы:

id (уникальный, основной), имя пользователя, пароль, роль (INT, будет назначено 1-3 для участника,персонал или корректор в зависимости от пользователя)

Дополнительно

Вы можете создать другую таблицу с именами ролей, если хотите настроить ее следующим образом:

id (уникальный, основной), заголовок (параметры для заголовка могут быть принципалом, персоналом или сотрудниками)

Когда пользователь входит в систему, просто выполните что-то вроде

if($role == 1){
// redirect to principal page
}
elseif($role == 2){
// redirect to staff page
}
elseif($role == 3){
// redirect to corres page
}

Я не уверен, но яЯ считаю, что это будет работать.Попробуйте этот запрос.

(SELECT '1' AS role FROM table1 WHERE username = $username AND password = $password)
UNION ALL
(SELECT '2' AS role FROM table2 WHERE username = $username AND password = $password)
UNION ALL
(SELECT '3' AS role FROM table3 WHERE username = $username AND password = $password)

Предполагая, что пользователь находится только в ОДНОЙ из этих трех таблиц, он должен соответствовать имени пользователя и паролю и выяснить, из какой таблицы идет пользователь.Затем вы можете извлечь роль, используя

$role = $row['role'];

Если комбинация имени пользователя и пароля неверна, то $ role будет пустым или вы можете получить количество строк [используя $ iscorrectuser = mysql_num_rows ($ query)], где есть совпадение и число строк будет равно 0. Затем вы можете перенаправить пользователя, пытающегося войти, с сообщением об ошибке «Неудачный вход в систему».

1 голос
/ 21 января 2012

Единственные объединения будут по имени пользователя (и паролю?), Если только c_id, p_id и s_id не имеют одинаковый идентификатор?

Вы не можете присоединиться к роли, поскольку они различны в каждой таблице, за исключением совершенно ненормальной роли = 1 в Таблице 1 - эквивалент роли = 2 в таблице 2.

значит союз?Как и вы хотите

User Password Role
Fred Fr3d     1
Fred ???      2
Fred ???      3

Не уверен, что вы пытаетесь достичь с помощью этой схемы, но она нарушает все правила в книге и, кажется, не соответствует вашим потребностям ....

Исходя из вашего комментария, вы можете посмотреть следующим образом:

Is

Users (UserID, UserName, Password etc) Key UserID
Roles (RoleID, RoleName etc) Key RoleID
UserRoles(UserID,RoleID) Key UserID,RoleID

Вам нужно немного узнать о базах данных, особенно о нормализации, первые три формы должны быть полезныбольшинство вещей.

Тогда

Select UserName, Password,RoleName From Users 
inner join UserRoles on Users.UserID = UserRoles.UserID
inner join Roles on UserRoles.RoleID = Roles.RoleId

и тому подобное становятся возможными и эффективными.

0 голосов
/ 22 января 2012

сеанс и включаемые функции предоставляются:

 session_start();
 include("config.php"); 
 if(isset($_POST['T_UserName']) && isset($_POST['T_Password']) &&         !empty($_POST['T_UserName']) && !empty($_POST['T_Password']))
 {

имя пользователя и пароль, отправленные из формы:

 $T_UserName=$_POST['T_UserName'];
 $T_Password=$_POST['T_Password'];

Для защиты инъекции MySQL:

 $T_UserName = stripslashes($T_UserName);
 $T_Password = stripslashes($T_Password);
 $T_UserName= mysql_real_escape_string($T_UserName);
 $T_Password = mysql_real_escape_string($T_Password); 

  $sql="SELECT * FROM login WHERE username='$T_UserName' and password='$T_Password'";     $result=mysql_query($sql);

Mysql_num_rowсчитает строку таблицы:

  $count=mysql_num_rows($result);

Если результат соответствует $ T_UserName и $ T_Password, строка таблицы должна быть 1 строкой:

  if($count==1)
        { 

Зарегистрировать $ T_UserName, $ T_Password и перенаправить в файл "correspindex.php ":

         session_register("T_UserName");
         session_register("T_Password");

перенаправить на страницу ошибки или отобразить сообщение об ошибке:

         if(isset($_POST['emp_role'])
              { 
                $userinfo = mysql_fetch_assoc($sql);
                $emp_role = $userinfo['emp_role'];
         if($emp_role == 1)
            { 
               header("location:corrrespondindex.php"); 
            } 
              elseif($emp_role == 2 )
               {
               header("location:principalindex.php");
               } 
                elseif($emp_role == 3)
                {
               header("location:staffindex.php");
                } 
           closes out if the user DOES exist:

                header("location:loginhome.php"); 
                 } 
                else
                 { 
                 echo "Wrong Username or Password"; 
                 }
                }
             } 
 php is closed

       this is the php code im getting so many error
       i create 1table with id,username,password and role(ENUM,values as'1','2','3' –
       any else shud i do in the code???
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...