- Как да изписва текст, само на потребител с ID 1?
12
WT форуми -> PHP MySQL ASP.NET -> Как да изписва текст, само на потребител с ID 1?
Създайте нова тема Напишете отговор 
Автор Съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 518
Мнение 07/10/2017 4:04 am     Как да изписва текст, само на потребител с ID 1? Отговорете с цитат


Как можем да го направим, като влизам, да проверява, дали е потребител с ID 1 или ако е по-удачно, да създам нов ред в базата, например "admin" и да проверява, дали потребителя е admin = 1 или е 0. Ако е ID/ADMIN == 1 .. echo .. else, ако не е echo.. Предполагам, че някак със сесия, ама и аз не знам..
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
explozen
Турист
Турист

Регистриран на: 10/02/2011 9:15 pm

Support: 13
Bonus: 26
Мнения: 392
Мнение 07/10/2017 9:51 am      Отговорете с цитат


http://php.net/manual/bg/control-structures.elseif.php
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 518
Мнение 09/10/2017 12:54 am      Отговорете с цитат


explozen написа:
http://php.net/manual/bg/control-structures.elseif.php


Благодаря за отговора, не бих казал, че ми беше полезен, даже малко на майтап го приех, като отговор с малко ирония. Имах капка надежда за малко аргументи към поста. (може и аз да не съм се изразил правилно в първия пост, но нищо, важното е да си помагаме, кой с колко може, не се надявах на готови кодове)
Иначе If/Else ми беше ясно, но идеята беше, дали ще стане със сесия.
Преправих логина да записва сесията админ със юзърнейм сесията.
След това --> if($_SESSION['admin'] == 1){ и сме ние.
Тепърва почвам да изучавам кода от нулата, а съм се хванал с една идея по-напредналата част от това, което всъщност знам и от там идва, и това с лошото обяснение в първия пост. Благодаря все пак.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 145
Bonus: 289
Мнения: 1338
Мнение 09/10/2017 10:41 am      Отговорете с цитат


В момента, в който се логваш, когато правиш заявката за проверка име/парола, извади и ID-то от базата. След това го запиши в сесията и го ползвай по-нататък където ти трябва:

PHP code:
// login.php
$query_result = query("SELECT id, name, ... FROM users WHERE password=?");

$_SESSION['user_id'] = $query_result->id; // или по какъвто там начин вадиш резултатите

// на друга страница:

if(!empty($_SESSION['id']) && $_SESSION['id'] == 1) {
echo "You're special!";
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 518
Мнение 09/10/2017 7:55 pm      Отговорете с цитат


anonimen написа:


Добре, засега добре.


if(!empty($_SESSION['userid']) && $_SESSION['userid'] == 1)
{
   echo ('Админ');
}
   elseif(!empty($_SESSION['userid']) && $_SESSION['userid'] == 2)
   {
      echo('Админ2');
   }
   else
   {
      echo('Потребител');
   }


А мога ли две ID-та да проверя наведнъж, вместо да ползвам elseif?

демек: АКО ID е == 1 или 2 { echo }
а не: АКО е 1 {echo} или ако е 2 {echo}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 103
Bonus: 196
Мнения: 2768
Мнение 09/10/2017 10:37 pm      Отговорете с цитат


PHP code:
<?php
$someIds = [1,2,10,150,9000];
if(!empty($_SESSION['userid']) && in_array($_SESSION['userid'], $someIds)) {
SPECIAL
}


http://php.net/manual/bg/function.in-array.php
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 518
Мнение 09/10/2017 11:45 pm      Отговорете с цитат


Супер стана, благодаря Ви хорица.
Чудя се, дали може да се посъкрати малко, но и така е успешно.


$someIds = [1,2,3];
if(!empty($_SESSION['userid']) && in_array($_SESSION['userid'], $someIds) && ($_SESSION['admin'] == 1))
{
   echo ('Админ!');
}
   elseif(!empty($_SESSION['userid']) && in_array($_SESSION['userid'], $someIds) && ($_SESSION['admin'] == 2))
   {
      echo('Модератор!');
   }
   elseif(!empty($_SESSION['userid']) && in_array($_SESSION['userid'], $someIds) && ($_SESSION['admin'] == 3))
   {
      echo('Поддръжка!');
   }
   else
   {
      echo('Стандартен потребител!');
   }


А дали има начин да се рефрешне някак тази сесия без релог?
В смисъл такъв, че като направя промяна в датабазата, потребителя трябва да се релогне за да види промяната на съдържанието, има ли как да се спести това, по някакъв начин да се рефрешне, без да се налага да излезе-влезе?

п.с. Може би някакъв скрипт в конфиг файла, който през 1 час да пуска unset($_SESSION['admin'] ии... не знам, как може да му се даде нова сесия, без да се налага, да влиза наново?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 145
Bonus: 289
Мнения: 1338
Мнение 12/10/2017 11:10 am      Отговорете с цитат


Цитат:

А дали има начин да се рефрешне някак тази сесия без релог?
В смисъл такъв, че като направя промяна в датабазата, потребителя трябва да се релогне за да види промяната на съдържанието, има ли как да се спести това, по някакъв начин да се рефрешне, без да се налага да излезе-влезе?

Е какво като правиш промяна в ДБ? Ти като си вадиш информацията, винаги вадиш най-новата? Какво общо има това със сесията.

Относно съкращаването можеш да направиш така:

PHP code:
$arr = [
0 => 'Админ',
1 => 'Mod',
2 => 'Support'
];
$id = $_SESSION['id'];

if(isset($arr[$id])) echo $arr[$id];
else echo "Normal user";
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 518
Мнение 12/10/2017 9:01 pm      Отговорете с цитат


anonimen написа:

Е какво като правиш промяна в ДБ? Ти като си вадиш информацията, винаги вадиш най-новата? Какво общо има това със сесията.


Защото изкарвам админ панела през сесия админ и ако промена в дб-то някой друг също да е админ, трябва да релогне примерно. Или това да е с сесия, не е добра идея и има други начини?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 145
Bonus: 289
Мнения: 1338
Мнение 12/10/2017 10:09 pm      Отговорете с цитат


Решението е много просто:

SQL code:
SELECT user_status FROM users WHERE user_id = "USER_ID_FROM_PHP"


Като на всеки запис в users държиш статуса на потребителя Като тип ENUM, а не като CHAR/VARCHAR.

След това като извадиш резултата от тази заявка можеш динамично (т.е. на всяко зареждане на страницата, без релогване), да провериш дали потребителят е админ:

PHP code:
$user_status = $query->fetch_result();//какъвто метод ползваш...
if($user_status === 'admin') {}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
taxi
Турист
Турист

Регистриран на: 28/08/2008 3:48 pm

Support: 4
Bonus: 8
Мнения: 518
Мнение 15/10/2017 3:52 am      Отговорете с цитат


anonimen написа:
Решението е много просто:

SQL code:
SELECT user_status FROM users WHERE user_id = "USER_ID_FROM_PHP"


Като на всеки запис в users държиш статуса на потребителя Като тип ENUM, а не като CHAR/VARCHAR.

След това като извадиш резултата от тази заявка можеш динамично (т.е. на всяко зареждане на страницата, без релогване), да провериш дали потребителят е админ:

PHP code:
$user_status = $query->fetch_result();//какъвто метод ползваш...
if($user_status === 'admin') {}


//off-topic
Съжалявам за закъснението с отговора... Ама си взех евтина и калпава 15 годишна машина, прецака и се хард диска, сега пък се оправи.. Тровя си нервите с кошници, но засега, ще е така...

//on-topic
Добре, а каква функция изпълнява WHERE user_id в случая?

<?php
mysql_connect('localhost', 'user', 'pass');
mysql_select_db("db") or die ("no database");
$user_status = mysql_query("SELECT user_status FROM users WHERE id = 1");
if($user_status === 'admin') {
   echo('Admin');
}
else{
   echo('User');
}

Направих ENUM с default 'user' и допълнително 'admin' + горния код.
Сега трябва да направя някак да разпознава потребителя ли?
Примерно, чете сесия и ако съвпада от сесията, да прави тази проверка и ще сработи?
Сигурно го има из интернета, съжалявам, но ми е по-лесно, като ми го обясни някой, хем дето разбира, хем на български.. Тепърва почвам да го уча и знам, че не се прави така, но съм сигурен, че по-лесно, ще го разбера, само дето на вас ви занимавам за което съм благодарен и го оценявам.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 145
Bonus: 289
Мнения: 1338
Мнение 15/10/2017 12:43 pm      Отговорете с цитат


WHERE се използва за да ограничиш резултатите, идващи от заявката. В случая "WHERE user_id = 1" означава от всички резултати да извади само тези, в които полето user_id = 1.

Горното where го закачаш към заявката "SELECT user_status FROM users", по този начин от таблицата users селектваш полето user_status, като условието е потребителят да е с id=1

Както виждаш, не е задължително да селектваш дадено поле, за да правиш провеки с него - в случая селектвам user_status, но проверката е по user_id.

В тази заявка в PHP скрипт трябва да заместиш 1-цата с id-то на юзъра, когото искаш да провериш. Например ако трябва да видиш потребител 5 с какъв статус е, ще направиш така: select status from users where id=5

В твоя скрипт вместо конкретно число ще сложиш стойността, която си записал в сесията.

Погледни това: https://stackoverflow.com/q/20878089
Тук показват как да извадиш единична стойност от БД.

Ето ти схема на кода, който най-вероятно ти трябва:

PHP code:
// тук използвам exit, за да не се изпълнява по-долния код. Можеш да използваш и голямо else, но с exit е по-чисто/леко/четливо
if(empty($_SESSION['user_id']) { echo 'not logged in'; exit; }

$id = $SESSION[user_id];

$status = fetch_from_db($id); // това може да ти е помощна функция, може и директно да викаш mysql функциите. Само да ти обърна внимание, че трябва да ползваш mysqli_*, а не mysql_. В интернет ще намериш купища причини защо.

echo 'you are ' . $status; // тук може и htmlspecialchars примерно да ползваш
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
12
Страница 1 от 2


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети