За последние 24 часа нас посетили 25266 программистов и 1736 роботов. Сейчас ищут 916 программистов ...

Личный кабинет пользователя

Тема в разделе "PHP для новичков", создана пользователем q0b3rMAN, 11 июн 2011.

  1. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Здраствуйте, уважаемые форумчане!!!
    написал регистрацию и авторизацию пользователя, теперь пытаюсь сделать для пользователя личную страницу.
    (копирайты с руселлера)
    page.php:
    Код (Text):
    1. <?php
    2. // вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
    3. session_start();
    4. ?>
    5. <?php
    6. include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
    7. if (isset($_GET['id'])) {$id =$_GET['id']; } //id "хозяина" странички
    8. else
    9. { exit("Вы зашил на страницу без параметра!");} //если не указали id, то выдаем ошибку
    10. if (!preg_match("|^[\d]+$|", $id)) {
    11. exit("<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
    12. }
    13.  
    14. if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
    15. {
    16. //если существует логин и пароль в сессиях, то проверяем, действительны ли они
    17. $login = $_SESSION['login'];
    18. $password = $_SESSION['password'];
    19. $result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
    20. $myrow2 = mysql_fetch_array($result2);
    21. if (empty($myrow2['id']))
    22.    {
    23.    //Если не действительны (может мы удалили этого пользователя из базы за плохое поведение)
    24.     exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
    25.    }
    26. }
    27. else {
    28. //Проверяем, зарегистрирован ли вошедший
    29. exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
    30. $result = mysql_query("SELECT * FROM users WHERE id='$id'",$db);
    31. $myrow = mysql_fetch_array($result);//Извлекаем все данные пользователя с данным id
    32.  
    33. if (empty($myrow['login'])) { exit("Пользователя не существует! Возможно он был удален.");} //если такого не существует
    34.  
    35. ?>
    36. <html>
    37. <head>
    38. <title><?php echo $myrow['login']; ?></title>
    39. </head>
    40. <body>
    41. <h2>Пользователь "<?php echo $myrow['login']; ?>"</h2>
    42.  
    43.  
    44. <?php
    45. print <<<HERE
    46. |<a href='page.php?id=$myrow2[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
    47. HERE;
    48. //выше вывели меню
    49.  
    50. if ($myrow['login'] == $login) {
    51. //Если страничка принадлежит вошедшему, то предлагаем изменить данные и выводим личные сообщения
    52.  
    53. print <<<HERE
    54.  
    55. <form action='update_user.php' method='post'>
    56. Ваш логин <strong>$myrow[login]</strong>. Изменить логин:<br>
    57. <input name='login' type='text'>
    58. <input type='submit' name='submit' value='изменить'>
    59. </form>
    60. <br>
    61.  
    62. <form action='update_user.php' method='post'>
    63. Изменить пароль:<br>
    64. <input name='password' type='password'>
    65. <input type='submit' name='submit' value='изменить'>
    66. </form>
    67. <br>
    68.  
    69.  
    70. <h2>Личные сообщения:</h2>
    71.  
    72. HERE;
    73.  
    74. $tmp = mysql_query("SELECT * FROM messages WHERE poluchatel='$login' ORDER BY id DESC",$db);
    75. $messages = mysql_fetch_array($tmp);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху
    76.  
    77. if (!empty($messages['id'])) {
    78. do //выводим все сообщения в цикле
    79.   {
    80. $author = $messages['author'];
    81. $result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
    82. $myrow4 = mysql_fetch_array($result4);
    83.  
    84. if (!empty($myrow4['avatar'])) {//если такового нет, то выводим стандартный(может этого пользователя уже давно удалили)
    85. $avatar = $myrow4['avatar'];
    86. }
    87. else {$avatar = "avatars/net-avatara.jpg";}
    88.  
    89.   printf("
    90.   <table>
    91.   <tr>
    92.   <td><a href='page.php?id=%s'><img alt='аватар' src='%s'></a></td>
    93.  
    94.   <td>Автор: <a href='page.php?id=%s'>%s</a><br>
    95.       Дата: %s<br>
    96.       Сообщение:<br>
    97.      %s<br>
    98.      <a href='drop_post.php?id=%s'>Удалить</a>
    99.  
    100.   </td>  
    101.   </tr>
    102.   </table><br>
    103.   ",$myrow4['id'],$avatar,$myrow4['id'],$author,$messages['date'],$messages['text'],$messages['id']);
    104.   //выводим само сообщение
    105.   }
    106.   while($messages = mysql_fetch_array($tmp));
    107.  
    108.                     }
    109.                     else {
    110.                     //если сообщений не найдено
    111.                     echo "Сообщений нет";
    112.                     }
    113.                    
    114. }
    115.  
    116. else
    117. {
    118. //если страничка чужая, то выводим только некторые данные и форму для отправки личных сообщений
    119.  
    120. print <<<HERE
    121. <img alt='аватар' src='$myrow[avatar]'><br>
    122. <form action='post.php' method='post'>
    123. <br>
    124. <h2>Отправить Ваше сообщение:</h2>
    125. <textarea cols='43' rows='4' name='text'></textarea><br>
    126. <input type='hidden' name='poluchatel' value='$myrow[login]'>
    127. <input type='hidden' name='id' value='$myrow[id]'>
    128. <input type='submit' name='submit' value='Отправить'>
    129. </form>
    130. HERE;
    131. }
    132.  
    133. ?>
    134. </body>
    135. </html>
    и update_user.php:
    Код (Text):
    1.  
    2. <?php
    3. session_start();
    4. include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
    5.  
    6. if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
    7. {
    8. //если существует логин и пароль в сессиях, то проверяем, действительны ли они
    9. $login = $_SESSION['login'];
    10. $password = $_SESSION['password'];
    11. $result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
    12. $myrow2 = mysql_fetch_array($result2);
    13. if (empty($myrow2['id']))
    14.    {
    15.    //Если не действительны, то закрываем доступ
    16.     exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
    17.    }
    18. }
    19. else {
    20. //Проверяем, зарегистрирован ли вошедший
    21. exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
    22.  
    23. $old_login = $_SESSION['login']; //Старый логин нам пригодиться
    24. $id = $_SESSION['id'];//идентификатор пользователя тоже нужен
    25. $ava = "avatars/net-avatara.jpg";//стандартное изображение будет кстати
    26.  
    27. ////////////////////////
    28. ////////ИЗМЕНЕНИЕ ЛОГИНА
    29. ////////////////////////
    30.  
    31. if (isset($_POST['login']))//Если существует логин
    32.       {
    33. $login = $_POST['login'];
    34. $login = stripslashes($login); $login = htmlspecialchars($login); $login = trim($login);//удаляем все лишнее
    35. if ($login == '') { exit("Вы не ввели логин");} //Если логин пустой, то останавливаем сценарий
    36.  
    37. if (strlen($login) < 3 or strlen($login) > 15) {//проверяем дину
    38. exit ("Логин должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
    39. }
    40.  
    41. // проверка на существование пользователя с таким же логином
    42. $result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
    43. $myrow = mysql_fetch_array($result);
    44. if (!empty($myrow['id'])) {
    45. exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); //останавливаем выполнение сценариев
    46. }
    47.  
    48. $result4 = mysql_query("UPDATE users SET login='$login' WHERE login='$old_login'",$db);//обновляем в базе логин пользователя
    49. if ($result4=='TRUE') {//если выполнено верно, то обновляем все сообщения, которые отправлены ему
    50. mysql_query("UPDATE messages SET author='$login' WHERE author='$old_login'",$db);
    51. $_SESSION['login'] = $login;//Обновляем логин в сессии
    52. echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваш логин изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}//отправляем пользователя назад
    53.  
    54.       }
    55.  
    56. ////////////////////////
    57. ////////ИЗМЕНЕНИЕ ПАРОЛЯ
    58. ////////////////////////
    59.  
    60. else if (isset($_POST['password']))//Если существует пароль
    61.       {
    62. $password = $_POST['password'];
    63. $password = stripslashes($password);$password = htmlspecialchars($password);$password = trim($password);//удаляем все лишнее
    64. if ($password == '') { exit("Вы не ввели пароль");} //если пароль не введен, то выдаем ошибку
    65.  
    66. if (strlen($password) < 3 or strlen($password) > 15) {//проверка на количество символов
    67. exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
    68. }
    69.  
    70. $password = md5($password);//шифруем пароль
    71. $password = strrev($password);// для надежности добавим реверс
    72. $password = $password."b3p6f";
    73. //можно добавить несколько своих символов по вкусу, например, вписав "b3p6f". Если этот пароль будут взламывать методом подбора у себя на сервере этой же md5,то явно ничего хорошего не выйдет. Но советую ставить другие символы, можно в начале строки или в середине.
    74. //При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего размера.
    75.  
    76.  
    77. $result4 = mysql_query("UPDATE users SET password='$password' WHERE login='$old_login'",$db);//обновляем пароль
    78. if ($result4=='TRUE') {//если верно, то обновляем его в сессии
    79. $_SESSION['password'] = $password;
    80. echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваш пароль изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}//отправляем обратно на его страницу
    81.  
    82.       }
    83.  
    84.  
    85.  
    86. ////////////////////////
    87. ////////ИЗМЕНЕНИЕ АВАТАРЫ
    88. ////////////////////////
    89.  
    90. else if (isset($_FILES['fupload']['name'])) //отправлялась ли переменная
    91.       {
    92.  
    93. if (empty($_FILES['fupload']['name']))
    94. {
    95. //если переменная пустая (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
    96. $avatar = "avatars/net-avatara.jpg"; //можете нарисовать net-avatara.jpg или взять в исходниках
    97. $result7 = mysql_query("SELECT avatar FROM users WHERE login='$old_login'",$db);//извлекаем текущий аватар
    98. $myrow7 = mysql_fetch_array($result7);
    99. if ($myrow7['avatar'] == $ava) {//если аватар был стандартный, то не удаляем его, ведь у на одна картинка на всех.
    100. $ava = 1;
    101. }
    102. else {unlink ($myrow7['avatar']);}//если аватар был свой, то удаляем его, затем поставим стандарт
    103. }
    104.  
    105. else
    106. {
    107. //иначе - загружаем изображение пользователя для обновления
    108. $path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия
    109.  
    110.    
    111. if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
    112.      { 
    113.            
    114.         $filename = $_FILES['fupload']['name'];
    115.         $source = $_FILES['fupload']['tmp_name'];  
    116.         $target = $path_to_90_directory . $filename;
    117.         move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory
    118.  
    119.     if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
    120.     $im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
    121.     }
    122.     if(preg_match('/[.](PNG)|(png)$/', $filename)) {
    123.     $im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
    124.     }
    125.    
    126.     if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
    127.         $im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
    128.     }
    129.    
    130. //СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru
    131.  
    132. // Создание квадрата 90x90
    133. // dest - результирующее изображение
    134. // w - ширина изображения
    135. // ratio - коэффициент пропорциональности
    136.  
    137. $w = 90;  // квадратная 90x90. Можно поставить и другой размер.
    138.  
    139. // создаём исходное изображение на основе
    140. // исходного файла и определяем его размеры
    141. $w_src = imagesx($im); //вычисляем ширину
    142. $h_src = imagesy($im); //вычисляем высоту изображения
    143.  
    144.          // создаём пустую квадратную картинку
    145.          // важно именно truecolor!, иначе будем иметь 8-битный результат
    146.          $dest = imagecreatetruecolor($w,$w);
    147.  
    148.          // вырезаем квадратную серединку по x, если фото горизонтальное
    149.          if ($w_src>$h_src)
    150.          imagecopyresampled($dest, $im, 0, 0,
    151.                           round((max($w_src,$h_src)-min($w_src,$h_src))/2),
    152.                           0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
    153.  
    154.          // вырезаем квадратную верхушку по y,
    155.          // если фото вертикальное (хотя можно тоже серединку)
    156.          if ($w_src<$h_src)
    157.          imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
    158.                           min($w_src,$h_src), min($w_src,$h_src));
    159.  
    160.          // квадратная картинка масштабируется без вырезок
    161.          if ($w_src==$h_src)
    162.          imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    163.          
    164.  
    165. $date=time(); //вычисляем время в настоящий момент.
    166. imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
    167.  
    168. //почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.
    169.  
    170. $avatar = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.
    171.  
    172. $delfull = $path_to_90_directory.$filename;
    173. unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
    174.  
    175. $result7 = mysql_query("SELECT avatar FROM users WHERE login='$old_login'",$db);//извлекаем текущий аватар пользователя
    176. $myrow7 = mysql_fetch_array($result7);
    177.  
    178. if ($myrow7['avatar'] == $ava) {//если он стандартный, то не удаляем его, ведь у нас одна картинка на всех.
    179. $ava = 1;
    180. }
    181. else {unlink ($myrow7['avatar']);}//если аватар был свой, то удаляем его
    182.  
    183.  
    184. }
    185. else
    186.         {
    187.         //в случае несоответствия формата, выдаем соответствующее сообщение
    188.         exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
    189.         }
    190.  
    191. }
    192.  
    193. $result4 = mysql_query("UPDATE users SET avatar='$avatar' WHERE login='$old_login'",$db);//обновляем аватар в базе
    194. if ($result4=='TRUE') {//если верно, то отправляем на личную страничку
    195. echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваша аватарка изменена! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}
    196.  
    197.       }
    198. ?>
    проблема в том что когда я авторизируюсь, при переходе в свой кабинет, тоесть это ссылка с главной:
    Код (Text):
    1. <a href='page.php?id=$_SESSION[id]'>панель управления</a>
    я получаю ответ:
    помогите узнать в чем косяк, заранее спасибо!
     
  2. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    1. Переменная не ставится в одинарные кавычки.
    2. Вместо $_SESSION[id] запиши $_SESSION['id']
    Вот так будет работать <?php echo '<a href="page.php?id='.$_SESSION['id'].'">панель управления</a>' ?>
     
  3. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Поменял, ответ на странице page.php такой же.
    Мой ID из базы он определяет, тоесть адрес выгледит вот так:
    http://site.ru/page.php?id=1, но моя страница не открывается...
     
  4. q0b3rMAN

    q0b3rMAN Активный пользователь

    С нами с:
    11 июн 2011
    Сообщения:
    142
    Симпатии:
    0
    Up! Помогите кто может, заранее спасибо!
     
  5. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    напиши print_r($_SESSION) перед входом на свою страницу, может у тебя какие то данные не передаются
     
  6. Nik_2002

    Nik_2002 Новичок

    С нами с:
    27 мар 2015
    Сообщения:
    1
    Симпатии:
    0
    Возможно, не сохраняются куки...
    И да, чтобы совсем красиво было и чтобы работало, то лучше сделать так:
    Код (Text):
    1. <? session_start(); ?> // Да, молодец, что вставил session_start отдельно. А то работало бы плохо.
    2. <?php
    3. include("bd.php");
    4. ............ // Ну и дальше вроде правильно
    5. ?>
    Огромная твоя ошибка...Из-за этого куки плохо сохраняются:
    Код (Text):
    1. <a href='page.php?id=$_SESSION[id]'>панель управления</a>
    Переправь на:
    Код (Text):
    1. <? "<a href='page.php?id=$_SESSION[id]'>панель управления</a>" ?>
    Тогда и работать должно
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА