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
Форумы портала PHP.SU :: Версия для печати :: Помогите составить условие
Форумы портала PHP.SU » » Вопросы новичков » Помогите составить условие

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

1. etoYA - 31 Октября, 2011 - 10:37:46 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. // Если пользователь с таким айди существует, то вывести его профиль
  2. if (mysql_num_rows($sql) == 1) {
  3.         $row = mysql_fetch_array($sql);
  4.         echo $row['login'];
  5.         if (isset($_SESSION['user_id']) AND $_SESSION['user_id'] == $row['id']) {
  6.                 profile();
  7.         }
  8. // Если айди гет запроса совпадает с айди сессии, то это профиль авторизованого пользователя
  9.         elseif (isset($_SESSION['user_id']) AND $id == $_SESSION['user_id']) {
  10.                 profile();
  11.         }
  12. }
  13. else {
  14.         echo 'Такого пользователя не сущесвтует';
  15.         }


мне нужно в это условие вставить
PHP:
скопировать код в буфер обмена
  1. if (!isset($_SESSION['user_id']) AND !isset($_GET['id'])) {
  2.        Вы не авторизованы.
  3. }
  4. else {
  5.         profile();
  6. }
Как вставить это к предыдущему условию

PHP:
скопировать код в буфер обмена
  1.         elseif (isset($_SESSION['user_id']) AND $id == $_SESSION['user_id']) {
  2.                 profile();
  3.         }
2. snikers987 - 31 Октября, 2011 - 10:41:13 - перейти к сообщению
Эээ.. а зачем тулить id еще в URL если он уже есть в сессии?
3. etoYA - 31 Октября, 2011 - 10:46:25 - перейти к сообщению
Вы не поняли, если пользователь зашел по site.ru/profile.php - то это его профиль, если сессии не существует, то он не авторизован, но если существует гет запрос, то открыть профиль как чужого пользователя (только просмотр). Если пользователь авторизирован и зашел через айди, к примеру нашел себя в поиске, то это его профиль. Но у меня реально уже кипят мозги, как сделать так, чтобы:

Пользователь зашел в site.ru/profile.php не авторизированый, то сказать ему, вы не авторизированы...... А то сейчас показывает

PHP:
скопировать код в буфер обмена
  1.  
  2. else {
  3.         echo 'Такого пользователя не сущесвтует';
  4.         }
  5.  
4. EuGen - 31 Октября, 2011 - 10:54:37 - перейти к сообщению
Видимо, проверять что-то наподобие
PHP:
скопировать код в буфер обмена
  1. if(!isset($_SESSION['user_id']))
  2. {
  3.    //не авторизован
  4. }
  5. elseif($_SESSION['user_id']==$_GET['id'])
  6. {
  7.    //авторизован, свой профиль - можно редактировать
  8. }
  9. else
  10. {
  11.    //авторизован, чужой профиль - только просмотр
  12. }
5. etoYA - 31 Октября, 2011 - 10:56:51 - перейти к сообщению
Хм, но тогда ведь не будет открыватся профиль, если пользователь не авторизован..... Вот, дам полный код, думаю это лишнее, но все же.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. require_once('config.php');
  4. $id = (int)$_GET['id'];
  5.  
  6. // Если гет существует гет запрос, то открыть профиль пользователя по ID
  7. if ($id) {
  8.         $query = "SELECT * FROM `users` WHERE id='{$id}' LIMIT 1";
  9. }
  10. //Иначе открыть профиль авторизованого пользователя
  11. else {
  12.         $query = "SELECT * FROM `users` WHERE id='{$_SESSION['user_id']}' LIMIT 1";
  13. }
  14. $sql = mysql_query($query) or die(mysql_error());
  15. // Если пользователь с таким айди существует, то вывести его профиль
  16. if (mysql_num_rows($sql) == 1) {
  17.         $row = mysql_fetch_array($sql);
  18.         echo $row['login'];
  19.         if (isset($_SESSION['user_id']) AND $_SESSION['user_id'] == $row['id']) {
  20.                 profile();
  21.         }
  22. // Если айди гет запроса совпадает с айди сессии, то это профиль авторизованого пользователя
  23.         elseif (isset($_SESSION['user_id']) AND $id == $_SESSION['user_id']) {
  24.                 profile();
  25.         }
  26. }
  27. else {
  28.         echo 'Такого пользователя не сущесвтует';
  29.         }
  30.  
  31. // Функция редактирования персонального профила
  32. function profile() {
  33.         echo '<br/> Personal profile';
  34. }
  35. ?>
  36.  
6. Самогонщик - 31 Октября, 2011 - 10:59:11 - перейти к сообщению
etoYA пишет:
// Если пользователь с таким айди существует, то вывести его профиль
Тебе надо, чтобы авторизованный пользователь на странице профиля, если не указан ид в гет видел свой профиль, а не авторизованный получал "Вы не авторизованы."?

Если так, то просто нужно добавить ещё одно внешние условие, до всяких запросов к бд.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (!isset($_SESSION['user_id']) AND !isset($_GET['id'])) {
  3.        Вы не авторизованы.
  4. }
  5. else {
  6.         //Твой большой код
  7. }
  8.  
7. etoYA - 31 Октября, 2011 - 11:00:26 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  //Твой большой код


Это весь скрипт, либо вызов профиля?
8. EuGen - 31 Октября, 2011 - 11:02:04 - перейти к сообщению
Тогда предлагаю просто сесть и подумать. И расписать все случаи:

- Если пользователь не авторизован, то ...
- Если есть $_GET['id'], то ...
- Если нет $_GET['id'], то ...
- Если пользователь авторизован, то ...
- Если нет $_GET['id'], то ...
- Если есть $_GET['id'], то ...
- Если $_GET['id'] равно $_SESSION['user_id'], то ...
- Если $_GET['id'] не равно $_SESSION['user_id'], то ...

Ну и добавьте внутрь этого дерева условий свои БД-проверки (Если пользователь найден по id в БД, то ... иначе ...)

- сначала продумывайте алгоритм и уже только потом садитесь и реализуйте это в код.
9. etoYA - 31 Октября, 2011 - 11:04:34 - перейти к сообщению
Самогонщик, спасибо! Дня 3 себе мозг выносил Улыбка), а тут оказывается все так просто)). Куда я только не тыкал это условие, но до выборки не тыкалУлыбка).

 

Powered by ExBB FM 1.0 RC1