Как да изписва текст, само на потребител с ID 1?

taxi

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

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

PHP:
// 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!";
}
 

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

Код:
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}
 
PHP:
<?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
 
Супер стана, благодаря Ви хорица.
Чудя се, дали може да се посъкрати малко, но и така е успешно.

Код:
$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'] ии... не знам, как може да му се даде нова сесия, без да се налага, да влиза наново?
 
А дали има начин да се рефрешне някак тази сесия без релог?
В смисъл такъв, че като направя промяна в датабазата, потребителя трябва да се релогне за да види промяната на съдържанието, има ли как да се спести това, по някакъв начин да се рефрешне, без да се налага да излезе-влезе?
Е какво като правиш промяна в ДБ? Ти като си вадиш информацията, винаги вадиш най-новата? Какво общо има това със сесията.

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

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

if(isset($arr[$id])) echo $arr[$id];
else echo "Normal user";
 
anonimen каза:
Е какво като правиш промяна в ДБ? Ти като си вадиш информацията, винаги вадиш най-новата? Какво общо има това със сесията.

Защото изкарвам админ панела през сесия админ и ако промена в дб-то някой друг също да е админ, трябва да релогне примерно. Или това да е с сесия, не е добра идея и има други начини?
 
Решението е много просто:

[sql]SELECT user_status FROM users WHERE user_id = "USER_ID_FROM_PHP"[/sql]

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

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

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

[sql]SELECT user_status FROM users WHERE user_id = "USER_ID_FROM_PHP"[/sql]

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

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

PHP:
$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' + горния код.
Сега трябва да направя някак да разпознава потребителя ли?
Примерно, чете сесия и ако съвпада от сесията, да прави тази проверка и ще сработи?
Сигурно го има из интернета, съжалявам, но ми е по-лесно, като ми го обясни някой, хем дето разбира, хем на български.. Тепърва почвам да го уча и знам, че не се прави така, но съм сигурен, че по-лесно, ще го разбера, само дето на вас ви занимавам за което съм благодарен и го оценявам.
 
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:
// тук използвам 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 примерно да ползваш
 
Златен си човече! Благодарен съм на djman и особено на теб за обърнатото внимание и за учтивата помощ. В началото си помислих, че форума е умрял отдавна и че това, което беше преди 5-10 години е останало отдавна в историята... Но заради хора, като теб, които помагат и обясняват.. Просто едно огромно благодаря!

По темата.
Какви ли фечове не пробвах, дори и до rows стигнах(и тогава проработи), но така май е по-практично от rows:

Код:
session_start();
if(empty($_SESSION['userid'])){echo 'not logged in'; exit;}
$link = mysqli_connect("localhost", "user", "pass", "db");
$id = $_SESSION["userid"];
$sql = "SELECT user_status FROM users WHERE id='$id' limit 1";
$result = mysqli_query($link, $sql);
$status = mysqli_fetch_object($result);
if($status->user_status === 'admin'){
	echo('admin');
}
elseif($status->user_status === 'user'){
	echo('user');
}
else
{
	echo('error');
}

Работи, но все пак, според теб? Така добре ли е или някъде нещо е по-добре, да се промени, като fetch-а, примерно?
 

Горе