2016-09-03 2 views
0

У меня есть 2 таблицы для идентификатора входа, имени пользователя, пароля и ранжирования, а другой для статуса учетной записи. Мне нужно присоединиться к таблицам, чтобы выполнять только все активные учетные записи. Каждый раз, когда я пытаюсь использовать свой код в phpmyadmin, он отлично работает, но в моей системе это не сработает. Есть ли что-то с моим кодом? Btw. Ранг - для проверки аккаунта, если вы администратор или учащийся.php internal join более 2 таблиц

$sql = "SELECT a.login_id,username,password,rank,b.status FROM login2 as a INNER JOIN login_stat2 as b ON a.login_id = b.login_id WHERE username  ='".$username."' AND password='".$pass."' AND b.status='ACTIVE'"; 

$result = mysqli_query($con,$sql)or die(mysqli_error($con)); 
while($row = mysqli_num_rows($result)); 
session_regenerate_id(); 
     $member = mysqli_fetch_assoc($result); 
     $_SESSION['SESS_MEMBER_ID'] = $member['login_id']; 
     $_SESSION['SESS_NAME']  = $member['username']; 
     $_SESSION['SESS_RANK']  = $member['rank']; 


     if($member['rank']=='administrator'){ 
     header("location: login_reg.php"); 
     } 

     else if($member['rank']=='student'){ 
     header("location: student.php"); 
     } 
     else if($member['rank']=='candidate'){ 
     header("location: candidate.php"); 
     } 

     }else{ 
     print "Incorrect username or password"; 

      session_write_close(); 
+0

Определение "не будет работать". Самое очевидное, что я вижу, что цикл while на mysqli_num_rows не имеет смысла, поскольку сам по себе вызывает бесконечный цикл. –

+0

Так что я должен делать? – Mals

+0

Начну с того, что расскажу нам, что происходит _is_, что не происходит, а _all_ соответствующий код, а не недопустимые фрагменты. –

ответ

0
$sql = "SELECT a.login_id,a.username,a.password,a.rank,b.status FROM login2 as a INNER JOIN login_stat2 as b ON a.login_id = b.login_id WHERE a.username  ='".$username."' AND a.password='".$pass."' AND b.status='ACTIVE'"; 

$result = mysqli_query($con,$sql)or die(mysqli_error($con)); 

if(mysqli_num_rows($result)) { 
    echo 'Login success'; 
} else { 
    echo 'invalid username and password'; 
} 

В mysqli_num_rows() функция возвращает количество строк в наборе результатов.

Обновленный код

//create connection 
$conn = new mysqli('localhost', 'root', '', 'demo'); 

//check connection 
if($conn->connect_error) { 
    die("connection failed: ".$conn->connect_error); 
} 
echo "Connection Successful <br>"; 

$sql = "SELECT a.login_id,a.username,a.password,a.rank,b.status FROM login2 as a INNER JOIN login_stat2 as b ON a.login_id = b.login_id WHERE a.username ='admin' AND a.password='admin' AND b.status='ACTIVE'"; 

$result = mysqli_query($conn,$sql) or die(mysqli_error($con)); 
if(mysqli_num_rows($result)) { 
    echo "login"; 
} else { 
    print "Incorrect username or password"; 
} 
+0

Я использовал $ row для mysqli_fetch, а ниже - условие if и else. И этот код, который я создал, предназначен для формы входа. – Mals

+0

, если вы используете для входа в систему, тогда вам нужно только проверить ($ row> 0), затем true else false –

+0

mysqli_num_rows вообще не получает ассоциативный массив, он возвращает int. –

Смежные вопросы