Я хочу, чтобы разные типы пользователей отображали разные страницы индекса при входе в систему. Я разместил страницу, которую они должны увидеть на начальном столбце таблицы 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) ;
}
Удалите первую строку с запятой (';') в вашем запросе внутри '$ result1' (' '$ input1'; "'). –
Привет. Я пробовал это, и он все еще не загружается. «Перед тем, как загрузить команду, поставьте оператор эха, чтобы проверить, что он вытаскивает главную страницу из базы данных, и поэтому это просто инструкция загрузки, которая, похоже, не работает. –