Notice: Use of undefined constant

Тема в разделе "Как сделать...", создана пользователем 4uva4ok, 4 авг 2012.

  1. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    Проверьте правильность написания кода и еще из-за чего эта ошибка:ah:
    Notice: Use of undefined constant login - assumed 'login'on line 49
    Зарание спасибо

    PHP:
    <?php
    session_start
    ();
     
    include (
    "bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
    if (isset($_GET['id'])) {$id $_GET['id']; } //id "хозяина" странички
    else
    { exit(
    "Вы зашил на страницу без параметра!");} //если не указали id, то выдаем ошибку
    if (!preg_match("|^[\d]+$|"$id)) {
    exit(
    "<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
    }
     
    if (!empty(
    $_SESSION['login']) and !empty($_SESSION['password']))
    {
    //если существует логин и пароль в сессиях, то проверяем, действительны ли они
    $login $_SESSION['login'];
    $password $_SESSION['password'];
     
    //проверяем логин и пароль в сессиях через базу данных, получаем id пользователя
    $result2 mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
    $myrow2 mysql_fetch_array($result2);
    }
     
    //получаем всю информацию по id
    $result mysql_query("SELECT * FROM users WHERE id= '$id'",$db);
    $myrow mysql_fetch_array($result);
    if(!
    $myrow) exit("Пользователя не существует! Возможно он был удален.");
     
    // Считаем количество ответов
    $query "SELECT * FROM messages WHERE poluchatel='$myrow[login]' AND  hide=1 ";
    $new mysql_query($query);
    if(!
    $new) exit ("Ошибка");
    $num_rows mysql_num_rows($new);
     
    // Считаем количество вопросов
    $query2 "SELECT * FROM messages WHERE poluchatel='$myrow[login]' AND hide=0 ";           
    $new2 mysql_query($query2);
    if(!
    $new2) exit ("Ошибка");   
    $num_rows2 mysql_num_rows($new2);
     
     
       
    //Если страничка принадлежит вошедшему, то выводим личные данные   
    if ($myrow[login] == $login)  {
     
    print <<<HERE
     
    <!DOCTYPE html>...
     
  2. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    if ($myrow[login] == $login) -> if ($myrow['login'] == $login)

    т.е. возьми в кавычки ['login'], php считает это константой, это не ошибка, это нотис, с ним можно жить, но лучше без него)
     
    4uva4ok нравится это.
  3. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    а по написанию кода, я просто новичок))

    Исправил, не помогло :( - в этой строчке ему что то не нравится(((
     
  4. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    Какая ошибка? точно такая же или другая? или выкладывай весь скрипт или пиши ошибки...
     
  5. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    Notice: Undefined variable: login in C:\HomServ\home\second\page.php on line 45

    Уже голову сломал, когда входишь, то все нормально, а так выдает предупреждение...
    PHP:
    <?php
    error_reporting
    (E_ALL);
    session_start();
     
    include (
    "bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
    if (isset($_GET['id'])) {$id $_GET['id']; } //id "хозяина" странички
    else
    { exit(
    "Вы зашил на страницу без параметра!");} //если не указали id, то выдаем ошибку
    if (!preg_match("|^[\d]+$|"$id)) {
    exit(
    "<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
    }
     
    if (!empty(
    $_SESSION['login']) and !empty($_SESSION['password']))
    {
    //если существует логин и пароль в сессиях, то проверяем, действительны ли они
    $login $_SESSION['login'];
    $password $_SESSION['password'];
     
    //проверяем логин и пароль в сессиях через базу данных, получаем id пользователя
    $result2 mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
    $myrow2 mysql_fetch_array($result2);
    if(!
    $myrow2) exit ("Ошибка");
    }
     
    //получаем всю информацию по id
    $result mysql_query("SELECT * FROM users WHERE id= '$id'",$db);
    $myrow mysql_fetch_array($result);
    if(!
    $myrow) exit("Пользователя не существует! Возможно он был удален.");
     
    // Считаем количество ответов
    $query "SELECT * FROM messages WHERE poluchatel='$myrow[login]' AND  hide=1 ";
    $new mysql_query($query);
    if(!
    $new) exit ("Ошибка");
    $num_rows mysql_num_rows($new);
     
    // Считаем количество вопросов
    $query2 "SELECT * FROM messages WHERE poluchatel='$myrow[login]' AND hide=0 ";         
    $new2 mysql_query($query2);
    if(!
    $new2) exit ("Ошибка"); 
    $num_rows2 mysql_num_rows($new2);
     
     
     
    //Если страничка принадлежит вошедшему, то выводим личные данные 
    if ($myrow['login'] == $login)  {
     
    print <<<HERE
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Вход</title>
    <link rel="stylesheet" href="../assets/css/styles.css" /> 
     
    </head>
    <body>
    <div id="menu" class="menu-top">
          <div id="menuCenter">
     
            <a href="/account/wall">
              <div id="logo"></div>
            </a>
     
            <a href="/exit.php" class="link-menu">Выход</a>
            <a href="/setting/
    $id" class="link-menu">Установки</a>
              <a href="/all_users.php" class="link-menu">Поиск</a>
              <a href="/account/people" class="link-menu">Друзья</a>
              <a href="/page/
    $id" class="link-menu-active">Профиль</a>
              <a href="/mess/" class="link-menu">Вопросы (
    $num_rows2)</a>
              <a href="/account/wall" class="link-menu">Главная</a>
           
          </div>
        </div> 
     
     
    <div id="main_index">
    <img width ="300px" alt='аватар' with src=/
    $myrow[avatar]'><br>
    <form action='/post.php' method='post'>
     
    <br>
    <h2>Отправить Ваше сообщение:</h2>
    <textarea cols='43' rows='4' name='text'></textarea><br>
    <input type='hidden' name='poluchatel' value='
    $myrow[login]'>
    <input type='hidden' name='id' value='
    $myrow[id]'>
    <input type='submit' name='submit' value='Отправить'>
    </form>
    </div>
     
     
    <div id="main_index">
    HERE;
    //Выводим вопросы с ответами
    echo "Ответов: $num_rows <br><br>";
      if(
    mysql_num_rows($new) > 0)
      {
        while(
    $messages mysql_fetch_array($new))
        {
          
    // Выводим вопрос
          
    echo "<b>".$messages['text']."</b> - ";
          
    // Выводим ответ
          
    echo "<b>".$messages['answer']."</b><br><br>";
        }
      }
    else{
    echo 
    "Вопросов больше нет";
    }
     
    print <<<HERE
    </div>
    <footer>
    <h2>© 2012</h2>
    </footer>
    </body>
    </html>
    HERE;
     
    }
     
    else
    {
    //если страничка чужая, то выводим только некторые данные и форму для отправки личных сообщений
     
    print <<<HERE
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Вход</title>
    <link rel="stylesheet" href="../assets/css/styles.css" /> 
    </head>
    <body>
     
    <div id="menu" class="menu-top">
          <div id="menuCenter">
     
            <a href="/account/wall">
              <div id="logo"></div>
            </a>
    <a href="/index.php" class="link-menu">Вход</a>
    <a href="/reg.php" class="link-menu">Регистрация</a>
           
          </div>
        </div> 
     
     
     
     
    <div id="main_index">
    <img width ="300px" alt='аватар' with src='http://second/
    $myrow[avatar]'><br>
    <form action='/post.php' method='post'>
     
    <br>
    <h2>Отправить Ваше сообщение:</h2>
    <textarea cols='43' rows='4' name='text'></textarea><br>
    <input type='hidden' name='poluchatel' value='
    $myrow[login]'>
    <input type='hidden' name='id' value='
    $myrow[id]'>
    <input type='submit' name='submit' value='Отправить'>
    </form>
    </div>
    <div id="main_index">
    HERE;
    //Выводим вопросы с ответами
    echo "Ответов: $num_rows <br><br>";
      if(
    mysql_num_rows($new) > 0)
      {
        while(
    $messages mysql_fetch_array($new))
        {
          
    // Выводим вопрос
          
    echo "<b>".$messages['text']."</b> - ";
          
    // Выводим ответ
          
    echo "<b>".$messages['answer']."</b><br><br>";
        }
      }
    else{
    echo 
    "Вопросов больше нет";
    }
     
    print <<<HERE
    </div>
    <footer>
    <h2>© 2012</h2>
    </footer>
     
    </body>
    </html>
     
    HERE;
    }
     
    ?>
     
     
     
  6. chibit

    chibit Life sucks.

    Регистр.:
    4 дек 2007
    Сообщения:
    419
    Симпатии:
    285
    4uva4ok, очевидно, что $login может быть не определен (не сработало условие)
    PHP:
    if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
    но скрипт продолжает свою работу и обращается к неопределенной переменной.
    PHP:
    if ($myrow['login'] == $login)
     
  7. 4uva4ok

    4uva4ok Писатель

    Регистр.:
    3 авг 2011
    Сообщения:
    0
    Симпатии:
    0
    Спасибо всем, получилось, но через жопу)):(alko:
     
  8. cruide

    cruide Писатель

    Регистр.:
    25 июл 2012
    Сообщения:
    8
    Симпатии:
    22
    На последок могу посоветовать пользоваться такой записью для проверки переменных

    PHP:
    $id = (!empty($_GET['id'])) ? $_GET['id'] : '';
    Это даст гарантию для инициализации переменной
     
  9. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    634
    Симпатии:
    1.407
    Что мешает в первых строках файла инициализировать переменную?
    PHP:
    $login '';
     
  10. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.520
    Симпатии:
    1.368
    Вот только не 100% гарантию

    Перейти по ссылке

    Следующие значения воспринимаются как пустые:
    • "" (пустая строка)
    • 0 (целое число)
    • 0.0 (дробное число)
    • "0" (строка)
    ...

    isset может быть лучше для этих целей