У меня есть эта 3 неопределенная ошибка индекса

У меня есть эта ошибка, и я не могу ее решить:

Примечание. Неопределенный индекс: идентификатор в C:\xampp\htdocs\store\header.php в строке 10

Примечание. Неопределенный индекс: пользователь в C:\xampp\htdocs\store\header.php в строке 11

Внимание: Неопределенный индекс: пароль в C:\xampp\htdocs\store\header.php в строке 12


У меня есть страница входа, где я вхожу, устанавливаю id, пользователя и пароль сеанса. И когда я вхожу в систему, все работает нормально, за исключением ошибки, которая продолжает отображаться.

Это header.php :

    <?php
    session_start();
            if (isset($_SESSION["user"])) {
            $msg_logout = '<br />
               <div>                                              
                  <a href="logout.php">Log out</a>              
                </div>';        
            }
          // checking if this SESSION is in the DB
            $userID = preg_replace('#[^0-9]#i', '', $_SESSION["id"]); 
            $user = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["user"]);
            $password = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["password"]); 
                        // Connect to the MySQL database  
            include "conx_to_db.php"; 
            $result = mysqli_query($db_1,"SELECT * FROM fans WHERE username='$user' AND password='$password' LIMIT 1"); // query the person
                        // confirm user in DB
            $existCount = mysqli_num_rows($result);
            if ($existCount == 0) { // evaluate the count
            $msg_login = "<div>
                     <a href='login.php' style='text-decoration:none; color: #000;'>Login</a> </div>
                 <div id='bt_registar'>
                     <a href='registo.php' style='text-decoration:none; color: #000;'>Registar</a>
                 </div>";
                 }
     ?>
     <div id="head">
    <div id="logo">
        <a href="index.php"><img src="img/logo34.png" height="80" border="0">
    </div>      
    <div>
    <?php echo $msg_login; $msg_logout; ?>
        <br /><a href="cart.php"><img   src="img/cart.png" height="56" width="56" style="vertical-align:middle;"><strong>Cart</strong></a>

    </div>
</div>

Это index.php:

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Store test</title>

    <link rel="stylesheet" href="estilo/style.css" type="text/css" media="screen" />

    </head>
    <body>

    <?php include_once("header.php");?>

    <div id="main"> 

<hr>

    <table border="0" cellspacing="10" cellpadding="10">
        <tr>
        <td width="35%" valign="top" style="border-right:3px solid green">     <h3>&#8226; Service</h3><br /><br />
        <p>Benvindo .</p>
        <p>gets some god stuff.<br /><br />

        <p>&eacute; A store bla bla! <br />
        <br />
            Isto &eacute;  test!</p></td>
        <td width="65%" valign="top"><h3>&#8226; Os mais comprados</h3><br   />
     <p><?php echo $List; ?><br /></p>
                  </td>
    <br />
    <br />
        </tr>
      </table>
      </div>

      <?php include_once("footer.php");?>
      </div>
      </body>
      </html>

Я надеюсь, что кто-то может объяснить мне, что не так. Спасибо


person Afzal    schedule 26.09.2013    source источник
comment
$_SESSION["id"], $_SESSION["user"] и $_SESSION["password"] не установлены   -  person Paul Dessert    schedule 26.09.2013
comment
Привет, Афзал, добро пожаловать в SO.   -  person Ben    schedule 26.09.2013
comment
Ну, у меня есть сеанс, установленный на моей странице входа, с идентификатором, пользователем и паролем. Все работает нормально, когда я вхожу в систему. Я забыл сказать об этом .. я собираюсь отредактировать вопрос, чтобы добавить эту информацию. ...Извини за это   -  person Afzal    schedule 26.09.2013
comment
@Afzal - ваша страница входа устанавливает идентификатор, пользователя и пароль в $_SESSION. Эти индексы не будут существовать до тех пор, пока не будет вызвана страница. Я добавил это в свой ответ.   -  person Ben    schedule 26.09.2013


Ответы (5)


Все действительно просто и PHP уже сказал вам, в чем ошибка.

Все, что вам нужно, это просто читать. Это говорит вам, что индексы id, user и password не определены.

Итак, $_SESSION["id"], $_SESSION["user"] и $_SESSION["password"] не определены.

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

person Salvador Dali    schedule 26.09.2013

Как следует из ошибки, эти три строки

$userID = preg_replace('#[^0-9]#i', '', $_SESSION["id"]);
$user = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["user"]);
$password = preg_replace('#[^A-Za-z0-9]#i', '', $_SESSION["password"]);

являются проблемой. Скрипт ищет адрес id в массиве $_SESSION, но его там нет по какой-то причине, поэтому он сообщает, что индекс не определен.

Чтобы исправить это, вы можете использовать

if (isset($_SESSION['id']) { ... }

или убедитесь, что он установлен до того, как он понадобится.

ИЗМЕНИТЬ

Ваша страница входа устанавливает идентификатор, пользователя и пароль в $_SESSION. Эти индексы не будут существовать до тех пор, пока не будет вызвана страница.

Однако header.php необходимо знать эти значения, поэтому либо установите их заранее, либо используйте isset.

person Ben    schedule 26.09.2013

Через некоторое время я получил его.

решение:

   if(isset($_SESSION['id'])){
      if(isset($_SESSION['user'])){
        if(isset($_SESSION['password'])){
        $log = 1;
        }
      }
   }

Спасибо всем за вашу помощь, я знаю, что это выглядит просто, но я новичок и учусь!

«Обратите внимание, что это не ошибки! Это уведомления». Джеймс -> Проверено

person Afzal    schedule 26.09.2013

Обычный способ инициализации переменной:

$userID = isset($_SESSION["id"]) ? $_SESSION["id"] : NULL;

И после того, как вы собираетесь выполнять какую-либо операцию с $userID, вы можете проверить, является ли это значением null

if(!empty($userID)){
   //do something
}

Присвоение значения по умолчанию с помощью тернарного оператора

пусто()

person Emilio Gort    schedule 26.09.2013

Пожалуйста, проверьте свою сессию с данным кодом, что сессия пуста или нет

var_dump($_SESSION);

какой бы ни был ответ на это, я дам вам знать, в чем проблема.

person Syed Umair Hussain Shah    schedule 16.01.2015