Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: На реальном сервере не передается переменная сессии
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008
Помог: 0 раз(а)
Господа, странная ситуация. Приведу код. На Денвере он работает. На реальном сервере переменная $_Session["x"] устанавливается равной первому значению в базе данных то есть тому первому которое мы выбираем и не меняется, даже если мы само это значение из базы удаляем.
<?session_start(); //Файл изменения новостей
if ($_SESSION["f"]!=="12sadasd12aad11asqsq" ) //Проверка авторизован ли пользователь
{
echo "<font color=#ff0000><b>Доступ до страницы запрещен, пожалуйста авторизуйтесь</b></font><br>";
echo "<a href=authorizeform.php>Перейти на страницу авторизации</a>";
}
else
{
include("config.php"); // Подключение к базе данных
echo "<font color=#000080><b>Изменить новость</b></font>";
$x=$_POST["mod"] ; // Считывание значения скрытого поля: оно используется для определения какая кнопка нажата
if($x==1) //Если нажата кнопка 1. То тогда идет выбор новости по номеру и помещение выбранной новости в текстовую эрию
{
$num=trim($_POST["num"]);
$_SESSION["x"]=$num; // ВАЖНО. После нажатия кнопки 2 переменная $num, означающая номер новости обнуляется, поэтому она записывается в сессию и затем используется
$qur="select news from news where id='$num'"; // Выбирается новость с номером введенным в поле номера выбора новости которую нужно изменить
$ent=mysql_query($qur,$cn);
$new=mysql_fetch_array($ent); // Считывается значение новости именно элемент массива этой переменной является значением текстовой эрии
}
elseif ($x==2)
{
$num2=$_SESSION["x"]; // считывается значение переменной сессии, означающей номер новости
echo "$num2";
$cho=trim($_POST["cho"]);
$entup="UPDATE news SET news='$cho' where ID=$num2"; // Обновляется новость с выбранным значением
mysql_query($entup,$cn);
}
<input type="hidden" name="mod" value="2"> <br>
<input type="submit" value="Изменить новость"> <br>
<a href="main.php">Перейти на главную страницу админ панели</a>
</form>
<? include("shownews.php");?>
pifon1989
Отправлено: 24 Августа, 2008 - 19:07:24
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
leo пишет:
Господа, странная ситуация. Приведу код. На Денвере он работает. На реальном сервере переменная $_Session["x"] устанавливается равной первому значению в базе данных то есть тому первому которое мы выбираем и не меняется, даже если мы само это значение из базы удаляем.
А чего требуется то?
Чесслово, выглядит так, словно ты просто типо по приколу написал, что б все с серьёзными лицами посмотрели и призадумались о судьбе php-кодерства в условиях боёв в пересечённой местности html форм ;)
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
UA.ProG
Отправлено: 24 Августа, 2008 - 19:09:23
Частый гость
Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008 Откуда: Николаев,Украина
Помог: 0 раз(а)
[+]
у тебя код немного трудно понимаеться...И где у тебя x применяеться чот не вижу выложу весь код
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008
Помог: 0 раз(а)
Этот код делает следующее. Мы вводим значение в тектстовое поле. Нажимаем кнопку. После нажатия текст новости с данным номером которое мы указали в текстовом поле, помещается в текстовую эрию. Мы редактируем этот код, и затем нажимаем кнопку и он обновляет запись в таблице. Переменная сессии $_SESSION["x"] хранит номер введенный в текстовое поле. После нажатия первой кнопки она обнуляется, поэтому она записана в сессию. Но вопрос решился - просто переименованием индекса ["x"], в чем было дело, понять все равно не могу. Всем спасибо. Но если кто-то захочет прокомментировать это, буду признателен.
pifon1989
Отправлено: 24 Августа, 2008 - 20:55:27
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
Я не пойму, ты хочешь просто переменную $_SESSION["x"] удалить, чтобы использовать потом?
Т.е. убрать после добавления новости (она выполнила задачу для текущего момента, и нужна чтобы её использовать поздже, но уже с другим значением)?
И ты её юзаешь потом, спустя некоторое время, а оно, сабака, всё ещё прежнее?
Так, нет?
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
leo
Отправлено: 24 Августа, 2008 - 21:03:49
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008
Помог: 0 раз(а)
Нет. Здесь идея просто в том.Что в этой переменной хранится значение которое помещается в текстовое поле. Когда мы нажимаем первую кнопку то тогда сама эта переменная $num - обнуляет свое значение. Но нам нужно это значение. Поэтому оно записывается в пременную сессии и дальше считывается уже из нее. Оно считывается строкой: $num2=$_SESSION["x"]; это $num2 это то что было введено в текстовое поле. Затем именно это значение используется при выполнении запроса на обновление - $entup="UPDATE news SET news='$cho' where ID=$num2"; Где '$cho это то что мы ввели в текстовую эрию..а $num2 это то что мы ввели в текстовое поле. Сессия просто передает значение этой переменной из одного фрагмента скрипта в другой.
pifon1989
Отправлено: 24 Августа, 2008 - 21:29:20
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
leo пишет:
Нет. Здесь идея просто в том.Что в этой переменной хранится значение которое помещается в текстовое поле. Когда мы нажимаем первую кнопку то тогда сама эта переменная $num - обнуляет свое значение. Но нам нужно это значение. Поэтому оно записывается в пременную сессии и дальше считывается уже из нее. Оно считывается строкой: $num2=$_SESSION["x"]; это $num2 это то что было введено в текстовое поле. Затем именно это значение используется при выполнении запроса на обновление - $entup="UPDATE news SET news='$cho' where ID=$num2"; Где '$cho это то что мы ввели в текстовую эрию..а $num2 это то что мы ввели в текстовое поле. Сессия просто передает значение этой переменной из одного фрагмента скрипта в другой.
Блин... тебя это радует?
Я хорошо понял принцип работы. В чём проблема то? Что не работает? Проблема может быть в чём угодно, даже в том, что у тебя MySQL запрос малость кривоват и переменные так внутри запроса не пишут вообще то.
Всё, что я могу понять из проблемы (а не из работы скрипта как таковой), у тебя возникает конфликт между элементом суперглобального массива $_SESSION и переменной $x, которые по сути вообще то одно и то же.
Вызов $_SESSION["x"] будет приравнян к вызову $x. Что
Смотри: у тебя задана переменная $x, и в то же время ты пытаешься той же самой меременной командовать, давая ей же, но уже как сессии, другое значение!
Видишь? Тебе для работы скрипта нужна $x, которая указывает по какой ветке алгоритма идти, но ты её взял, и затёр. Я угадал?
P.S.: Ты доволен теперь? Посмотри: ты запутал меня, ты запутал код. Тебе не стыдно?
P.P.S.: В следующий раз приводи ещё форму, в которую это всё вводили, иначе труба опять будет.
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
leo
Отправлено: 24 Августа, 2008 - 21:38:46
Новичок
Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008
Помог: 0 раз(а)
Точно спасибо тебе огромное. Видимо именно поэтому и помогло переименование в $_SESSION["x"] индекса х. Не понятно только почему это работало на локальном сервере. Но это не так важно. Спасибо. теперь ясно почему он давал такое значение. Ты написал что так внутри запроса не пишут, а как правильно {'$x'} так? или как то иначе. Ты уж прости что спрашиваю, но ты сам сказал, а я уж лучше посмотрю и дальше буду писать как надо.
pifon1989
Отправлено: 24 Августа, 2008 - 21:52:16
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.