powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как можно сделать авторизацию PHP MySQL......
25 сообщений из 25, страница 1 из 1
Подскажите как можно сделать авторизацию PHP MySQL......
    #32336100
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного предыстории.
Хочу сделать проект. База выпускников для техникума. Совершенно бесплатно кроме того и идея и реализация моя. А может и ненужно это никому но всеже.
В сроках неограничен документацию читаю но не хватает знаний в том числе идеологии.... Сейчас есть статический сайт и 1500 посещений + письма которые приходят от людей подсказывают мне, что это есть харашо.

Суть.
Есть база MySQL и PHP.
Хочется сделать чтобы после регистрации люди могли сами заносить информацию о себе. Далее чтобы каждий мог менять свои данные ну и модератор тоже. Что касается модератора тот легче а люди могут быть разные в том числе не очень продвинутые...
Хочется сделать дружественный интерфейс чтобы не отпугивать людей сложными процессами.
Например сначала регистрация - потом данные на мыло - потом логин в базу - заполнение данных.
Или форма для добавления совмещена с созданием учетной записи. А потом чтоб человек не забыл отправка данных на почту.
Нужно ли делать отдельные формы для внесения новых данных и для редактирования существующих или можно совмещать?
Наверное нужно отдельное окно для последующих логинов.
В базу нужно добавить поля типа username и password... а дальше вычислять id и привязываться к нему или не стоит.... Нужно ли для этого использовать сессии или кукиши...

У кого есть опыт или идеи подскажите :)
Буду рад посмотреть примеры и куски кода.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32336117
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. разбиваешь задачу на множество мелких подзадач и решаешь каждую отдельно. Сейчас твой вопрос звучит как "Научите меня программировать !"

> Нужно ли делать отдельные формы для внесения новых данных и для
> редактирования существующих или можно совмещать?

у меня эти формы обычно имеют свои различия поэтому я делаю разные формы для регистрации и редактирования.

> а дальше вычислять id и привязываться к нему или не стоит....

ИМХО лучше работать с ID (если я правильно понял что ты имел ввиду). Просто ИМХО это идеологически верно (рабоать через первичный ключ), ну и с числами все-таки работа быстрее идет.

> Нужно ли для этого использовать сессии или кукиши...
Я обеими руками за сессии (о куках забудь, апачевская авторизация также имеет свои недостатки)

Статья по теме: http://www.digiways.com/articles/php/sessauth/
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32336270
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Макс М. спасибо :)

Можно конетчно сказать "научите програмировать" только я сильно сомневаюсь что токим образом можно научить....
Умение приходит с опытом а опыта то у меня и нет :)

Про ID понял, вобщем очевидно хотя сам не допер...

Про сессии тоже понял... спасибо за ссылочку.
Вопрос если используется сессия и во время заполнения формы разрывается связь человек сможет отправить данные или ему придется все с нуля ....
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32336659
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У сессии есть время жизни. Если в течение этого времени жизни юзер не сделает HTTP-запрос (например не пойдет по ссылке, не пошлет форму и т.д.) сессия будет завершена. Время жизни сессии можно изменить.
То есть я могу получить форму, разорвать соединение, заполнить форму, соединиться и нажать кнопку "Отправить форму". Главное, чтобы время простоя не превысило время жизни сессии
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32337247
Sanya_KIO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я это сделал так:
- создаеш таблицу юзеров,
- сверху каждого файла включаеш проверку на авторизацию
што-то вроде того:
<?
require("../admin.inc.php");
require("../../sessions/MySQL_Session_Module.php");
require("../../modules/easytemplate.inc.php");
session_set_save_handler("sess_mysql_open", "", "sess_mysql_read", "sess_mysql_write", "sess_mysql_destroy'", "sess_mysql_gc");
$admin_info = array();
session_register("admin_info");
session_start();
require("../top.php");
?>
------------------------------top.php----------------

<?
echo "<body class = \"maintable\">";
if ($act == 'logout'){
//session_destroy();
$admin_info['login'] = false;
echo '<a href = "'.$URL.'">Ввійти</a>';
exit();
}
if ($admin_info['login']){
$login = $admin_info['name'];
$password = $admin_info['pass'];
}
if ($admin_info['status']=isAdmin($login,$password)){
$admin_info['login'] = true;
$admin_info['name'] = $login;
$admin_info['pass'] = $password;
else {
echo "Неправильний парроль або логін.<a href = \"$URL\">Спробувати ще раз</a>";
exit();
}
?>
- теперь про формы. Проще использовать одну форму для внесения и редактирования. Это делается с использованием шаблонов
$template = new EasyTemplate("form_link.inc.html");
$template->assign("COMMENT",'Лінк повинен починатися з : http://');
$template->assign("aLINK", $link);
$template->assign("ACT", 'set_edit');
$template->assign("TITLE", "Редагування лінку");
$template->assign("aDES", $description);
$template->assign("ERRDES", sprint_error($errors['description']));
$template->assign("ERRLINK", sprint_error($errors['link']));
$template->assign("ID", $row['id']);
$template->easy_print() or die($template->error);

Это позволяет не утрачивать правильные данные при неправильном заполнении некоторых полей
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32337266
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sanya_KIO Спасибi ;)
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32360268
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак возвращаюсь.
После долгих дней и ночей... читания всякого рода писанины у меня появилось некоторое понятие данного процесса.

Я решил начать с простого и вот, что получилось.

База с полями - fio, id, year, username, userpassword, .............

Форма для ввода данных в базу:
Ничего сверхестественного.
Обработчик для этой формы:
-----------------------------
if (isset($submit))
{
$link = mysql_connect("localhost", "root", "")
or die ("Could not connect to server");
mysql_select_db ("mgrt", $link)
or die ("Could not select database");
$sql = "INSERT INTO main (username,userpassword,year,special_id,fio,m_birthday,descr,email1,icq,telefon,vis_data) VALUES
('$username', MD5('$userpassword'),$year,$special_id,'$fio','$m_birthday','$descr','$email1','$icq','$telefon',$vis_data)";

//echo $sql;
$result = mysql_query($sql) or die(mysql_error());

echo "Спасибо! Информация о Вас добавлена в Базу Выпускников МГРТ.\n";
-----------------------------
Тут самое главное мое достижение это MD5('$userpassword')
Пароль в базу добавляется в виде типа 14786f3282f04de5b

Дальше форма логина: передает username и userpassword обработчику:
-----------------------------------
$link = mysql_connect("localhost", "root", "")
or die ("Не подключились к серверу баз данных");
mysql_select_db ("mgrt", $link)
or die ("Не нашли указанную базу");

$query = ("SELECT *,
DATE_FORMAT(main.m_birthday,\"%d.%m.%Y\") AS birthday,
DATE_FORMAT(main.last_info_update,\"%d.%m.%Y-%H:%i\") AS last_info_upd
FROM spr_special, main
WHERE main.special_id = spr_special.id_spr
AND main.vis_data = 1
AND username='$username'
AND userpassword='".md5($userpassword). "'
ORDER BY fio");
$result = mysql_query ($query)
or die ("Query failed");

if ($myrow = mysql_fetch_array($result))
{
echo"ФИО: <b>".$myrow["fio"]."</b><br>\n";
echo"ID: <b>".$myrow["id"]."</b><br>\n";
printf("<a href=..\edit\edit_form.php?id=%s\">Редактировать данные %s</a><br><hr>\n", $myrow["id"],$myrow["fio"]);
}
else
{
echo "Неправильное имя или пароль";
}
mysql_close($link);
-----------------------------------
Здесь я застрял на извлечении пароля userpassword='".md5($userpassword). "'
Если сделать все без md5, вручную вбить пароль, то все срабатывает а вот с md5 никак.
Доку пока найти не могу а то, что нашел в примерах
http://detail.phpclub.net/article/page_password2
вроде то но... подозреваю, что опять гдето пропустил кавычку :)

Подскажите что не так.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32360272
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
upperЕсли сделать все без md5, вручную вбить пароль, то все срабатывает а вот с md5 никак. Что значит "никак" ? Выдает "query failed" или "Неправильное имя или пароль" ?
покажи, как объявлено поле "userpassword" в mysql ? Длинна должна быть 32 символа (varchar(32) или char(32))
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32360373
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишет - "Неправильное имя или пароль"

Похоже проблема в типе поля varchar(32) скорее всего там varchar(16)
вечером посмотрю.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32372348
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ходу у меня возник однин вопрос а как вообще строить работу скрипта с базой.

У меня есть пользователь на базу скажем root (у прова будет user#такой-то) сейчас я его использую в скриптах. И мне кажется что это не есть гуд. А как тогда быть создавать еще одного юзера с правами на просмотр базы?
Но я хочу чтоб люди могли вносить инфу....

Или выносить код конекта в инклюд а тот прятать?

Вобщем как ЭТО делается по уму?
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32372497
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пользователь, который зарегистрировался у тебя на сайте и пользователь БД - это разные пользователи.
upperУ меня есть пользователь на базу скажем root (у прова будет user#такой-то) сейчас я его использую в скриптах если я все правильно понял, то ты делаешь правильно
upperИли выносить код конекта в инклюд а тот прятать? код коннекта выносить в инклюд надо. А вот прятать - не надо. К нему все равно доаступ никто не получит (если на сервере дыр нет)
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32379585
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)

Ну вот решил проверить написанное и выложить на хостинг.... и тут же получил содержани своего connect.inc с именем и паролем.... :)

есть какая то разница для данного файла как его включать через инклюд или через реквир?
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32379590
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. подключать надо через require_once
2. файлы, которые подключаешь е должны быть доступны через WWW.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32387341
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я столкнулся с тем, что практически на каждой второй странице нужно делать логон в базу и конект к базе. Может есть способ перенести это в глобальные переменные??? или это не есть хорошо... ????
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32387829
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причем здесь коннект и логин к глобальным переменным.
Операции, которые нужно делать на каждой странице или почти на каждой выносят в отдельный файл и подключают его везде где надо через require_once

Хотя я предпочитаю в .htaccess прописать:
php_value auto_prepend_file "/home/user/includes/config.php"
и этот файл будет подключаться ко все файлам в текущей папке
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32392622
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял, что пароль, если он преобразован MD5, нельзя показать пользователю, чтобы тот его видел. Или всетаки есть возможность сделать decrypt?
Но если пароль для пользователя невидим значит нужно сделать сервис по которому пароль будет отсылаться на почту введеную в базе. (это размышление верное??)
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32392695
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MD5 - это не шифрование (по научному это называется хеширование).
Фактически это что-то вроде контрольной суммы от текста.
Для примера, возьми 100Кб текст и возьми от него MD5. Получишь строку из 32 символов. Как думаешь, можно ли из этих 32 символов обратно получить 100Кб текста ?

Теперь по паролям.
В таблице хранишь md5. Если юзер забыл пароль, то скрипт должен сгенерировать новый случайный пароль, выслать его на e-mail пользователю а в БД записать MD5 нового пароля
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32417923
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть еще два вопроса.

Вот такой код. Как быть с инклюдом конекта? Если я его включаю рыдом с хидером не работает. приходится писать.
----------------------------------
<?
include_once "../inc/header.php";

if (isset($submit))
{
$link = mysql_connect("localhost", "user", "")
or die ("Не законектились");
mysql_select_db ("test", $link)
or die ("Нет такой базы");

$sql="UPDATE main SET username='$username',.............
-------------------------------------------------
второй пожже :)
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418028
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажи неработающий код и объясни что именно не работает
Вывод ошибок на экран включен ?
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418082
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так:
<?
include_once "../inc/header.php";

if (isset($submit))
{
include_once "../inc/connect.php";

$sql="UPDATE main SET username='$username',.............

Или вот так:
<?
include_once "../inc/header.php";
include_once "../inc/header.php";

if (isset($submit))
{

$sql="UPDATE main SET username='$username',...........

Получаю "No Database Selected" хотя в моих скриптах такой фразы нет.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418086
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот :) опростоволосился :)

Посидел повнимательнее и все заработало.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418090
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как можно отследить если Update не прошел?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?
include_once  "../inc/header.php" ;
include_once  "../inc/connect.php" ;

if (isset($submit))
{

$sql= "UPDATE main SET username='$username',
 year=$year, special_id=$special_id, fio='$fio', m_birthday='$m_birthday',
 descr='$descr', email1='$email1', icq='$icq', telefon='$telefon', vis_data=$vis_data
WHERE id=$id AND userpassword='$userpassword'" 
or die(mysql_error());

$result = mysql_query($sql) or die(mysql_error());

?>
Ваша информация изменена.<br>


Я думал, что or die(mysql_error()) в $sql должен выдать. но заметил, что если пе ввести в форму пароль то получаю "Ваша информация изменена." а в самом деле не обновлена, и не удивительно. Но ор дай не сработал.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418422
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
or die() выполниться если произошла ошибка.
А в твоем случае если не введен пароль, то запрос :
Код: plaintext
1.
2.
3.
$sql= "UPDATE main SET username='$username',
 year=$year, special_id=$special_id, fio='$fio', m_birthday='$m_birthday',
 descr='$descr', email1='$email1', icq='$icq', telefon='$telefon', vis_data=$vis_data
WHERE id=$id AND userpassword='$userpassword'" 
будет выполнен правильно. Но не будет изменено ни одной строки - потому что ни одна строка под условие не попадает.
Это не ошибочный запрос, просто ни одна строка не попала под условие и соответственно ни одна строка не была изменена.

Короче, проблемы в том, что ты плохо проверяешь входнын данные
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418693
Фотография upper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никик не могу въехать в сессии :)

Изменение данных в базе.
Есть страница логина с формой. На ней вводится Имя и Пароль. Эти данные сверяются с базой и если совпарает запускается механизм сессий ???? и переадресовывается на другую страницу вместе с ID пользователя в базе.(Страницу редактирования).
Страница редактирования вот тут затык... сейчас она просто принемает ID и выдает данные в форму. Там они редактируются... чтобы не прошел edit/index.php?id=26 вводится пароль для подтверждения, хоть какая то хащита :)

Собственно я так и не понял с какими параметрами запускать сессию на странице логина... имя пользователя и пароль введенные в форме? вроде логично а еще, что имя для сессии... зачем? Нужно ли обязательно писать куки?

На странице редактирования стартую сессию и мне становится доступным $_POST с именеи и поролем из формы дальше опять же сверяем их с базой но это теория а на практики я ума не приложу чего и куда вставить. Я нашел кучу примеров... навороченных... но мне это понять не по зубам а простого, как у меня, так и не нашел.

Хотел бы знать правильно я понимаю или заблуждаюсь.
...
Рейтинг: 0 / 0
Подскажите как можно сделать авторизацию PHP MySQL......
    #32418715
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Авторизация:
скрипт получает логин и пароль, сверяет их по базе и если все верно, то:
- стартуем сессию.
- в сессию записываем идентификатор пользователя:
Код: plaintext
1.
session_start();
$_SESSION['user_id'] = $id;

- перенаправляем пользователя на страницу редактирования :
Код: plaintext
1.
header( "Location: ./user/edit.php?" .SID);
exit;


в скрипте edit.php:
1. стартруем сессию
2. проверяем, есть ли в сессии переменная user_id
3. если нет - выкидываем пользователя на страницу авторизации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
session_start();
if (!isset($_SESSION['user_id']) || empty($_SESSION['user_id'])) {
   // юзер не прошел авторизацию, выкидываем его
   session_destroy();
   header( "Location: ../auth.php" );
   exit;
} 
$user_id = $_SESSION['user_id'];

Пользователю никак не сможет подделать ID в сессии (если он не имеет непосредственного доступа к серверу, к папке где хранятся файлы с сессиями)
Куки писать не надо, механизм сессий сам об этом позаботится (если нужно будет)
Получить данные о юзере ты сможешь благодаря переменной $user_id

В общем случае пример может выглядеть примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<?
$errors = array(); // сюда пишем ошибки
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   // получаем логин и пароль из формы:
   // проверку данных не делаю, чтобы не усложнять пример

   $login = addslashes($_POST['login']);
   $password = md5($_POST['password']);
   $sql =  "SELECT user_id FROM my_users WHERE login = '$login' AND password = '$password'" ;
   $res = mysql_query($sql); // проверяем данные по БД
   if (!$res ||  mysql_num_rows($res) !=  1 ) {
       $errors['login'] = 'Неправильно введен логин или пароль';
   } 

   if (sizeof($errors) ==  0 )  {
      // авторизация пройдена успешно
      $row = mysql_fetch_row($res);
      session_start();
      $_SESSION['user_id'] = $row[ 0 ]; // записываем в сессию идентификатор юзера
      header( "Location: edit.php?" .SID);
      exit;
  }
}
// выводим форму
?>
<form method= "POST"  action= "<?=$_SERVER['PHP_SELF'];?>" >
<? if (sizeof($errors) >  0 ) { // выводи ошибки
?>
<font color= "#ff0000" ><?=implode( "<br>" ,$errors);?></font>
<? } ?>
<input type= "text"  name= "login" > - логин<br>
<input type= "password"  name= "password" > - пароль<br>
<input type= "submit" > </form>

код не проверял (я сейчас так уже не пишу), логика должна быть правильной, но может где-то описАлся
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как можно сделать авторизацию PHP MySQL......
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]