Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 2

Cookie обнуляется при переходе из функции в функцию

09.04.2015, 18:28. Показов 1715. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Было прочитано много похожих тем, но ответ все равно найден не был.
У меня один файл index.php, в котором проходит авторизация, регистрация, редактирование данных пользователя.
верю, что скорее всего это не правильно, но все работает кроме двух моментов:
1. При переходе к функции update_reader_form форма заполнена через раз (не могу понять почему, но подозреваю cookie)
2. Даже если она открылась как надо заполненной и я изменяю в ней данные, то после перехода к сохранению update_reader_db (обновлению в бд) результата нет. И cookie на результирующей странице пустые. Помогите
Пишу в форум первый раз, так что не судите строго

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?php
setcookie("login",$_POST['us_login'],time() +1800);
setcookie("password",$_POST['us_passwd'],time() + 1800);
 
print '<head>
    <meta http-equiv="Content-Type" content="text/html; 
    charset=windows-1251" /><title>Вход на сайт</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>';
 
switch (@$_POST['enter'])
{
    case "auth_db": 
        auth_db(@$_POST['us_login'], @$_POST['us_passwd']);
    break;
    case "reg_form": 
        reg_form();
    break;
    case "reg_db": 
        reg_db(@$_POST['fio'], @$_POST['us_login'], @$_POST['us_passwd']);
    break;
    case "books": 
    {
        connect ('admin_db','1234');
        include_once ('books.php');
    }
    break;
    case "update_reader_form":
        update_reader_form(@$_COOKIE["login"]);
    break;
    case "update_reader_db":
        update_reader_db(@$_COOKIE["login"], @$_POST['fio'], @$_POST['adr'], 
        @$_POST['bday'], @$_POST['htel'], @$_POST['mtel']);
    break;
    default: 
        auth_form();
    break;
}
 
function connect($con_login, $con_passwd)
{
    $server = 'localhost'; $db = 'smiranalib';
    $dbcon = mysql_connect($server, $con_login, $con_passwd) or die 
    ('Соединение с сервером не выполнено. Ошибка: '.mysql_error()); 
    $seldb = mysql_select_db($db) or die 
    ('Подключение к базе данных не выполнено. Ошибка: '.mysql_error());
}
 
function auth_form()
{
    print '<h2> Авторизация на сайте </h2>
    <form method = post align = center>
    <label for = "us_login"> Логин: </label>
    <input type = "text" name = "us_login" /><br>
    <label for = "us_passwd"> Пароль: </label>
    <input type = "password" name = "us_passwd" /><br>
    <br><input type = "hidden" name = "enter" value = "auth_db">
    <input type = image src="img/login.png" title = "Вход">
    </form>
    <form method = post align = center><br>
    <input type = "hidden" name = "enter" value = "reg_form">
    <input type = image src="img/reg.png" title = "Регистрация">
    </form>';
}
 
function auth_db($us_login, $us_passwd)
{
    print_r($_COOKIE);
    print 'Пользователь: '.$us_login;
    if ($us_login == 'admin')
        connect('admin_db','1234');
    else connect('user_db','1234');
    $us_passwd = md5 ($us_passwd);
    $selectr = mysql_query("select * from reader 
    where login = '$us_login' and passwd = '$us_passwd'");
    if (mysql_num_rows($selectr) == 1)
    {
        print '<h3>Авторизация пользователя '.$us_login.' прошла успешно.</h3>
        <form method = post>
        <input type = "hidden" name = "enter" value = "books">
        <input type = image src="img/books.png" title = "Перейти к перечню книг">
        </form>
        <form method = post>
        <input type = "hidden" name = "enter" value = "update_reader_form">
        <input type = image src="img/update.png" title = "Редактировать данные пользователя">
        </form>';   
    }
    else print '<h3>Логин и/или пароль введены неверно!</h3><form method = post>
        <input type = image src="img/return.png" title = "Вернуться"
        onclick="history.back()"></form>';
}
 
function reg_form()
{
    print '<h2> Регистрация читателя </h2>
    <form method = post align = center>
    <label for = "fio"> ФИО: * </label>
    <input type = "text" name = "fio" /><br>
    <label for = "us_login"> Логин: * </label>
    <input type = "text" name = "us_login" /><br>
    <label for = "us_passwd"> Пароль: * </label>
    <input type = "password" name = "us_passwd" /><br>
    <input type = "hidden" name = "enter" value = "reg_db">
    <input type = image src="img/ready.png" title = "Добавить">
    </form>
    <form method = post align = center>
    <input type = image src="img/return.png" title = "Вернуться"
    onclick="history.back()"></form>';
}
 
function reg_db($fio, $us_login, $us_passwd)
{
    connect('user_db','1234');
    $selectr = mysql_query("select * from reader where login = '$us_login'");
    if (mysql_num_rows($selectr) <> 0)
        print '<h3>Логин '.$us_login.' занят</h3><form method = post>
        <input type = image src="img/return.png" title = "Вернуться"
        onclick="history.back()"></form>';
    else 
    {
        $us_passwd = md5($us_passwd);
        $insertr = @mysql_query ("insert into reader (Name_reader, login, 
        passwd) values ('$fio', '$us_login', '$us_passwd')");
        print '<h3>Читатель '.$fio.' успешно зарегистрирован</h3>
        <form method = post><input type = image src="img/return.png" 
        title = "Вернуться на страницу авторизации"></form>';
    }
}
 
function update_reader_form($us_login)
{
    print_r($_COOKIE);
    print 'Пользователь: '.$us_login;
    connect ('admin_db','1234');
    $selectr = @mysql_query("select * from reader where login = '$us_login'");
    while ($fetch_array = mysql_fetch_array($selectr))
    {
        $fio = $fetch_array[1]; $adr = $fetch_array[2];
        $bday = $fetch_array[3]; $htel = $fetch_array[4];
        $mtel = $fetch_array[5]; 
    }
    
    print '<h2> Редактирование пользователя </h2>
    <form method = post align = center>
        <label for = "fio"> ФИО: </label>
        <input type = "text" name = "fio" value = "'.$fio.'" />
        <br><label for = "adr"> Адрес: </label>
        <input type = "text" name = "adr" value = "'.$adr.'" />
        <br><label for = "bday"> Дата рождения: </label>
        <input type = "date" name = "bday" value = "'.$bday.'" />
        <br><label for = "htel"> Дом.тел.: </label>
        <input type = "tel" name = "htel" value = "'.$htel.'" />
        <br><label for = "mtel"> Моб.тел.: </label>
        <input type = "tel" name = "mtel" value = "'.$mtel.'" />
        <br><input type = "hidden" name = "enter" value = "update_reader_db">
        <input type = image src="img/ready.png" title = "Обновить">
    </form>';
}
 
function update_reader_db($us_login, $fio, $adr, $bday, $htel, $mtel)
{
    print_r($_COOKIE);
    print 'Пользователь: '.$us_login;
    connect ('admin_db','1234');
    $updater = @mysql_query ("update reader set Name_reader = '$fio',
    Adress = '$adr', Birth_day = '$bday', Phon_home = '$htel', 
    Phon_mobil = '$mtel' where login = '".$us_login."'");
    echo ($updater == 0 ? "<br>Данные пользователя не изменены!!!" : 
        "<br>Данные пользователя изменены!!!");
}
 
    print '</body>';
?>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.04.2015, 18:28
Ответы с готовыми решениями:

При переходе на другую страницу обнуляется сессия
Уже трейтий день не могу решить проблему. По форуму поискал, не нашел. Суть проблемы: Через раз сессия обнулялась. Хочу...

При выходе из функции счетчик обнуляется
Добрый день всем. Есть такой кусок кода: int count1=1; int count2=10; ForwardLabeling_0(imageBin, imageLabel, k); ...

Вылетает примерно через 30 минут (при переходе в нет, в стим, или вообще простотак но при переходе)
Здравствуйте у меня windows вылетает на синий экран, внизу появляется отсчет до 100 потом он сам перезагружается! Повторяется раза три в...

4
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
09.04.2015, 18:52
smiran, так у Вас cookie каждый раз устанавливаются при переходе на страницу. И тем самым значения их сбрасываются.
В Вашем случае нужно отправлять cookie один раз, при авторизации.
1
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
09.04.2015, 18:54
Лучший ответ Сообщение было отмечено smiran как решение

Решение

Цитата Сообщение от smiran Посмотреть сообщение
PHP
1
2
3
<?php
setcookie("login",$_POST['us_login'],time() +1800);
setcookie("password",$_POST['us_passwd'],time() + 1800);
Никогда так не делайте. Работать с переменными суперглобального массива $_POST (как и со всеми другими) можно только после того, как убедитесь что они существуют. Правильный вариант примерно такой:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
// проверяем отправлялась ли форма, а именно
// определены ли переменные $_POST['us_login'] и $_POST['us_passwd')
if (isset ($_POST['us_login'], $_POST['us_passwd'))
{
    // если определены то работаем с ними
    setcookie("login",$_POST['us_login'],time() +1800);
    setcookie("password",$_POST['us_passwd'],time() + 1800);
    // и так далее
}
// тут делаем все остальное, вывод формы и прочее.
У Вас же функция setcookie работает всегда, даже если не отправлялась форма. То есть при обновлении страницы в куки записываются пустые значения. А вообще включите отображение ошибок PHP, тогда будете сами видеть эти ошибки...
2
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
09.04.2015, 18:57
И, кстати, пароль не нужно отправлять с cookies, тем более в открытом виде - это небезопасно.
1
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 2
09.04.2015, 19:00  [ТС]
Спасибо огромное! Помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.04.2015, 19:00
Помогаю со студенческими работами здесь

Программа виснет при переходе в функцию function
#include &lt;iostream&gt; using namespace std; void function(char * string) { while(*string) { cout&lt;&lt;*string; ...

При переходе из метода в главную функцию теряется информация
Задача: описать класс &quot;безопасный массив целых чисел&quot;. Все бы хорошо, но при переходе из перегруженных операторов + и * возникают проблемы:...

Ошибка при переходе в функцию освобождения памяти из под списка
При переходе в функцию Clear вылетает с сообщением что куча была повреждена. Какая строка ее повреждает? Неужели 52? #include...

Как при переходе по ссылке вида: mysite.ru/#link вызвать JavaScript функцию?
Пишу сайт с диалоговыми окнами на ajax. (При клике по ссылке, открывается окно). Все бы ничего, но вот в адресной строке всегда остается...

Выполнение функции при переходе с определённой формы
Есть файл login.php (приведён ниже) и processing.php. В файле processing.php описаны все функции. Необходимо, чтоб функция для обработки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru