PHP.SU

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


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

> Описание: Ни одно решение не подошло, может быть у кого-то есть ещё мысли
imya
Отправлено: 12 Сентября, 2012 - 18:37:50
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




Итак, я знаю, что есть тема специальная для этого, я там вкратце отписался, но никто так и не помог либо просто не захотел помогать. Поэтому попытаюсь донести суть проблемы в отдельной теме.
Есть простенький сайт с регистрацией с подтверждением по e-mail, авторизацией, формой обратной связи и личным кабинетом. ИЗ всего вышеперечисленного реализован личный кабинет и авторизация, остальное пока что в процессе. Так вот, суть проблемы: пользователь авторизируется, данные заносятся в сессию,после они отображаются в правом верхнем углу(имя, фамилия, аватар), но при переходе на остальные страницы эта надпись пропадает, ввиду того, что сессия, по всей видимости некоректно работает, так как если после залогинивания зайти ещё раз во вход , то там будет сказано, что вы зашли в качестве гостя... Огорчение
А когда заходишь в личный кабинет, где можно просмотреть и отредактировать личную инфу, вылазит как раз-таки преславутая ошибка по поводу сессии.

Цитата:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\smkvizion\www\index.php:7) in Z:\home\smkvizion\www\privat_akk.php on line 1
Success

И какой-то Success(непонятно откуда он, кстати не только на этой странице).

Нужно избавиться от этой ошибки и сделать так, чтобы при входе в сессии сохранялись переменные и после можно было зайти в личный кабинет, а иначе там будет просто пустота.
Если что-то непонятно объяснил - спрашивайте, скажу, а то после работы малость мозг не варит)

Ниже привожу коды скриптов:

index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP session_start();?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>
  7. <?PHP $title="Главная";
  8. echo $title;?></title>
  9. <link rel="stylesheet" href="css/style.css" />
  10. </head>
  11. <body>
  12. <div class="wrapper">
  13.     <div class="head">
  14.         <div class="user">
  15.         <?PHP
  16.                
  17.                  echo 'Hello,'.$_SESSION['firstname'];
  18.                 ?>
  19.         </div>
  20.     </div>
  21.                 <div class="left_menu">
  22.            <h3>Главное меню</h3>
  23.                 <ul>
  24.                         <li><a href="/">Главная</a></li>
  25.                         <li><a href="#">Контакты</a></li>
  26.                         <li><a href="index.php?cab=1">Личный кабинет</a></li>
  27.                         <li><a href="index.php?log=1">Вход</a> /<a href="<?PHP session_destroy();?>">Выход</a></li>
  28.                 </ul>
  29.         </div>
  30.         <div class="content">
  31.     <?PHP
  32.                 if ($_GET['log']==1)
  33.                         require('log.php');
  34.                 if ($_GET['reg']==1)
  35.                         require('reg.php');
  36.                 if ($_GET['cab']==1)
  37.                         require('privat_akk.php');
  38.          ?>
  39.    
  40.    
  41.    
  42.     </div>
  43.     <div class="clear"></div>
  44.     <div class="footer">
  45.     <div class="copy"> Copyright © 2012 by me</div>
  46.     </div>
  47. </div>
  48. </body>
  49. </html>


private_akk.php
PHP:
скопировать код в буфер обмена
  1. <?PHP session_start();
  2. require('db.php');
  3. $row=mysql_query("SELECT * FROM `users`;") or die("Bad");
  4. $res=mysql_fetch_assoc($row);
  5. if ($_SESSION['login']==$res['login'])
  6. {
  7. ?>
  8. <div class="cabinet">
  9. <form name="cabinet" method="post" action="save_private.php">
  10. Ваша фамилия:<input type="text" name="firstname" value="<?PHP echo $res['firstname'] ?>" placeholder="Ваш фамилию" />
  11. Ваше имя:<input type="text" name="lastname" value="<?PHP echo $res['lastname'] ?>" placeholder="Ваш имя" />
  12. Ваш логин:<input type="text" name="login" value="<?PHP echo $res['login'] ?>" placeholder="Ваш логин" />
  13. Ваш пароль:<input type="text" name="password" value="<?PHP echo $res['pass'] ?>" maxlength="16" placeholder="Ваш пароль" />
  14. Ваш e-mail:<input type="text" name="email" value="<?PHP echo $res['email'] ?>" placeholder="Ваш e-main" />
  15. Ваша дата рождения:<input type="text" name="date" value="<?PHP echo $res['date'] ?>" placeholder="Ваш дату рождения" />
  16. Ваш моб. телефон:<input type="text" name="mobile" value="<?PHP echo $res['mobile'] ?>" placeholder="Ваш телефон" />
  17. Выберите аватарку:<input type="file" name="avatar"  value="<?PHP echo $res['avatar'] ?>" />
  18. <input type="submit" name="register" value="Изменить настройки" />
  19. </form>
  20. </div>
  21. <?PHP }
  22. ?>

(Добавление)
Насколько я понимаю эту ошибку , в индексном файле что-то в строке 7 передаётся браузеру, и это же передаётся в кабинете в строке 1, НО, в index.php 7 строка - начало кода php, не могу понять. Однако


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
DelphinPRO
Отправлено: 12 Сентября, 2012 - 19:43:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


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




imya пишет:
<a href="<?PHP session_destroy();?>">Выход</a>
- это что такое Не понял
нажмите CTRL+U в браузере и посмотрите какой url выводится для этой ссылки ;) - (подсказка - пустой)

в этой строчке вы разрушаете сессию. но не во время нажатия на ссылку а в том же жизненном цикле скрипта, в котором ее стартуете. Понятно излагаю? Нет?

по поводу Cannot sent...
тут, как вы сами уже сказали - все давно разжевано и новых открытий вы не сделаете. Проверьте кодировку всех файлов проекта - установите UTF-8 без BOM.
Других причин из вышеприведенного не видно.

(Отредактировано автором: 12 Сентября, 2012 - 19:44:14)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
imya
Отправлено: 12 Сентября, 2012 - 19:51:52
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




DelphinPRO пишет:
imya пишет:
<a href="<?PHP session_destroy();?>">Выход</a>
- это что такое Не понял
нажмите CTRL+U в браузере и посмотрите какой url выводится для этой ссылки ;) - (подсказка - пустой)

в этой строчке вы разрушаете сессию. но не во время нажатия на ссылку а в том же жизненном цикле скрипта, в котором ее стартуете. Понятно излагаю? Нет?

по поводу Cannot sent...
тут, как вы сами уже сказали - все давно разжевано и новых открытий вы не сделаете. Проверьте кодировку всех файлов проекта - установите UTF-8 без BOM.
Других причин из вышеприведенного не видно.


Понятно, да, создал и удалил в одном файле и поэтому ругалось, убрал из ссылки - варнинг пропал, файлы кодировал все абсолютно, поэтому и отписался сюда.
Ещё вопрос - что это за страннейшая надпись Success, откуда она выводится?? Голову ломаю 4 день уже...

И ещё вопрос на отвлечённую тему, в регистрации хочу сделать проверку на вводимий e-mail, нашёл регулярку, но она некорректно пашет, нужно, чтобы при верном вводе значение присваивалось переменной, как-то так:

PHP:
скопировать код в буфер обмена
  1. if (preg_match('/^[A-Za-z0-9!#$%&]+@[A-Za-z0-9-]+.[A-Za-z0-9-]/', $email))
  2. {
  3. $email=$_POST['email'];
  4.         }
  5. else {
  6.         exit("incorrect email");
  7.         }



не поможете?)

(Отредактировано автором: 12 Сентября, 2012 - 19:52:38)



-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Runet4ik
Отправлено: 12 Сентября, 2012 - 21:28:48
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  
Откуда: Россия


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




Укажи третий параметр preg_match, в нём и сохранится коррекное значение емайла
 
 Top
Okula
Отправлено: 12 Сентября, 2012 - 21:34:38
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




imya, уж лучше так фильтруй:
PHP:
скопировать код в буфер обмена
  1. $email = 'bob@example.com';
  2. if(($valid_email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== FALSE) {
  3.     echo $valid_email;
  4. }
 
 Top
DlTA
Отправлено: 13 Сентября, 2012 - 00:15:50
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


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




Okula пишет:
filter_var($email, F

+
 
 Top
imya
Отправлено: 13 Сентября, 2012 - 17:56:23
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




Okula пишет:
imya, уж лучше так фильтруй:
PHP:
скопировать код в буфер обмена
  1. $email = 'bob@example.com';
  2. if(($valid_email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== FALSE) {
  3.     echo $valid_email;
  4. }


Но у меня ведь не конкретный email, а юзверь будет вводить, то есть код можно написать так

PHP:
скопировать код в буфер обмена
  1. $email=$_POST['email'];
  2. if(($valid_email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== FALSE)
  3.  {
  4. $email=$_POST['email'];
  5. }


или так будет не совсем верно?

Мучает ещё один не менее важный вопрос: что за странная надпись Success?
Захоожу в личные кабинет и вижу её и ещё при регистрации тоже... Растерялся
Вот код личного кабинета:
PHP:
скопировать код в буфер обмена
  1. <?PHP session_start();
  2. require('db.php');
  3. $row=mysql_query("SELECT * FROM `users`") or die("Bad");
  4. $res=mysql_fetch_assoc($row);
  5. if ($_SESSION['firstname']==$res['firstname'])
  6. {
  7. ?>
  8. <div class="cabinet">
  9. <form name="cabinet" method="post" action="save_private.php">
  10. Ваша фамилия:<input type="text" name="firstname" value="<?PHP echo $res['firstname'] ?>" placeholder="Ваш фамилию" />
  11. Ваше имя:<input type="text" name="lastname" value="<?PHP echo $res['lastname'] ?>" placeholder="Ваш имя" />
  12. Ваш логин:<input type="text" name="login" value="<?PHP echo $res['login'] ?>" placeholder="Ваш логин" />
  13. Ваш пароль:<input type="text" name="password" value="<?PHP echo $res['pass'] ?>" maxlength="16" placeholder="Ваш пароль" />
  14. Ваш e-mail:<input type="text" name="email" value="<?PHP echo $res['email'] ?>" placeholder="Ваш e-main" />
  15. Ваша дата рождения:<input type="text" name="date" value="<?PHP echo $res['date'] ?>" placeholder="Ваш дату рождения" />
  16. Ваш моб. телефон:<input type="text" name="mobile" value="<?PHP echo $res['mobile'] ?>" placeholder="Ваш телефон" />
  17. Выберите аватарку:<input type="file" name="avatar"  value="<?PHP echo $res['avatar'] ?>" />
  18. <input type="submit" name="register" value="Изменить настройки" />
  19. </form>
  20. </div>
  21. <?PHP }?>

Если никто не вошёл - просто надпись Success, если вошёл - Success и снизу личный кабинет.

(Отредактировано автором: 13 Сентября, 2012 - 17:58:49)



-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
DelphinPRO
Отправлено: 13 Сентября, 2012 - 18:14:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


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




imya пишет:
или так будет не совсем верно?

верно Улыбка
неважно откуда вы возьмете имейл. вам просто для примера указали конкретный адрес.

imya пишет:
что за странная надпись Success?

Рассуждайте логически. php не будет вам никаких надписей выводить, кроме ошибок. Значит надпись выводится скриптом. в приведенном файле ее нет, значит нужно смотреть в подключаемом db.php (или в тех, которые подключаются внутри db.php)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
imya
Отправлено: 13 Сентября, 2012 - 18:26:58
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




DelphinPRO пишет:
imya пишет:
или так будет не совсем верно?

верно Улыбка
неважно откуда вы возьмете имейл. вам просто для примера указали конкретный адрес.

imya пишет:
что за странная надпись Success?

Рассуждайте логически. php не будет вам никаких надписей выводить, кроме ошибок. Значит надпись выводится скриптом. в приведенном файле ее нет, значит нужно смотреть в подключаемом db.php (или в тех, которые подключаются внутри db.php)




По поводу емейла - вставил код - всё равно не работает Недовольство, огорчение

Вот регистрация (Отобразить)


А по поводу success сейчас перелопатю все файлы и бд в том числе.
(Добавление)
Пересмотрел все файлы - нигде не выводится такая запись, хоть убейте..

Только что попробывал, убираю этот код
PHP:
скопировать код в буфер обмена
  1. require('db.php');
  2. $row=mysql_query("SELECT * FROM `users`") or die("Bad");
  3. $res=mysql_fetch_assoc($row);


надпись пропадает...
то есть она выводится с бд что ли? но там в помине нет такой записи в принципе..

id firstname lastname login pass email date mobile img
1 Пупкин Иван admin 12345 admin@host.ru 2012-09-11 095-658 99 0

вот всё что там есть. Однако
(Добавление)
Кстати, ещё мистика. вчера всё выводилось нормально, сегодня все данные из бд (имя, фамилия) на странице выводятся знаками вопроса, приписал в подключении к бд принудительно utf-8 - имя вывелось, а фамилия так и осталась знаком вопроса Радость Радость Радость
(Добавление)
Вот сейчас вроде бы сделал сохранение изменённых настроек в личном кабинете, ничего трудного по сути, отправляю запрос, а мне приходит это Success , и сижу и думаю, как запрос mysql может вызвать такое?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require('db.php');
  3. $row=mysql_query("INSERT INTO `users` (`firstname`, `lastname`, `login`, `pass`, `email`, `date`, `mobile`, `img`)
  4. VALUES ('$firstname','$lastname','$login','$password','$email','$date','$mobile','$avatar')") or die("NOT INSERT".mysql_error());
  5.  
  6. ?>

(Добавление)
Пустоту вставляет, затупил, там UPDATE нужен...

а такой же запрос в регистрации тоже пустоту вставляет, печаль Растерялся


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
DelphinPRO
Отправлено: 13 Сентября, 2012 - 18:59:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


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




imya пишет:
Только что попробывал, убираю этот код
PHP:
скопировать код в буфер обмена
require('db.php');
$row=mysql_query("SELECT * FROM `users`") or die("Bad");
$res=mysql_fetch_assoc($row);
надпись пропадает...
то есть она выводится с бд что ли? но там в помине нет такой записи в принципе..


уберите строки
$row=mysql_query("SELECT * FROM `users`") or die("Bad");
$res=mysql_fetch_assoc($row);
оставьте только
require('db.php');

могу поспорить - надпись останется


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
imya
Отправлено: 13 Сентября, 2012 - 19:02:10
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




DelphinPRO пишет:


уберите строки
$row=mysql_query("SELECT * FROM `users`") or die("Bad");
$res=mysql_fetch_assoc($row);
оставьте только
require('db.php');

могу поспорить - надпись останется


Верно, но откуда? Не понял
Вот вся моя база, в ней одна таблица вообще)

Нажмите для увеличения




простите, но пофлужу немного: Радость Радость Радость Радость Радость Радость
ВНИМАТЕЛЬНО посмотрел в db.php и нашёл там

PHP:
скопировать код в буфер обмена
  1.  
  2. $db=mysql_connect("localhost","smk","12345");
  3. if (!$db)
  4. {
  5. die('Error'.mysql_error());
  6. }
  7. echo 'Success;
  8.  

(Отредактировано автором: 13 Сентября, 2012 - 19:05:05)



-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
DelphinPRO
Отправлено: 13 Сентября, 2012 - 19:08:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 7190
Дата рег-ции: Февр. 2012  


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




imya пишет:
ВНИМАТЕЛЬНО посмотрел в db.php и нашёл там

воооот. в программировании мистики не бывает. Все что кажется мистикой - всегда ошибка программиста
(Добавление)
И, кстати, на будущее - в любом редакторе есть поиск по файлу, а в продвинутых - поиск по всем открытым файлам. Вбиваете в поиск нужное слово и мгновенно его находите, не насилуя свое зрение


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
imya
Отправлено: 13 Сентября, 2012 - 19:24:46
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




О_О точно! Боже мой...забыл совсем...мдее)) Спасибо ещё раз, теперь хоть от этого избавился назойливого слова Голливудская улыбка


А по поводу регистрации что же не так??
ввожу корректный e-mail - всё равно не прокатывает Недовольство, огорчение


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Okula
Отправлено: 13 Сентября, 2012 - 21:16:34
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


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




imya пишет:
Но у меня ведь не конкретный email, а юзверь будет вводить, то есть код можно написать так

Нет, так немного неверно. Валидный email адрес возвращается в переменную $valid_email, не нужно писать шлак дублируя переменные.
PHP:
скопировать код в буфер обмена
  1. if(($valid_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) !== FALSE) {
  2.     echo $valid_email;
  3. }

(Добавление)

imya, что то мне подсказывает что программирование - это не твоё Радость
Бросай это дело, код который ты пишешь ужасен Хорошо
 
 Top
imya
Отправлено: 14 Сентября, 2012 - 08:49:10
Post Id



Участник


Покинул форум
Сообщений всего: 1473
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




Okula пишет:
imya пишет:
Но у меня ведь не конкретный email, а юзверь будет вводить, то есть код можно написать так

Нет, так немного неверно. Валидный email адрес возвращается в переменную $valid_email, не нужно писать шлак дублируя переменные.
PHP:
скопировать код в буфер обмена
  1. if(($valid_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) !== FALSE) {
  2.     echo $valid_email;
  3. }

(Добавление)

imya, что то мне подсказывает что программирование - это не твоё Радость
Бросай это дело, код который ты пишешь ужасен Хорошо


Я только учусь и мне нравится это, так что...;)

То есть потом $valid_email добавлять в базу просто, попробую сегодня.

Чем код ужасен?
(Добавление)
Пока что я как понимаю принцип и логику, так и стараюсь писать, я ведь не несколько лет уже этим занимаюсь... понимание придёт Улыбка


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB