1

Тема: Авторизация и привилегии к пользователям

Пользователи- админ,и 2 пользователя-один с изменением и удалением данных,другой-только просмотром данных. Как реализовать авторизацию пользователей с этими привилегиями. Назначил привилегии в phpmyadmin. Объяните подробно и дайте конкретные примеры. Пытался сделать соединение к бд 'MYSQL' с таблицами USER.Не понимаю как реализовать((((((((( Помоги пжалста!

2

Re: Авторизация и привилегии к пользователям

Если выставить права на UPDATE и DELETE запросы, то не понятно как можно оперировать данными без права на выполнение SELECT. В этом просто нет логики и с такими правами работать в phpMyAdmin будет нельзя.

Установить пользователю только права SELECT - можно и такой пользователь сможет зайти в phpMyAdmin.

Привилегии уровня базы данных назначаются так:
1) Переходим на страницу привилегий в phpMyAdmin.
2) Жмем "Добавить нового пользователя".
3) Прописываем имя пользователя, хост (обычно localhost), и пароль. Больше ничего не отмечаем и жмем OK.
4) В блоке "Привилегии уровня базы данных" выбираем необходимую БД и назначаем привилегии.

Права на БД MySQL выставлять нельзя!

3

Re: Авторизация и привилегии к пользователям

А есть ли конкретные примеры,сам код?
Пользователей добавил с правами.

4

Re: Авторизация и привилегии к пользователям

skyline89 сказал:

А есть ли конкретные примеры,сам код?

Не понял. Пример какого кода нужен?

5

Re: Авторизация и привилегии к пользователям

Всего-формы с авторизацией пользователей с разными привилегиями,при успешной авторизацией открытие данных таблицы какой нибудь(для админа-возможность удаления и обновления данных,пользователя только просмотра и еще для одного пользователя-и удаление данных )

6

Re: Авторизация и привилегии к пользователям

Если вы о форме входа в phpMyAdmin, то достаточно в его конфигурационном файле (config.inc.php) прописать cookie авторизацию.

$cfg['Servers'][$i]['auth_type'] = 'cookie';

7

Re: Авторизация и привилегии к пользователям

index.php и login.php. На главной странице- форма авторизации (введите логин и пароль). При входе пользователя открывается таблица и возможность изменения данных у каждого пользователя  разные-исходя из привилегий.

8

Re: Авторизация и привилегии к пользователям

skyline89 сказал:

index.php и login.php. На главной странице- форма авторизации (введите логин и пароль). При входе пользователя открывается таблица и возможность изменения данных у каждого пользователя  разные-исходя из привилегий.

Что-то я не понял. Это вопрос или ответ на собственный вопрос?

9

Re: Авторизация и привилегии к пользователям

Это вопрос. Вы можете сделать?

10

Re: Авторизация и привилегии к пользователям

skyline89 сказал:

Вы можете сделать?

Нет. Мы здесь помогаем в решении проблем, а не пишем программы на заказ. smile

Попробуйте начать делать самостоятельно. Будут конкретные вопросы - задавайте.

11

Re: Авторизация и привилегии к пользователям

Я кучу книг просмотрел, сайты все пересмотрел...Все что нашел- все не то. Простые авторизации везде. Нужна реальная помощь. (((

12

Re: Авторизация и привилегии к пользователям

Делайте простую авторизацию, ведь если у пользователя права ограничены, то он сможет выполнять запросы только из выданных ему привилегий. Все что надо - это сделать два поля и передать имя пользователя и пароль из этих полей в функцию mysql_connect() и сохранить эти данные в сессии для последующего использования.

13

Re: Авторизация и привилегии к пользователям

пользователи хранятся в таблице users . Как к ним права назначить тогда?Вот код формы :
index.php
?php
      $link = mysql_connect('localhost', 'root', '') or die("Невозможно соединиться с сервером");
      mysql_select_db('bd', $link) or die("Нет такой базы данных");
?>

<form action="index.php" method="post" enctype="application/form-data">
  <input type="text" value="" name="login" />
  <input type="password" value="" name="passwd" />
  <input type="submit" value="Enter" />
</form>

<div>
<?php    $login = $_POST['login'];
      $passwd = $_POST['passwd'];
      $login = mysql_real_escape_string($login);
      $passwd = mysql_real_escape_string($passwd);
 
      if($login != '' || $passwd != '')
      {
          $sql = "SELECT * FROM users
                  WHERE name = '$login'
                  AND pwd = '$passwd'
                  LIMIT 1";
          $qry = mysql_query($sql, $link);
          if($qry)
          {
            if(mysql_num_rows($qry) > 0)
              {
                  echo 'Доступ разрешен<br />' . "\n";
                  $row = mysql_fetch_array($qry);
                 
               
            }
              else
                  echo 'Доступ запрещен!';
              }
      }
      else
          echo 'Введите логин и пароль';
  ?>
</div>

14

Re: Авторизация и привилегии к пользователям

Не надо выбирать данные из таблицы mysql.users.
Если дынные из формы получены, то сразу пытаемся соединиться.

mysql_connect('localhost', $_POST['login'], $_POST['passwd']) or die('Невозможно соединиться с сервером: ' . mysql_error());

Если пользователь ввел неверные данные, то вернется ошибка.

15

Re: Авторизация и привилегии к пользователям

спасибо!Работает!Теперь буду пробовать сделать удаление,обновление данных таблицы. smile

16

Re: Авторизация и привилегии к пользователям

У меня есть отдельный файл на удаление данных del_data.php
на главной странице с авторизацией есть ссылка на нее.
Не работает подключение-Ведь там в начале производится снова подключение к базе через admin.
$link = @mysql_connect('localhost', 'admin', 'admin') or die("Невозможно соединиться с сервером")
как сделать чтобы заходил через то,что ввели в форме-
mysql_connect('localhost', $_POST['login'], $_POST['passwd'])

17

Re: Авторизация и привилегии к пользователям

skyline89 сказал:

как сделать чтобы заходил через то,что ввели в форме-
mysql_connect('localhost', $_POST['login'], $_POST['passwd'])

Для этого вам необходимо выучить работу механизма сессий и использовать его. Функция session_start().

Коротко это будет так:
Берем данные авторизации отправленные из формы и вкладываем их в сессионные переменные.

session_start();
$_SESSION['login'] = $_POST['login'];
$_SESSION['passwd'] = $_POST['passwd'];

Теперь при подключении мы будем брать данные из сессии проверяя сперва их наличие таким образом.

if (!empty($_SESSION['login']) && !empty($_SESSION['passwd'])) {
  mysql_connect('localhost', $_SESSION['login'], $_SESSION['passwd']);
} else {
  echo 'Вы не авторизованы!';
}

18

Re: Авторизация и привилегии к пользователям

Спасибо)

19

Re: Авторизация и привилегии к пользователям

По одному из примеров в интернете-нашел форму с UPDATE. Не работает. Где ошибки?

UPDATE_DATA.php


<?php
/* Соединяемся с базой данных */
session_start();
if (!empty($_SESSION['login']) && !empty($_SESSION['passwd'])) {
  mysql_connect('localhost', $_SESSION['login'], $_SESSION['passwd']);
} else {
  echo 'Вы не авторизованы!';
}

$db=@mysql_select_db("conference") or die("Нет такой базы данных");
@mysql_query("SET SESSION character_set_results = cp1251;");
@mysql_query("SET SESSION Character_set_client = cp1251;");
@mysql_query("SET SESSION Character_set_results = cp1251;");
@mysql_query("SET SESSION Collation_connection = cp1251_general_ci;");
@mysql_query("SET SESSION Character_set_connection = cp1251;");
$con_query="select `country_id`,`name`,`date`,`place`,`description`,`address`,`tel`,`fax`,`email`,`www` from `conference`";
$con=mysql_query($con_query);
$con_count = mysql_num_rows($con);
$dbName = "conference"; // название базы данных
/* Таблица MySQL, в которой хранятся данные */
$table = "conference";



/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата кнопка редактирования, вносим изменения */
if(@$submit_edit) {
$query = "UPDATE $table SET country='$country_id', name='$name', place='$place', descriprion='$description', address='$address', tel='$tel', fax='$fax', email='$email', www='$www' WHERE id='$update'";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die (mysql_error());
}
/* Заносим в переменную $res всю базу данных */
$query = "SELECT * FROM $table";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Узнаем количество записей в базе данных */
$row = mysql_num_rows($res);

/* Выводим данные из таблицы */
echo ("
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">

<head>

    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\" />

    <title>Редактирование и обновление данных</title>

<style type=\"text/css\">
<!--
body { font: 12px Georgia; color: #666; }
h3 { font-size: 16px; text-align: center; }
table { width: 400px; border-collapse: collapse; margin: 5px auto; background: #E6E6E6; }
td { padding: 3px; vertical-align: middle; }
input { width: 250px; border: solid 1px #CCC; color: #FF6666; }
textarea { width: 250px; height: 100px; border: solid 1px #CCC; color: #FF6666; }
.buttons { width: auto; border: double 1px #666; background: #D6D6D6; color: #000; }
#num { width: 20px; text-align: right; margin-right: 5px; float: right; }
-->
</style>

</head>

<body>

<h3>Редактирование и обновление данных в таблице MySQL</h3>
");

/* Цикл вывода данных из базы конкретных полей */
while ($row = mysql_fetch_array($res)) {
    echo "<form action=\"update_data.php\" method=\"post\" name=\"edit_form\">\n";
    echo "<input type=\"hidden\" name=\"update\" value=\"".$row["id"]."\" />\n";
    echo "<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n";
    echo "<tr>\n";
    echo "<td colspan=\"2\" style=\"border-bottom:solid 1px #CCCCCC;\"><b><i><div id=\"num\">#".$row["id"]."</div>".$row['data']."</b></i></td>\n";
    echo "</tr><tr>\n";
   echo "<td>Страна:</td><td><input type=\"text\" value=\"".$row['country_id']."\" name=\"country_id\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Дата:</td><td><input type=\"text\" value=\"".$row['date']."\" name=\"date\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Название:</td><td><input type=\"text\" value=\"".$row['name']."\" name=\"name\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td>Место:</td><td><input type=\"text\" value=\"".$row['place']."\" name=\"place\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Название:</td><td><input type=\"text\" value=\"".$row['name']."\" name=\"name\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td>Описание:</td><td><textarea name=\"test_mess\">".$row['description']."</textarea></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Адресс:</td><td><input type=\"text\" value=\"".$row['address']."\" name=\"address\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Телефон:</td><td><input type=\"text\" value=\"".$row['tel']."\" name=\"tel\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Факс:</td><td><input type=\"text\" value=\"".$row['fax']."\" name=\"fax\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> Email:</td><td><input type=\"text\" value=\"".$row['email']."\" name=\"email\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td> WWW:</td><td><input type=\"text\" value=\"".$row['www']."\" name=\"www\" /></td>\n";
    echo "</tr><tr>\n";
    echo "<td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"submit_edit\" class=\"buttons\" value=\"Сохранить изменения\" /></td>\n";
    echo "</tr></table></form>\n\n";
}

/* Закрываем соединение */
mysql_close();

/* Выводим ссылку возврата */
echo ("<div style=\"text-align: center; margin-top: 10px;\"><a href=\"index.php\">Вернуться назад</a></div>");

?>

20

Re: Авторизация и привилегии к пользователям

Нет необходимости два раза выбирать одну и ту же базу данных функцией mysql_select_db().

Все эти строки можно заменить одной.

skyline89 сказал:

@mysql_query("SET SESSION character_set_results = cp1251;");
@mysql_query("SET SESSION Character_set_client = cp1251;");
@mysql_query("SET SESSION Character_set_results = cp1251;");
@mysql_query("SET SESSION Collation_connection = cp1251_general_ci;");
@mysql_query("SET SESSION Character_set_connection = cp1251;");
// Меняем на.
mysql_query("SET NAMES 1251");

Конкретное место ошибки вам надо смотреть в логах веб сервера.
В случае трудностей при нахождении места ошибки, проверьте состояние переменных принудительно остановив скрипт.

exit($var); // Где $var - это любая переменная.

21

Re: Авторизация и привилегии к пользователям

UPDATE.php

<?php
session_start();
if (!empty($_SESSION['login']) && !empty($_SESSION['passwd'])) {
  mysql_connect('localhost', $_SESSION['login'], $_SESSION['passwd']);
} else {
  echo 'Вы не авторизованы!';
}
$db_name="bd"; // Database name
$tbl_name="data"; // Table name

mysql_select_db("$db_name")or die("Не могу поключиться к БД");

// get value of id that sent from address bar
$id=$_GET['id'];

// Retrieve data from database
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

$rows=mysql_fetch_array($result);
?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="update_ac.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>&nbsp;</td>
<td colspan="3"><strong> Обновление данных </strong> </td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
<td align="center">&nbsp;</td>
</tr>
<tr>
<td align="center">&nbsp;</td>
<td align="center"><strong>Наименование</strong></td>
<td align="center"><strong>Цена</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td align="center"><input name="name" type="text" id="name" value="<? echo $rows['name']; ?>" size="15"></td>
<td><input name="price" type="text" id="price" value="<? echo $rows['price']; ?>" size="15"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>"></td>
<td align="center"><input type="submit" name="Submit" value="Submit"></td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</form>
</tr>
</table>

<?php

// close connection
mysql_close();

?>







update_ac.php

<?php
session_start();
if (!empty($_SESSION['login']) && !empty($_SESSION['passwd'])) {
  mysql_connect('localhost', $_SESSION['login'], $_SESSION['passwd']);
  echo 'Вы авторизованы';
} else {
  echo 'Вы не авторизованы!';
}

$db_name="bd"; // Database name
$tbl_name="data"; // Table name

// Connect to server and select database.

mysql_select_db("$db_name")or die("Не могу подключиться к БД");

// update data in mysql database
$sql="UPDATE $tbl_name SET name='$name', price='$price' WHERE id ='$id'" ;
$result=mysql_query($sql) or die(mysql_error());

// if successfully updated.
if($result){
echo "Успешно обновлено";
echo "<BR>";
echo "<a href='list_records.php'>Просмотр результатов</a>";
}


else {
echo "error";
}

?>







list_records.php

<?php
session_start();
if (!empty($_SESSION['login']) && !empty($_SESSION['passwd'])) {
  mysql_connect('localhost', $_SESSION['login'], $_SESSION['passwd']);
  echo 'Вы авторизованы';
} else {
  echo 'Вы не авторизованы!';
}
$db_name="bd"; // Database name
$tbl_name="data"; // Table name

// Connect to server and select database.
mysql_select_db("$db_name")or die("cannot select DB");

$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);
?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<table width="400" border="1" cellspacing="0" cellpadding="3">
<tr>
<td colspan="4"><strong>Прайс лист </strong> </td>
</tr>

<tr>
<td align="center"><strong>Наименование</strong></td>
<td align="center"><strong>Цена</strong></td>
<td align="center"><strong>Обновить</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td><? echo $rows['name']; ?></td>
<td><? echo $rows['price']; ?></td>
<td align="center"><a href="update.php?id=<? echo $rows['id']; ?>">Обновить</a></td>
</tr>
<?php
}
?>
</table>
</td>
</tr>
</table>
<?php
mysql_close();
?>



Ошибки не выдает(

22

Re: Авторизация и привилегии к пользователям

Ошибки надо смотреть в журнале веб-сервера Apache, обычно это файл error.log.

В этой строке проблема в переменных $name, $price и $id. Не понятно откуда они берутся. Если это переменные из формы, то надо писать их в виде глобальных переменных $_POST['name'] или $_GET['id']. Можно так же использовать $_REQUEST['name'], чтобы брать данные и из GET и из POST массива.

$sql="UPDATE $tbl_name SET name='$name', price='$price' WHERE id ='$id'" ;

Документация по глобальным массивам PHP.

23

Re: Авторизация и привилегии к пользователям

Все получилось. Разобрался.
Заработало обновление,только ругалось(Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data...)
не правльно было вводить одинаковые имена сессиям-вот правильное решение.
$_SESSION['id_tovara'] = $_POST['id'] ;
$_SESSION['name_tovara'] = $_POST['name'];
$_SESSION['price_tovara'] = $_POST['price'] ; 


http://www.phpfaq.ru/sessions

Спасибо!Теперь могу оформить и сдать лабораторную работу)  smile

24 (изменено: DmitryV, 2010-11-20 00:55:13)

Re: Авторизация и привилегии к пользователям

не правльно было вводить одинаковые имена сессиям-вот правильное решение.
$_SESSION['id_tovara'] = $_POST['id'] ;
$_SESSION['name_tovara'] = $_POST['name'];
$_SESSION['price_tovara'] = $_POST['price'] ;

Это не имя сесии а занесение значений для хранения в сессии
Инициируем сессию

session_start();

Помещаем значение в сессию

$_SESSION['имя_значения'] = "значение";

25

Re: Авторизация и привилегии к пользователям

буду знать)