За последние 24 часа нас посетили 17832 программиста и 1681 робот. Сейчас ищут 900 программистов ...

Переменные php

Тема в разделе "PHP и базы данных", создана пользователем Анастасия333, 7 май 2014.

  1. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    Скажите пожалуйста, хочу сделать обработка с помощью внешних переменных ,таким образом :
    Код (PHP):
    1. header("Location: table.php?name=$userdata['user_login']"); 
    но выдает ошибки :
    Код (Text):
    1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in S:\home\localhost\www\primer\check.php on line 3
    как исправить?все перепробовала уже.
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Код (PHP):
    1. header("Location: table.php?name=".$userdata['user_login']); 
    По этому я против привычки писать внутри двойных кавычек переменные. Потом начинаются "странные ошибки". пишите через конкатенатор, все будет хорошо.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ничего не мешает писать так
    Код (PHP):
    1. header("Location: table.php?name={$userdata['user_login']}"); 
    и еще. Урлы лучше от корня указывать.
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Всегда переменные внутри двойных кавычек пиши в фигурных скобках, т.к. без них воспринимается только обыкновенные переменные, а вот элементы массива, объекты класса нет, что бы они воспринимались надо писать в фигурных скобках.

    Примерно как то так:
    Код (Text):
    1.  
    2. echo "$val"; // будет работать
    3. echo "$array[5]"; // НЕ будет работать
    4. echo "$obj->data"; // НЕ будет работать
    5.  
    6. // ВСЕ будет работать:
    7. echo "{$val}";
    8. echo "{$array[5]}";
    9. echo "{$obj->data}";
     
  5. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    Спасибо всем большое!всё исправила.но появилась новая ошибка. Останавливается на моменте "что то не получилось" Новичок в этом плане.или с организацией чтото.
    Это скрипт проверки авторизации.
    Код (Text):
    1.  
    2. <?
    3.  
    4. // Скрипт проверки
    5.  
    6.  
    7. # Соединямся с БД
    8.  
    9. mysql_connect("localhost", "root", "");
    10.  
    11. mysql_select_db("jornal");
    12.  
    13.  
    14. if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
    15.  
    16. {  
    17.  
    18.     $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    19.  
    20.     $userdata = mysql_fetch_assoc($query);
    21.  
    22.  
    23.     if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
    24.  or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0")))
    25.  
    26.     {
    27.  
    28.         setcookie("id", "", time() - 3600*24*30*12, "/");
    29.  
    30.         setcookie("hash", "", time() - 3600*24*30*12, "/");
    31.  
    32.         print "Хм, что-то не получилось";
    33.  
    34.     }
    35.  
    36.     else
    37.  
    38.     {
    39.  
    40.         header("Location: table.php?name={$userdata['user_login']}");
    41.  
    42.     }
    43.  
    44. }
    45.  
    46. else
    47.  
    48. {
    49.  
    50.     print "Включите куки";
    51.  
    52. }
    53.  
    54. ?>
     
  6. Ke1eth

    Ke1eth Активный пользователь

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    А потому, что тут все и останаваливается
     
  7. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Ну так у тебя дошло до места print "Хм, что-то не получилось"; и остановилось потому как дальше ничего не написано.
    у тебя сейчас:
    Код (PHP):
    1. IF {
    2.     IF {
    3.         print "Хм, что-то не получилось"; //остановка так как дальше пусто
    4.     }
    5.     ELSE{
    6.         header("Location: table.php?name={$userdata['user_login']}");
    7.     }
    8. }
    9. ELSE{
    10.     print "Включите куки";
    11. }
     
  8. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    Извините, можно поподробней?немного не пойму. Ведь я изначально регистрируюсь,ввожу данные в форму авторизациии..А как тогда сделать чтобы он перебрасывал как раз туда
    Код (Text):
    1. header("Location: table.php?name={$userdata['user_login']}")
    ???
     
  9. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Ну в место или после записи о том что не получилось:
    Код (PHP):
    1. IF {
    2.     IF {//вот это условие
    3.         print "Хм, что-то не получилось"; //остановка так как дальше пусто
    4.         header("Location: table.php?name={$userdata['user_login']}");
    5.     }
    6.     ELSE{//В данном случае выполняется если условие выше не срабатывает
    7.         header("Location: table.php?name={$userdata['user_login']}");
    8.     }
    9. }
    10. ELSE{
    11.     print "Включите куки";
    12. }
     
  10. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    Пишу вот так

    Код (Text):
    1. <?
    2.  
    3. // Скрипт проверки
    4.  
    5.  
    6. # Соединямся с БД
    7.  
    8. mysql_connect("localhost", "root", "");
    9.  
    10. mysql_select_db("jornal");
    11.  
    12.  
    13. if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
    14.  
    15. {  
    16.  
    17.     $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    18.  
    19.     $userdata = mysql_fetch_assoc($query);
    20.  
    21.  
    22.     if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
    23.  or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0")))
    24.  
    25.    
    26.       {
    27.         setcookie("id", "", time() - 3600*24*30*12, "/");
    28.  
    29.         setcookie("hash", "", time() - 3600*24*30*12, "/");
    30.  
    31.    print "Хм, что-то не получилось"; //остановка так как дальше пусто
    32.         header("Location: table.php?name={$userdata['user_login']}");
    33.     }
    34.     ELSE{//В данном случае выполняется если условие выше не срабатывает
    35.         header("Location: table.php?name={$userdata['user_login']}");
    36.     }
    37. }
    38. ELSE{
    39.     print "Включите куки";
    40.     }
    41. ?>

    а выводит вот что
    • Хм, что-то не получилось
      Warning: Cannot modify header information - headers already sent by (output started at S:\home\localhost\www\primer\check.php:31) in S:\home\localhost\www\primer\check.php on line 32
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а вы попробуйте перед header ничего выводить в браузер- и магическим образом все заработает
     
  12. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    строка 32 это header("Location: table.php?name={$userdata['user_login']}");?
    возможно дело в том что у вас table.php а не check.php
    но честно говоря я не сильно разбираюсь в этих вопросах, что бы не видя структуры сказать где ошибка. Но для начала надо посмотреть номер строки в которой ошибка.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Есть древняя легенда, что если поставить в начале скрипта ob_start(); все проблемы касательно "Cannot modify header information - headers already sent by" уйдут... Мудрость в ней кроется.
     
  14. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    Спасибо всем.Помогли.Проблему вроде как решила .
    Код (Text):
    1. $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
    2.  
    3.     $userdata = mysql_fetch_assoc($query);
    4.  
    5.        
    6.      if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']) or
    7.          (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] === "0")))
    8.    
    9.       {
    10.        //остановка так как дальше пусто
    11.         header("Location: table.php?name={$userdata['user_login']}");
    12.     }
    13.     ELSE{//В данном случае выполняется если условие выше не срабатывает
    14.         setcookie("id", "", time() - 3600*24*30*12, "/");
    15.  
    16.         setcookie("hash", "", time() - 3600*24*30*12, "/");
    17.  
    18.         print "Хм, что-то не получилось";
    19.     }
    20. }
    21. ELSE{
    22.     print "Включите куки";
    23.     }
    24. ?>
    Переходит на table.php и выводит "Привет,Пользователь!"
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А теперь давай подумаем, что будет, если руками поправить в ссылке имя пользователя, после чего нажать enter?
     
  16. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    а в каком именно моменте?))он же имя сам считывает,авторизованное.то и выводит. Или вы про что?
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    header("Location: table.php?name={$userdata['user_login']}"); Дает нам в браузере ссылку вида
    Код (Text):
    1. http://site.my/table.php?name=Анастасия333
    внимание вопрос, что будет, если я напишу в строке
    Код (Text):
    1. http://site.my/table.php?name=Fell-x27
    И жмакну enter, чтобы запрос ушел на сервер?
    Если в адресную строку пишут параметр, значит, где-то он будет использоваться. Подумайте, не делаете ли вы дыру в безопасности, позволяя пользователю самому решать, чей логин должна видеть система?

    Я как-то отдыхал в отеле, где система авторизации отрабатывала проверки в клиентской части через хитровыбоенный JS. Но, при этом, для связности страниц они использовали гет-параметры, на основе которых этот JS генерировался. Не знаю, у кого они заказали это чудо инженерной мысли, но постановка кавычек в нужном месте - и уже я управляю страничкой и их механизмом авторизации, а не хитровыбоенный скрипт.

    Мораль - GET должен содержать лишь "публичные" данные, чтобы можно было обмениваться параметрозависимыми ссылками. Например, номер треда и сообщения форума. Если решили что-то вытащить в GET, то трижды продумайте все способы, через которые это смогут повернуть против вас.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А я на пляж пошел. Вот я лох... ¯\_(ツ)_/¯
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Подстебал:)
    В свою защиту - за окном шел тропический ливень. На океан в такую погоду не пускают, у бассейнов не уютно, а сидеть в баре не вижу смысла.
     
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а как же тёлочки?

    [​IMG]
     
  21. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    А зачем ты это туда перенесла?
    Логичнее было бы:
    Код (PHP):
    1. ELSE{
    2. print "Ваш логин и пароль не совпадают";//или ридирект обратно на форму с авторизацией
    3. }
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я с девушкой отдыхаю вдвоем :)
    Куки она дропнула. Все ок.
     
  23. BaranPHP

    BaranPHP Новичок

    С нами с:
    24 янв 2014
    Сообщения:
    356
    Симпатии:
    0
    Для чего там эти куки? Ты бы хоть код её посмотрел. Если у неё данные не сошлись зачем пользователю куки с не верными параметрами?
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Я-то как раз посмотрел и говорю, что она дропает куки, а не выставляет их. Твое незнание матчасти не делает ее код ошибочным.

    Выставление кук с пустым значением или с отрицательной датой сигналит браузеру, что надо их убить.
     
  25. Анастасия333

    Анастасия333 Новичок

    С нами с:
    1 май 2014
    Сообщения:
    36
    Симпатии:
    0
    Да я уже на счёт безопасности не заморачиваюсь)Знаю, коряво)Но пока учение сложно дается. Дабы выбрала тебя "электронный журнал преподавателя" а как его реализовать,пока трудно доходит.(