2014-09-29 1 views
0

Я новичок в создании сценариев входа с php и MySQL и надеялся на некоторую помощь. У меня уже есть основы для фактической проверки правильности введенной информации, и я правильно понял, что сессии работают. Тем не менее, у меня возникли проблемы с получением информации пользователя, чтобы вытащить его из своей строки и отобразить на странице членства. Нужно ли мне делать другой запрос и добавить цикл while на этой странице для сбора информации? Вот скрипты:Пожалуйста, помогите с PHP скриптом входа в систему

login.php

$p_num = ""; 
    $pwd = ""; 
    $errors = ""; 
    $num_rows = 0; 

    $user_id = ""; 
    $user_name = ""; 
    $password = ""; 
    $image = ""; 
    $user_email = ""; 
    $program = ""; 

    if($_SERVER["REQUEST_METHOD"] == "POST"){ 
     include("database.php"); 
     $p_num = $_POST["username"]; 
     $pwd = $_POST["password"]; 

     $query = "SELECT * FROM $user_table WHERE user_id = '$p_num' AND password = '$pwd'"; 
     $result = mysqli_query($connect, $query); 
     $num_rows = mysqli_num_rows($result); 

     if($result){ 
      echo "There is/are " .$num_rows ." set(s) in the database with this info.<br>"; 
      if($num_rows > 0){ 
       session_start(); 
       $_SESSION["login"] = 1; 
       header("Location: ../pages/instructor.php"); 
      } 
      else{ 
       echo "Unable to login"; 
      } 
     } 
    } 

instructor.php

<!DOCTYPE html> 
<?php 
    include("../php/login.php"); 
    include("../php/database.php"); 
?> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <title></title> 
     <link href="../css/style.css" rel="stylesheet/less" type="text/css"> 
     <script src="../js/jquery.2.0.3.js"></script> 
     <script src="../js/script.js"></script> 
     <script src="../js/less-1.7.4.min.js"></script> 
    </head> 
    <body> 
     <div id="page"> 
      <header> 
       <div id="logo" class="logo_bg"></div> 
       <div id="fsi_logo" class="logo_bg"></div> 
      </header> 

      <div id="main"> 
       <?php 
        session_start(); 
        if(isset($_SESSION["login"])){ 
         echo "Hello"; 
        } 
       ?> 
       <div id="bleg"> 
        <h1><a href="../pages/create_scenario.html">BUILD SCENARIO</a></h1> 
        <h1><a href="#">SEARCH SCENARIOS</a></h1> 
        <h1><a href="#">VIEW SCENARIOS</a></h1> 
       </div> 
      </div> 

      <footer>Copyright&copy; 2014 FlightSafety International</footer> 
     </div> 
    </body> 
</html> 

database.php

$db = "spartan"; 
    $host = "localhost"; 
    $user = "root"; 
    $password = ""; 
    $connect = mysqli_connect($host, $user, $password) or die(mysqli_error($connect)); 
    $user_table = "users"; 
    $user_info = "user_info"; 

    $create_db_spartan = "CREATE DATABASE IF NOT EXISTS $db"; 
    $create_table_users = "CREATE TABLE IF NOT EXISTS $user_table(user_id VARCHAR(10) NOT NULL, user_name VARCHAR(100), password VARCHAR(16), PRIMARY KEY(user_id))"; 
    $create_table_users_info = "CREATE TABLE IF NOT EXISTS $user_info(user_id VARCHAR(10) NOT NULL, user_name VARCHAR(100), email VARCHAR(50), program VARCHAR(4), PRIMARY KEY(user_name))"; 

    mysqli_query($connect, $create_db_spartan) or die(mysqli_error($connect)); 
    mysqli_select_db($connect, $db) or die(mysqli_error($connect)); 
    mysqli_query($connect, $create_table_users) or die(mysqli_error($connect)); 
    mysqli_query($connect, $create_table_users_info) or die(mysqli_error($connect)); 

Так же, как FYI, я не занимаюсь SQL Injection в этот момент времени, это не то, что было выпущено, и оно находится во внутренней сети. Заранее спасибо.

+0

Чтобы отобразить данные из БД, да используйте цикл while. 'while ($ row = mysqli_fetch_array ($ result)) {echo $ row ['column_you_want_to_echo'];}' –

+0

@Fred, я пробовал это, однако, даже с предложением include. Он отбрасывает ошибку, заявляя, что переменная $ результат не индексируется. Любые предложения по устранению этого? – 2014-09-29 17:44:40

+0

@ Fred-ii- Почему не 'mysqli_fetch_assoc'? Кроме того, лучше использовать OOP Way. :) – iFarbod

ответ

1

В обоих ваших сценариях session_start() выдается после отправки данных в браузер. Это означает, что возможность установки заголовков прошла, и поэтому сеансовые файлы cookie не могут быть установлены. Таким образом, сеансы не будут работать.

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

Аналогично, ваш header('Location: X') должен использоваться до отправки вывода, иначе перенаправление не будет работать. Однако это появляется сразу после echo и вывода DOCTYPE. Удалить эхо, а затем отредактировать начало файла instructor.php таким образом:

<?php 
    include("../php/login.php"); 
    include("../php/database.php"); 
?> 
<!DOCTYPE html> 

Здесь выход DOCTYPE не должно произойти до тех пор, загрузка файлов и инициализации не будет завершена. Если есть куки/сеансы/переадресации, они могут быть сделаны здесь.

Все эти проблемы с «заголовками уже отправлены» должны вызывать предупреждение. Если вы не видите этого в своей среде разработки, вы можете отключить экранные ошибки - убедитесь, что они включены.

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