jakub888
(jakub888)
12 Sierpień 2013 21:58
#1
Witam!
Posiadam system logowania rejestracji itd… zrobiłem też system newsów ale nie wiem jak zrobić aby tylko użytkownik któremu nadam uprawninia do przeczytania danego newsa. Wiadomo można zoribć tabele itd ale problem zaczyna się wtedy kiedy chcę aby mógł zobaczyć kolejny ale już nowszy.
tfl
(Konrad Kosowski)
13 Sierpień 2013 05:31
#2
Nie bardzo zrozumiałem… Jeśli jakoś logujesz użytkowników, to można im nadać “flagę” i zalterować bazę z newsami, tak, żeby dodać nową kolumnę, na przykład require_flag. Zmieniasz zapytanie do bazy tak, żeby select dodatkowo sprawdzał flagę usera. I po wszystkiemu…
jakub888
(jakub888)
19 Sierpień 2013 10:11
#3
tfl:
Nie bardzo zrozumiałem… Jeśli jakoś logujesz użytkowników, to można im nadać “flagę” i zalterować bazę z newsami, tak, żeby dodać nową kolumnę, na przykład require_flag. Zmieniasz zapytanie do bazy tak, żeby select dodatkowo sprawdzał flagę usera. I po wszystkiemu…
Ale nie bardzo wiem jak to zrobić …
tfl
(Konrad Kosowski)
19 Sierpień 2013 11:48
#4
Ja też nie… wszystko zależy od tego, jak masz skonstruowaną aplikację…
Załóżmy, że masz taką tablicę z newsami:
ID | title | bod | date | author
Musisz ją zalterować tak:
ALTER TABLE `news` ADD COLUMN `login_require` TINYINT(1) NULL DEFAULT 0 AFTER `author` ;
Teraz po zalogowaniu użytkownika tworzysz (mam nadzieję) sesję tego usera. Dodaj sobie do sesji flagę is_logged:
$_SESSION['is_logged'] = TRUE;
[/code]
W kodzie musisz mieć metodę, która pobiera newsy. Załóżmy, że wygląda tak:
[code=php]function get_news() {$sql = “select * from news”;$result = mysql_query($sql); foreach(mysql_fetch_array($result) as $row) { $news[] = $row; }return $news; }
Trzeba go zmienić na następujący:
function get_news()
{
if($_SESSION['is_logged'])
{
$sql = "select * from news";
}
else
{
$sql = "select * from news where `login_require` = 0";
}
$result = mysql_query($sql);
foreach(mysql_fetch_array($result) as $row)
{
$news[] = $row;
}
return $news;
}
[/code]
Teraz musisz sobie jeszcze przemyśleć jak będziesz nadawał flagę login_require w bazie. Szkoda, że nie powiedziałeś, w czym programujesz i jakiej używasz bazy.
jakub888
(jakub888)
19 Sierpień 2013 12:05
#5
Używam PHP5(z apache2) i bazy MySQL (z phpmyadmin)
A tu kod dodawania newsa:
<?php session_start(); include('header.php'); ?>
<?php if(empty($_COOKIE[‘islogged’])) { header(‘Refresh: 2; url=login.php’); die(‘Aby skorzystać z panelu należy się zalogować! Za chwilę nastąpi przekierowanie’); } if(isset($_SESSION[‘nick’]) && isset($_SESSION[‘ip’])) { if(($_SESSION[‘ranga’]) == ‘Member’){ echo ’ Nie masz uprawnień!’; } if(($_SESSION[‘ranga’]) == ‘Admin’){ include(‘connect.php’); $editor = ‘editor1’; echo’
Dodawanie Pluginu
Tytuł: Opis: Link do pobrania pluginu: ‘; $name = $_POST[‘tytul’]; $con = $_POST[‘editor1’]; $link = $_POST[‘link’]; $autor = $_SESSION[‘nick’]; if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST)) { $query = mysql_query("insert into news values(’’,’".$_POST[‘tytul’]."’,now(),’".$_SESSION[‘nick’]."’,’".$_POST[‘editor1’]."’, ‘". $_POST[‘link’] ."’);"); $usr_perm = mysql_query(";"); echo’ Plugin dodany Poprawnie!’; header(‘Refresh: 2; url=panel.php’); } } } ?>
<?php include(‘footer.php’);?>[/code] Wyświetlania Newsa:
[code]<?php session_start(); ?> <?php include(‘header.php’); ?>
<?php include(“connect.php”); $query = mysql_query(“select * from news where id=’”.(int)$_GET[‘id’]."’"); // 1 $rekord = mysql_fetch_array($query); echo ’
‘.$rekord[1].’
Autor: ‘.$rekord[3].’ Data: ‘.$rekord[2].’ ‘.$rekord[4].’’.’ Link do pobrania pluginu:’. $rekord[5] .’ ’; // 2 ?>
<?php include(‘footer.php’); ?>
I Logowania:
<?php
include('header.php');
ob_start();
?>
<?php if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST)) { // Drobne zapezpieczenie. Sprawdza czy metoda którą wysyłane jest żadanie to POST $login = $_POST[‘login’]; $password = $_POST[‘password’]; if(empty($login) || empty($password)) // Sprawdzanie czy pola formularza nie są puste { die(’ Wypełnij wszystkie dane.’); } else { include_once(‘config.php’); $mysqli = new mysqli($db[‘host’], $db[‘login’], $db[‘pas’], $db[‘db’]); if($mysqli -> connect_error) die(’ Problem z połączeniem się z bazą danych:’.$mysqli -> connect_error.’[’.$mysqli -> connect_errno.’]’); $login = trim(htmlspecialchars($mysqli -> real_escape_string($login))); $password = md5(trim(htmlspecialchars($mysqli -> real_escape_string($password)))); $result = $mysqli -> query(“SELECT * FROM user
WHERE login = ‘$login’ and password = ‘$password’”); if($result -> num_rows == 1) { session_start(); // Inicjacja sesji $row = $result -> fetch_row(); $_SESSION[‘id’] = $row[0]; $_SESSION[‘nick’] = $row[1]; $_SESSION[‘password’] = $row[2]; $_SESSION[‘mail’] = $row[3]; $_SESSION[‘data’] = $row[4]; $_SESSION[‘ip’] = $row[5]; $_SESSION[‘ranga’] = $row[6]; setcookie(‘islogged’, ‘islogged’, time() + 3600); // czas istenienia ciastka 3600s czyli 1h header(‘Refresh: 2; url=panel.php’); echo’ Zalogowano Pomyślnie!’; } else { echo ’ Brak podanego użytkownika w bazie.’; } } } ?>
<?php include(‘footer.php’); ob_end_flush(); ?> [/code]
A tak wygląda daza danych: http://scr.hu/13cz/zze2s
i http://scr.hu/13cz/p0aeb
tfl
(Konrad Kosowski)
19 Sierpień 2013 12:18
#6
No to byłem bardzo blisko.
Alter:
ALTER TABLE `news` ADD COLUMN `login_require` TINYINT(1) NULL DEFAULT 0 AFTER `link`
Logowanie:
(...)
$_SESSION['id'] = $row[0];
$_SESSION['nick'] = $row[1];
$_SESSION['password'] = $row[2];
$_SESSION['mail'] = $row[3];
$_SESSION['data'] = $row[4];
$_SESSION['ip'] = $row[5];
$_SESSION['ranga'] = $row[6];
$_SESSION['is_logged'] = TRUE;
setcookie('islogged', 'islogged', time() + 3600); // czas istenienia ciastka 3600s czyli 1h
(...)
[/code]
Wyświetlanie newsa:
[code=php]$query = mysql_query(“select * from news where id=’”.(int)$_GET[‘id’]."’"); // 1$rekord = mysql_fetch_array($query); if(!$_SESSION[‘is_logged’] && $rekord[‘login_require’] == 1) { echo ‘Nic tu dla ciebie nie ma’; } else { echo ’
’
.$rekord[1].‘Autor: ‘.$rekord[3].’ Data: ‘.$rekord[2].’’.$rekord[4].’’.‘Link do pobrania pluginu:. $rekord[5] .’">’. $rekord[5] .’’; }
Dodawanie newsa:
<?php session_start(); include('header.php'); ?>
<?php if(empty($_COOKIE[‘islogged’])) { header(‘Refresh: 2; url=login.php’); die(‘Aby skorzystać z panelu należy się zalogować! Za chwilę nastąpi przekierowanie’); } if(isset($_SESSION[‘nick’]) && isset($_SESSION[‘ip’])) { if(($_SESSION[‘ranga’]) == ‘Member’){ echo ‘Nie masz uprawnień!’; } if(($_SESSION[‘ranga’]) == ‘Admin’){ include(‘connect.php’); $editor = ‘editor1’; echo’
Dodawanie Pluginu
Tytuł: Login wymagany: Nie Tak Opis: .$editor.’") Link do pobrania pluginu: ‘; $name = $_POST[‘tytul’]; $con = $_POST[‘editor1’]; $link = $_POST[‘link’]; $autor = $_SESSION[‘nick’]; $login_require = $_POST[‘login_require’]; if($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_POST)) { $query = mysql_query("insert into news values(’’,’".$_POST[‘tytul’]."’,now(),’".$_SESSION[‘nick’]."’,’".$_POST[‘editor1’]."’, ‘". $_POST[‘link’] ."’, ‘". $login_require ."’);"); $usr_perm = mysql_query(";"); echo’Plugin dodany Poprawnie!’; header(‘Refresh: 2; url=panel.php’); } } } ?>
<?php include(‘footer.php’);?>[/code]
W tym ostatnim bezsensu przypisujesz zmiennym wartości z tablicy post. Później ich nie wykorzystujesz.
jakub888
(jakub888)
19 Sierpień 2013 12:29
#7
bardzo dziękuję za pomoc teraz wszystko śmiga jak należy