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 :: На реальном сервере не передается переменная сессии

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: На денвере код с сессией работает, на реальном сервере нет.
leo
Отправлено: 24 Августа, 2008 - 18:01:45
Post Id


Новичок


Покинул форум
Сообщений всего: 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);
}

}
?>
<form action="cheng.php" method="post">
<input type="text" name="num" size="40" maxlength="256"> <br>
<input type="hidden" name="mod" value="1">
<input type="submit" value="Выберите номер новости"> <br>

</form>

<form action="cheng.php" method="post">
<textarea name="cho" cols="30" rows="5">
<?echo"$new[news]";?>
</textarea>

<input type="hidden" name="mod" value="2"> <br>
<input type="submit" value="Изменить новость"> <br>
<a href="main.php">Перейти на главную страницу админ панели</a>
</form>
<? include("shownews.php");?>
 
 Top
pifon1989
Отправлено: 24 Августа, 2008 - 19:07:24
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




leo пишет:
Господа, странная ситуация. Приведу код. На Денвере он работает. На реальном сервере переменная $_Session["x"] устанавливается равной первому значению в базе данных то есть тому первому которое мы выбираем и не меняется, даже если мы само это значение из базы удаляем.

А чего требуется то? Улыбка
Чесслово, выглядит так, словно ты просто типо по приколу написал, что б все с серьёзными лицами посмотрели и призадумались о судьбе php-кодерства в условиях боёв в пересечённой местности html форм ;)


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
UA.ProG
Отправлено: 24 Августа, 2008 - 19:09:23
Post Id



Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Июль 2008  
Откуда: Николаев,Украина


Помог: 0 раз(а)

[+]


у тебя код немного трудно понимаеться...И где у тебя x применяеться чот не вижу выложу весь код


-----
--------------MoZG--------------
---------Google спасёт мир------
 
 Top
leo
Отправлено: 24 Августа, 2008 - 19:17:53
Post Id


Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Этот код делает следующее. Мы вводим значение в тектстовое поле. Нажимаем кнопку. После нажатия текст новости с данным номером которое мы указали в текстовом поле, помещается в текстовую эрию. Мы редактируем этот код, и затем нажимаем кнопку и он обновляет запись в таблице. Переменная сессии $_SESSION["x"] хранит номер введенный в текстовое поле. После нажатия первой кнопки она обнуляется, поэтому она записана в сессию. Но вопрос решился - просто переименованием индекса ["x"], в чем было дело, понять все равно не могу. Всем спасибо. Но если кто-то захочет прокомментировать это, буду признателен.
 
 Top
pifon1989
Отправлено: 24 Августа, 2008 - 20:55:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Я не пойму, ты хочешь просто переменную $_SESSION["x"] удалить, чтобы использовать потом?
Т.е. убрать после добавления новости (она выполнила задачу для текущего момента, и нужна чтобы её использовать поздже, но уже с другим значением)?
И ты её юзаешь потом, спустя некоторое время, а оно, сабака, всё ещё прежнее?
Так, нет? Улыбка

(Отредактировано автором: 24 Августа, 2008 - 20:56:03)



-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
leo
Отправлено: 24 Августа, 2008 - 21:03:49
Post Id


Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Нет. Здесь идея просто в том.Что в этой переменной хранится значение которое помещается в текстовое поле. Когда мы нажимаем первую кнопку то тогда сама эта переменная $num - обнуляет свое значение. Но нам нужно это значение. Поэтому оно записывается в пременную сессии и дальше считывается уже из нее. Оно считывается строкой: $num2=$_SESSION["x"]; это $num2 это то что было введено в текстовое поле. Затем именно это значение используется при выполнении запроса на обновление - $entup="UPDATE news SET news='$cho' where ID=$num2"; Где '$cho это то что мы ввели в текстовую эрию..а $num2 это то что мы ввели в текстовое поле. Сессия просто передает значение этой переменной из одного фрагмента скрипта в другой.
 
 Top
pifon1989
Отправлено: 24 Августа, 2008 - 21:29:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 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. Что

что

одно и то же.
Но, поскольку $_SESSION["x"] менять себя никому не позволит без присваивания вида
возникает конфликт.

Смотри: у тебя задана переменная $x, и в то же время ты пытаешься той же самой меременной командовать, давая ей же, но уже как сессии, другое значение!

Видишь? Тебе для работы скрипта нужна $x, которая указывает по какой ветке алгоритма идти, но ты её взял, и затёр. Я угадал?
P.S.: Ты доволен теперь? Посмотри: ты запутал меня, ты запутал код. Тебе не стыдно? Голливудская улыбка
P.P.S.: В следующий раз приводи ещё форму, в которую это всё вводили, иначе труба опять будет. Улыбка


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
leo
Отправлено: 24 Августа, 2008 - 21:38:46
Post Id


Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Точно спасибо тебе огромное. Видимо именно поэтому и помогло переименование в $_SESSION["x"] индекса х. Не понятно только почему это работало на локальном сервере. Но это не так важно. Спасибо. теперь ясно почему он давал такое значение. Ты написал что так внутри запроса не пишут, а как правильно {'$x'} так? или как то иначе. Ты уж прости что спрашиваю, но ты сам сказал, а я уж лучше посмотрю и дальше буду писать как надо.
 
 Top
pifon1989
Отправлено: 24 Августа, 2008 - 21:52:16
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Смотри пример. Либо так:
PHP:
скопировать код в буфер обмена
  1. <?PHP $entup="UPDATE `news` SET `news` = '".$cho."' WHERE `ID` = '".$num2."'"; ?>

либо так:
PHP:
скопировать код в буфер обмена
  1. <?PHP $entup="UPDATE `news` SET `news` = '{$cho}' WHERE `ID` = '{$num2}'"; ?>

В результате интерпретации получится запись вида
PHP:
скопировать код в буфер обмена
  1. UPDATE `news` SET `news` = 'значение_$cho' WHERE `ID` = 'значение_$num2'


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
leo
Отправлено: 24 Августа, 2008 - 21:56:02
Post Id


Новичок


Покинул форум
Сообщений всего: 45
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Спасибо большое.
 
 Top
pifon1989
Отправлено: 24 Августа, 2008 - 21:57:34
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Да не за что. Улыбка

(Отредактировано автором: 24 Августа, 2008 - 21:58:24)



-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB