Скажите пожалуйста, хочу сделать обработка с помощью внешних переменных ,таким образом : Код (PHP): header("Location: table.php?name=$userdata['user_login']"); но выдает ошибки : Код (Text): 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 как исправить?все перепробовала уже.
Код (PHP): header("Location: table.php?name=".$userdata['user_login']); По этому я против привычки писать внутри двойных кавычек переменные. Потом начинаются "странные ошибки". пишите через конкатенатор, все будет хорошо.
Ничего не мешает писать так Код (PHP): header("Location: table.php?name={$userdata['user_login']}"); и еще. Урлы лучше от корня указывать.
Всегда переменные внутри двойных кавычек пиши в фигурных скобках, т.к. без них воспринимается только обыкновенные переменные, а вот элементы массива, объекты класса нет, что бы они воспринимались надо писать в фигурных скобках. Примерно как то так: Код (Text): echo "$val"; // будет работать echo "$array[5]"; // НЕ будет работать echo "$obj->data"; // НЕ будет работать // ВСЕ будет работать: echo "{$val}"; echo "{$array[5]}"; echo "{$obj->data}";
Спасибо всем большое!всё исправила.но появилась новая ошибка. Останавливается на моменте "что то не получилось" Новичок в этом плане.или с организацией чтото. Это скрипт проверки авторизации. Код (Text): <? // Скрипт проверки # Соединямся с БД mysql_connect("localhost", "root", ""); mysql_select_db("jornal"); if (isset($_COOKIE['id']) and isset($_COOKIE['hash'])) { $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1"); $userdata = mysql_fetch_assoc($query); if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']) or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0"))) { setcookie("id", "", time() - 3600*24*30*12, "/"); setcookie("hash", "", time() - 3600*24*30*12, "/"); print "Хм, что-то не получилось"; } else { header("Location: table.php?name={$userdata['user_login']}"); } } else { print "Включите куки"; } ?>
Ну так у тебя дошло до места print "Хм, что-то не получилось"; и остановилось потому как дальше ничего не написано. у тебя сейчас: Код (PHP): IF { IF { print "Хм, что-то не получилось"; //остановка так как дальше пусто } ELSE{ header("Location: table.php?name={$userdata['user_login']}"); } } ELSE{ print "Включите куки"; }
Извините, можно поподробней?немного не пойму. Ведь я изначально регистрируюсь,ввожу данные в форму авторизациии..А как тогда сделать чтобы он перебрасывал как раз туда Код (Text): header("Location: table.php?name={$userdata['user_login']}") ???
Ну в место или после записи о том что не получилось: Код (PHP): IF { IF {//вот это условие print "Хм, что-то не получилось"; //остановка так как дальше пусто header("Location: table.php?name={$userdata['user_login']}"); } ELSE{//В данном случае выполняется если условие выше не срабатывает header("Location: table.php?name={$userdata['user_login']}"); } } ELSE{ print "Включите куки"; }
Пишу вот так Код (Text): <? // Скрипт проверки # Соединямся с БД mysql_connect("localhost", "root", ""); mysql_select_db("jornal"); if (isset($_COOKIE['id']) and isset($_COOKIE['hash'])) { $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1"); $userdata = mysql_fetch_assoc($query); if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']) or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0"))) { setcookie("id", "", time() - 3600*24*30*12, "/"); setcookie("hash", "", time() - 3600*24*30*12, "/"); print "Хм, что-то не получилось"; //остановка так как дальше пусто header("Location: table.php?name={$userdata['user_login']}"); } ELSE{//В данном случае выполняется если условие выше не срабатывает header("Location: table.php?name={$userdata['user_login']}"); } } ELSE{ print "Включите куки"; } ?> а выводит вот что Хм, что-то не получилось 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
строка 32 это header("Location: table.php?name={$userdata['user_login']}");? возможно дело в том что у вас table.php а не check.php но честно говоря я не сильно разбираюсь в этих вопросах, что бы не видя структуры сказать где ошибка. Но для начала надо посмотреть номер строки в которой ошибка.
Есть древняя легенда, что если поставить в начале скрипта ob_start(); все проблемы касательно "Cannot modify header information - headers already sent by" уйдут... Мудрость в ней кроется.
Спасибо всем.Помогли.Проблему вроде как решила . Код (Text): $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1"); $userdata = mysql_fetch_assoc($query); if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']) or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] === "0"))) { //остановка так как дальше пусто header("Location: table.php?name={$userdata['user_login']}"); } ELSE{//В данном случае выполняется если условие выше не срабатывает setcookie("id", "", time() - 3600*24*30*12, "/"); setcookie("hash", "", time() - 3600*24*30*12, "/"); print "Хм, что-то не получилось"; } } ELSE{ print "Включите куки"; } ?> Переходит на table.php и выводит "Привет,Пользователь!"
А теперь давай подумаем, что будет, если руками поправить в ссылке имя пользователя, после чего нажать enter?
header("Location: table.php?name={$userdata['user_login']}"); Дает нам в браузере ссылку вида Код (Text): http://site.my/table.php?name=Анастасия333 внимание вопрос, что будет, если я напишу в строке Код (Text): http://site.my/table.php?name=Fell-x27 И жмакну enter, чтобы запрос ушел на сервер? Если в адресную строку пишут параметр, значит, где-то он будет использоваться. Подумайте, не делаете ли вы дыру в безопасности, позволяя пользователю самому решать, чей логин должна видеть система? Я как-то отдыхал в отеле, где система авторизации отрабатывала проверки в клиентской части через хитровыбоенный JS. Но, при этом, для связности страниц они использовали гет-параметры, на основе которых этот JS генерировался. Не знаю, у кого они заказали это чудо инженерной мысли, но постановка кавычек в нужном месте - и уже я управляю страничкой и их механизмом авторизации, а не хитровыбоенный скрипт. Мораль - GET должен содержать лишь "публичные" данные, чтобы можно было обмениваться параметрозависимыми ссылками. Например, номер треда и сообщения форума. Если решили что-то вытащить в GET, то трижды продумайте все способы, через которые это смогут повернуть против вас.
Подстебал В свою защиту - за окном шел тропический ливень. На океан в такую погоду не пускают, у бассейнов не уютно, а сидеть в баре не вижу смысла.
А зачем ты это туда перенесла? Логичнее было бы: Код (PHP): ELSE{ print "Ваш логин и пароль не совпадают";//или ридирект обратно на форму с авторизацией }
Для чего там эти куки? Ты бы хоть код её посмотрел. Если у неё данные не сошлись зачем пользователю куки с не верными параметрами?
Я-то как раз посмотрел и говорю, что она дропает куки, а не выставляет их. Твое незнание матчасти не делает ее код ошибочным. Выставление кук с пустым значением или с отрицательной датой сигналит браузеру, что надо их убить.
Да я уже на счёт безопасности не заморачиваюсь)Знаю, коряво)Но пока учение сложно дается. Дабы выбрала тебя "электронный журнал преподавателя" а как его реализовать,пока трудно доходит.(