Народ, в общем проблема приняла неожиданный оборот! Решение под цитатами.
LIME пишет:
keysi_ подозреваю что ты каждый раз перед проверкой ее устанавливаешь
Нет, конечно. Это же глупо :)
LIME пишет:
(Добавление)
смотри в инструменте разработчика SID
если после рестарта браузера он не изменился значит проблема в настройках
Настройки Apache перелопатил все. Браузеру пофиг.
Stierus пишет:
идентификатор сессии хранится в куке, настрой время жизни сессионной куки как тебе нужно и проблема решится
Тоже уже стал подумывать в этом направлении, как о единственном выходе. Но так как я точно знаю, что кука отвечающая за сессию должна умереть не зависимо от настроек времени жизни cookes я решил идти до конца.
Итак, я полазил в интернетах и хабрах, оказывается много где люди задают такой вопрос, и их либо не понимают и обзывают косорукими, либо вопросы остаются без ответов. На одном из форумов человек предположил решение проблемы (очень замудрённо и на англиском). Попробую сейчас расставить всё точки над i.
Итак, дело исключительно в браузерах семейства Chrome! Они совсем НЕ ОБНОВЛЯЮТ PHPSESSID на всех сайтов, если в настройках браузера стоит галочка: "Продолжать работу с того же места".
Я бы ещё понял касательно открытых, но это относится и к тем сайтам, которые были закрыты пользователем перед закрытием браузера! Подозреваю, также, что галочка "разрешить использовать браузер в фоновом режиме" (по умолчанию включена) работает точно также, а там гляди google ещё что нибудь этакое придумает.
Внимание! Поясню, как эта проблема важна для пользователей сайта. Не убиваемая сессия означает, что галочка в форме авторизации любого сайта "чужой компьютер/не запоминать" (запрет на сохранение куков) из за этой фишки также НЕ СРАБОТАЕТ. А значит, вместо привычного обновления сессии после закрытия браузера, на чужом устройстве - останутся все ваши данные сессии. Поэтому при использовании Хрома всегда нажимайте "выход" чтобы сбросить сессию средствами сайта, а для надёжности, можно ещё удалять за собой данные сессии вручную или вообще использовать режим "инкогнито".
Вот такая вот фича-баг.
Кому не жалко, принимаю "спасибы" за полезное наблюдение.
Учёные доказали что "Человек в принципе не способен решать сложные задачи", а вы ещё и jQuery всё усложняете.
Начните с простого, сделайте маленькую табличку на html и к ней маленький скрипт на чистом JavaScript, который будет делать +1 строчку в таблицу. jQuery добавите только на последнем этапе, так как он упрощает реализацию задачи (кроссбраузерность) и добавляет красявостей, но совершенно не помогает в понимании проблемы.
Касательно самой проблемы, я думаю вам должен помочь метод insertRow() и другие функции для работы с DOM элементами таблицы. Я сам не очень хорошо это помню, вам лучше всего посмотреть про это на javascript ру , там очень хороший справочник. Здесь в основном вопросы по PHP.
Не надо, данные обычно сериализуют перед записью в текстовый файл.
В вашей ситуации, как уже было сказано выше, стоит отказаться от сериализации вовсе. Потому как кроме траты ресурсов на эту операцию вы ни чего не добьётесь.
Сделайте в БД все необходимые поля, цена, товар, количество, покупатель итп.
Из формы такие же поля отправляете (либо создаёте непосредственно перед записью в бд). Обрабатываете их и записываете, текстовые записи обрабатываете mysql_real_escape_string(), числовые intval(). Так будет проще. Потом когда нужно будет организовать поиск или любой другой запрос к этим данные в БД вам будет намного проще чем каждый раз разбирать сериализованные данные.
Кстати, возьмите любой движок магазина и с открытым кодом и посмотрите как там выполняется обработка. Поверьте, когда вы разберётесь как там это реализовано вы многому научитесь и сможете сделать не хуже.
$result=mysql_query('INSERT INTO `user` (`text`) VALUES ("'.$text.'")');
Потому что я не зря взял ваши сериализованные данные в кавычки.Надо учитывать что в Mysql улетает чистый текст а не переменная и поэтому кавычки внутри текста воспринимаются как конструкции sql
И желательно любой текст предварительно обработать функцией mysql_real_escape_string();
И, напишите, ошибку которую возвращает sql, сложно разбираться почему у вас ни чего не работает на основе догадок.
1. Подскажите или ткните где написано о том для чего и как правильно используются символы двойного нижнего подчеркивания в php и вообще в программировании. Почему в одних предопределённых функциях они есть, в других нет, какое значение они имеют в классах и в создаваемых функциях.
Я ни чего не нашёл по форуму и в яндексе, видимо потом, что символы __ не считаются поисковыми словами.
2. (Возможно прояснится после понимания первого вопроса, но всё же)
В статье http://www.php.su/learnphp/phpoo/?php5_2 в разделе "Явное клонирование объекта" автор пишет, что для клонирования используется вызов clone но в примере это слово не используется, за то есть сноска в скобах: который вызывает метод __clone() объекта. Но в примере всего один объект и что куда должно копироваться если в методе используется только функция print мне совсем непонятно. Объясните пожалуйста, а то у меня уже мозги набикрень.
В базе данных имеются две таблицы: db_my_category - категории новостей: id | name | runame | off |
1 | animal | животные | 1 |
2 | politic | политика | 1 |
3 | world | в мире | 1 |
4 | test | test | 0 | db_my_news - собственно сами новости id | title | text | category | date |
1 | news1 | sdfds | 1 | 05/05/2005 |
2 | news2 | czdx | 1 | 05/05/2005 |
3 | news3 | zxcz | 3 | 05/05/2005 |
Задача: получить список категорий и количество новостей в этих категориях, типа такого: id | name | runame | count |
1 | animal | животные | 2 |
2 | politic | политика | 0 |
3 | world | в мире | 1 |
Надеялся что заработает что нибудь такое, но синтаксис не позволяет, куча лагов:
SELECT category.id AS id, category.name AS name, category.runame AS runame, COUNT(publ.*)AS count
FROM db_my_category AS category, db_my_news AS publ
WHERE category.off <>'0'AND publ.category = category.id
ORDERBY id ASC
ps Важное условие: все необходимо вместить в один запрос, для уменьшения нагрузки на сервер.
________________________________ ________________________________ __________ (Добавление) Всем спасибо. Решение найдено.
SELECT category.id AS catid, category.name AS name, category.runame AS runame, COUNT(publ.*)AS count,(SELECT COUNT(*)AS count FROM db_my_news AS publ WHERE publ.category=catid)AS count
FROM db_my_category AS category
WHERE category.off <>'0'
ORDERBY id ASC
Как всегда, все было проще чем казалось. Хотя все же получилось очень громиоздко.
Может у кого есть еще идеи?
Самый лучший этап для новичка, это вышел в интернет, нашел мастера, сказал что хочешь, и получил результат. А все остальное только если нет денег или если есть время чтобы эти заниматься.
то есть мне придется при отправке данных из формы вручную присваивать полям переменные?
Ну регистр глобалс не просто так выключили, он представляет собой дыру в безопасности.
Я когда прекратил ими пользоваться взял за правила использовать переменные типа $_POST['var'] . Но вообще лучше задачу в студию, и вместе придумаем как лучше.
Как ни странно, но лучшая книжка на эту тему - это стандартный справочник по PHP и конкретная задача. Еще не плохо под рукой иметь какой нибудь сборник простых готовых скриптов, на первое время, чтобы контролировать себя, посмотрев как это делают другие.
Из книжек, есть неплохая книга - Лаура Томпсон и Люк Веллинг PHP и MySQL. Но все же самая лучшее - это собственный опыт и, повторюсь, справочник под рукой.