2015-08-26 2 views
0

Я хочу, чтобы разные типы пользователей отображали разные страницы индекса при входе в систему. Я разместил страницу, которую они должны увидеть на начальном столбце таблицы usertype. Я думал, что следующая часть скрипта сделает это для меня, но она останется на странице login_action.php. Я не могу понять, как отменить его. Будет ли ошибка mysqli или умение работать? Если да, то где бы я это сказал?Загрузите страницу, указанную в запросе, в журнале

$result1 = mysqli_query($dbc, "select users.userid, users.usertypeid, usertype.homepage from users INNER JOIN usertype ON users.usertypeid = usertype.usertypeid WHERE users.username = '$input1';") or die(mysqli_error ($dbc)) ; 
    # On success set session data and display logged in page. 
    if ($check) 
    { 
    while($row1 = mysqli_fetch_array($result1)) 
    { 
    # Access session. 
    session_start(); 
    $_SESSION[ 'userid' ] = $row1[ 'userid' ] ; 
    $_SESSION[ 'username' ] = $data[ 'username' ] ; 
    $_SESSION[ 'usertypeid' ] = $row1[ 'usertypeid']; 
    $_SESSION['logged_in'] = true; 
    $_SESSION['last_activity'] = time(); 
    $_SESSION['expire_time'] = 30000; 
    $_SESSION['homepage'] = $row1['homepage']; 
    load ($row1['homepage']) ; 
} 
    } 

ПОЛНАЯ PHP файлы следующим образом (минус заголовок, который включается на каждой странице и включает в себя соединение с базой данных, которая работает нормально):

login.php

<?php 

# Display any error messages if present. 
if (isset($errors) && !empty($errors)) 
{ 
echo '<p id="err_msg">Oops! There was a problem:<br>' ; 
foreach ($errors as $msg) { echo " - $msg<br>" ; } 
echo 'Please try again or email support for help</p>' ; 
} 
?> 

<!-- Display body section. --> 
<h1>Login</h1> 
<form action="login_action.php" method="post"> 
<p>User Name: <input type="text" name="username"> </p> 
<p>Password: <input type="password" name="password"></p> 
<p><input type="submit" value="Login" ></p> 
</form> 

</div> 

login_action .php

<?php # PROCESS LOGIN ATTEMPT. 

# Check form submitted. 
if ($_SERVER[ 'REQUEST_METHOD' ] == 'POST') 
{ 

//open the database connection 
include'connect_db.php'; 
$input1 = $_POST['username']; 

    # Get connection, load, and validate functions. 
    require ('login_tools.php') ; 

    # Check login. 
    list ($check, $data) = validate ($dbc, $_POST[ 'username' ], $_POST[ 'password' ]) ; 

$result1 = mysqli_query($dbc, "select users.userid, users.usertypeid, usertype.homepage from users INNER JOIN usertype ON users.usertypeid = usertype.usertypeid WHERE users.username = '$input1';") or die(mysqli_error ($dbc)) ; 
    # On success set session data and display logged in page. 
    if ($check) 
    { 
    while($row1 = mysqli_fetch_array($result1)) 
    { 
    # Access session. 
    session_start(); 
    $_SESSION[ 'userid' ] = $row1[ 'userid' ] ; 
    $_SESSION[ 'username' ] = $data[ 'username' ] ; 
    $_SESSION[ 'usertypeid' ] = $row1[ 'usertypeid']; 
    $_SESSION['logged_in'] = true; 
    $_SESSION['last_activity'] = time(); 
    $_SESSION['expire_time'] = 30000; 
    $_SESSION['homepage'] = $row1['homepage']; 
    load ($row1['homepage']) ; 
} 
    } 
    # Or on failure set errors. 
    else { $errors = $data; } 

    # Close database connection. 
    mysqli_close($dbc) ; 
} 

# Continue to display login page on failure. 
include ('login.php') ; 

?> 

login_tools.php

<?php # LOGIN HELPER FUNCTIONS. 

# Function to load specified or default URL. 
function load($page = 'login.php') 
{ 
    $url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . dirname($_SERVER[ 'PHP_SELF' ]) ; 
    # Remove trailing slashes then append page name to URL. 
    $url = rtrim($url, '/\\') ; 
    $url .= '/' . $page ; 
    # Execute redirect then quit. 
    header("$url") ; 
    exit() ; 
} 

# Function to check email address and password. 
function validate($dbc, $username = '', $password = '') 
{ 
    # Initialize errors array. 
    $errors = array() ; 

    # Check username field. 
    if (empty($username)) 
    { $errors[] = 'Enter your username.' ; } 
    else { $u = mysqli_real_escape_string($dbc, trim($username)) ; } 

    # Check password field. 
    if (empty($password)) 
    { $errors[] = 'Enter your password.' ; } 
    else { $p = mysqli_real_escape_string($dbc, trim($password)) ; } 

    # On success retrieve user_id, user_name from 'users' database. 
    if (empty($errors)) 
    { 
    $q = "SELECT userid, username FROM users WHERE username='$u' AND pass=SHA1('$p')" ; 
    $r = mysqli_query ($dbc, $q) or die(mysqli_error ($dbc)) ; 
    if (@mysqli_num_rows($r) == 1) 
    { 
     $row = mysqli_fetch_array ($r, MYSQLI_ASSOC) ; 
     return array(true, $row) ; 
    } 
    # Or on failure set error message. 
    else { $errors[] = 'Username and password not found.' ; } 
    } 
    # On failure retrieve error message/s. 
    return array(false, $errors) ; 
} 
+0

Удалите первую строку с запятой (';') в вашем запросе внутри '$ result1' (' '$ input1'; "'). –

+0

Привет. Я пробовал это, и он все еще не загружается. «Перед тем, как загрузить команду, поставьте оператор эха, чтобы проверить, что он вытаскивает главную страницу из базы данных, и поэтому это просто инструкция загрузки, которая, похоже, не работает. –

ответ

0

Попробуйте поместить запрос в отдельную строку и затем запустить ее. Это поможет вам найти ошибку.

$query = "select users.userid, users.usertypeid, usertype.homepage from users INNER JOIN usertype ON users.usertypeid = usertype.usertypeid WHERE users.username = '$input1';"; 
$result1 = mysqli_query($dbc, $query); 
if (!$result1) die("Tried executing: " . $query . ", but got error: " . mysqli_error($dbc)); 

Я бы тогда взять распечатанный запрос и вручную ввести его в консоли тузда или в поле Phpmysql SQL, чтобы увидеть, где именно проблема.

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