|
|
|
| ТЗ:
Создаем менеджер почтовой рассылки.
1. Пользователи могут создавать рассылку и рассылать ее (или тока администратор может рассылать?!), подписываться на рассылки:
1.1. Регистрация пользователя
1.2. Подписка пользователя на рассылку
1.3. Отмена подписки на рассылку
1.4. Способ получения - HTML или текст
2. Администратор:
2.1. Изменение списка рассылки
3. Общее:
3.1. Просмотр списка и информации о рассылки
3.2. Просмотр архива
кажеться я зря все это затеял:( | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| | Да-да, и еще почтового демона в придачу, который будет выполнять команды по мылу. Как на [url]subscribe.ru[/url] B-)
Ладно, ладно, это я так... А идея создать толковый и функциональный скрипт отличная! Желаю вам успехов! | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| | Мы вам все поможем...
Твой список: думаю лучше его сделать таким:
1.форма на подписку рассылки
(присутствует поле e-mail и кнопка создать рассылку)
2.Пользователь может отказаться от рассылки, указав e-mail и пароль высланный пользователи при подписке на рассылку (пароль хранить в БД, генерация пароля случайная)
3.Способ получения - HTML и текст (Или тут не совместимо, т.к. пользователь может дома смотреть через веб-интерфейс а дома через прогу)
------------------------
Далее всё что касается страницы админа
1.Список пользователей, которым осуществляется рассылка
2.Ввод сообщения (содержание письма которое рассылается)
2.1 Ввод в HTML форме, приветствуются теги
2.2 Автоматическое создание текстового сообщения, путем убирания HTML тегов
2.3 Возможность прикрепления файла
3.Дата рассылки (отослать в указанное время) (Необязательно)
4.Периодичность рассылки (через 3-5 дней) (Необяз-но)
5.Удаление мертвых e-mail адрессов (адреса которых не существует, для того чтобы вам не приходило обратное письмо)
Таким я вижу модную рассылку, которая действительно пригодится пользователям! | |
|
|
|
|
|
|
|
для: cernos
(23.06.2005 в 13:51)
| | спаисбо:) я хочу сделть этот скрипт максимум оптимизированным...начну с бд
'User_login' VARCHAR( 100 ) NOT NULL , //инфа о логине
'User_email' VARCHAR( 100 ) NOT NULL , //его почтовый ящик
'User_type' VARCHAR( 1 ) NOT NULL , // тип T или H
'User_pass' VARCHAR( 16 ) NOT NULL , // пароль
'User_admin' TINYINT NOT NULL , //админ или нет?
PRIMARY KEY ( 'User_name' )
|
стоит использовать varchar или char?
>3.Способ получения - HTML и текст (Или тут не совместимо, т.к. пользователь
>может дома смотреть через веб-интерфейс а дома через прогу)
т.е. ему два письма будет приходить? т.к. html можно вроде просмотреть и в текстовом варианте?
а по второму пункту, а если пользователь забыл пароль? мне кажется это не правильный подход.... | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 14:00)
| | Пароль пусть назначает пользователь. Просто нужно предупредить его, что простой пароль может поспособствовать легкому хищению аккаунта. Дать пару советов. | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 14:00)
| | VARCHAR( 100 ) - можно сделать просто text
Такого плана
'User_login' text NOT NULL , //инфа о логине
PRIMARY KEY ( 'User_name' ) - это поле содержит id (Оно поле типа int() )
Если нет, то PRIMARY KEY ( 'User_name' ) - работать не будет в таком случае не используйте PRIMARY KEY.
а по второму пункту, а если пользователь забыл пароль? мне кажется это не правильный подход....
Вы ему на e-mail высылаете пароль, удалил это письмо, как бы так его проблемы!
т.е. ему два письма будет приходить? т.к. html можно вроде просмотреть и в текстовом варианте? - ТУТ спорить не буду! | |
|
|
|
|
|
|
|
для: cernos
(23.06.2005 в 14:11)
| | >VARCHAR( 100 ) - можно сделать просто text
>Такого плана
>'User_login' text NOT NULL , //инфа о логине
>
а что быстрее? и меньше места занимает?
>Вы ему на e-mail высылаете пароль, удалил это письмо, как бы
>так его проблемы!
его, не его, а расхлебывать нам...надо искать другой подход...или высылать повторно пароль
>ТУТ спорить не буду!
т.е. я прав? или я не прав?
Primary key - проверяет чтобы записи были уникальные..нет? я нигде не видел что нельзя к тексту | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 14:17)
| | >ТУТ спорить не буду!
>т.е. я прав? или я не прав? Правы!
>Primary key - проверяет чтобы записи были уникальные..нет? я нигде не видел что нельзя к тексту
Честно впервые вижу.
Вообще primary key - первичный ключ и используют его в основном для id
Т.е. для int(), которые он сам автоматом прибавляет.
А чтобы имена были уникальные, необходимо проверять средствами PHP и запросами типа того
$query=mysql_query("select name from table where name='".$name."';");
после получения результата проверяем сколько получено строчек
if(mysql_num_rows($query)===0){
echo "Совпадений нет";
}
else
{
echo "Такое имя уже существует!";
}
Ну посмотрим что скажет на это Хеопс | |
|
|
|
|
|
|
|
для: cernos
(23.06.2005 в 14:43)
| | я и коде проверяю:) | |
|
|
|
|
|
|
|
для: cernos
(23.06.2005 в 13:51)
| | для администрирования стоит делать отдельную страницу или просто дополнить меню соответствующими пунктами? | |
|
|
|
|
|
|
|
для: P@Sol
(24.06.2005 в 10:15)
| | Думаю что необходимо сделать отдельную страницу! | |
|
|
|
|
|
|
|
для: cernos
(24.06.2005 в 10:19)
| | да, я тоже так подумал... | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| |
<?
function login($username, $password)
{
$conn = db_connect();
if (!$conn)
return 0;
$username = addslashes($username);
$password = addslashes($password);
$result = mysql_query("select * from user
where User_login = '$username'
and User_pass = md5('$password')");
if (!$result)
return 0;
if (mysql_num_rows($result)>0)
return 1;
else
return 0;
}?>
|
надо что-нибудь еще или такая авторизация достаточно защищенная? | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| | и вот такой код, можно оптимизировать?
<?
session_start();
$username = $_POST["username"];
$passwd = $_POST["passwd"];
if ($username && $passwd)
{
if (login($username, $passwd))
{
$_SESSION['valid_user'] = $username;
}
else
{
do_html_header("Ошибка!");
echo "Вы ввели не правильный логин и пароль.";
do_html_url("index.php", "Войти");
do_html_footer();
exit;
}
}?>
|
| |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 15:21)
| | Код норма, зачем оптимизировать? Тут нечего оптимизировать...
Конечно
if ($username && $passwd)
{
if (login($username, $passwd))
{
$_SESSION['valid_user'] = $username;
}
else
{
do_html_header("Ошибка!");
echo "Вы ввели не правильный логин и пароль.";
do_html_url("index.php", "Войти");
do_html_footer();
exit;
}
|
Вот это всё можно было заключить в функцию
чтоб не повторяться.
Примерно вот так:
<?
session_start();
function login($username, $password)
{
$conn = db_connect();
if (!$conn)
return 0;
$username = addslashes($username);
$password = addslashes($password);
$result = mysql_query("select * from user
where User_login = '$username'
and User_pass = md5('$password')");
if (!$result)
do_html_header("Ошибка!");
echo "Ошибка при выборке данных из таблицы пользователя";
exit();
if (mysql_num_rows($result)>0)
$_SESSION['valid_user'] = $username;
else
do_html_header("Ошибка!");
echo "Вы ввели не правильный логин и пароль.";
do_html_url("index.php", "Войти");
do_html_footer();
exit();
}?>
|
а вторая страница выглядеть уже будет так:
<?
session_start();
login($_POST["username"], $passwd = $_POST["passwd"]);
}?>
Третья страница для проверки безопасности (выполенен вход или нет)
<?
session_start();
if(empty($_SESSION['valid_user']))
{
echo "Вам доступ сюда запрещен...";
exit();
}
?>
|
Конечно лучше создать еще фугкцию которая будет выводит ошибки! | |
|
|
|
|
|
|
|
для: cernos
(23.06.2005 в 15:40)
| | а перед тем как заносить в бд больше ничего делать не надо, кроме addslashes()? надо ли использовать htmlspecialchars() и strip_tags()? | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| |
<?
if(isset($_SESSION['normal_user']))
{
$menu[0] = "Главная";
$menu[1] = "Профиль";
$menu[2] = "Выход";
$url[0] = "index.php";
$url[1] = "profiles.php";
$url[2] = "logout.php";
}
else if (isset($_SESSION['admin_user']))
{
$menu[0] = "Главная";
$menu[1] = "Админка";
$menu[2] = "Профиль";
$menu[3] = "Выход";
$url[0] = "index.php";
$url[1] = "admin/index.php";
$url[2] = "profiles.php";
$url[3] = "logout.php";
}
else $menu= array();
|
можно ли оптимизировать? | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| |
'list' (
'List_id' INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
'List_name' VARCHAR( 25 ) NOT NULL ,
'List_des' VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( 'List_id' )
|
'sub_list' (
'User_id' INT( 5 ) NOT NULL ,
'List_id' INT( 5 ) NOT NULL ,
INDEX ( 'User_id' , 'List_id' )
);
|
таблица sub_list связывает рассылки с человеком.. нужны ли index?
select list.List_name, list.List_id
from list, user, user_list
where user.User_name = '$username'
and user.User_id = user_list.User_id
and user.List_id = list.List_id order by list.List_name
|
такой запрос считается нормальным? | |
|
|
|
|
|
|
|
для: P@Sol
(24.06.2005 в 10:26)
| | >такой запрос считается нормальным?
Хм… а нельзя чуть перепроектировать базу, добавив избыточность, для того, чтобы избавится из многотабличных запросов. MySQL начинает жутко тормозить когда в запросе участвует больше 2 таблиц. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(24.06.2005 в 12:13)
| | по-моему по другому никак...таблица с полльзователями, таблица со списком рассылок и таблица в которой пользователь сопоставляеться с выбранной рассылкой
update: тут подумал...т.е. лучше вместо id пользователя использовать его имя? | |
|
|
|
|
|
|
|
для: P@Sol
(23.06.2005 в 13:13)
| | Сделал:
1. Авторизация пользователей
2. Высолка нового пароля при потере старого на e-mail указаный при регистрации
3. Вывод рассылок, на которые подписан пользователь
4. Редактирование профиля пользователя
5. Смена пароля у пользователя
6. Изменение списка рассылок (почти)
можно ли выложить сюда скрипт, что бы вы сказали где и что следует исправить?
p.s. дизайн отсутствует:) | |
|
|
|
|
|
|
|
для: P@Sol
(24.06.2005 в 14:26)
| | Конечно можно, даже нужно! :)) | |
|
|
|
|
|
|
|
для: cernos
(24.06.2005 в 16:20)
| | вот скрипт | |
|
|
|
|
 887 байт |
|
|
для: cernos
(24.06.2005 в 16:20)
| | вот sql
есть один пользователь 123, пароль 123456 | |
|
|
|
|
|
|
|
для: cernos
(24.06.2005 в 16:20)
| | ну и что можно сказать? | |
|
|
|
|
|
|
|
для: cernos
(24.06.2005 в 16:20)
| | >Конечно можно, даже нужно! :))
Я выложил, а Вы молчите, а я жду... | |
|
|
|
|
|
|
|
для: cernos
(24.06.2005 в 16:20)
| | cheops, расскажите правильно ли я делаю... | |
|
|
|
|
|
|
|
для: P@Sol
(01.07.2005 в 09:54)
| | А, так это мне :))) хорошо, сегодня вечером его посмотрю, всё, что найду выложу сюда (или в новую тему - эта уже длинная). | |
|
|
|
|
|
|
|
для: cheops
(01.07.2005 в 10:17)
| | спасибо огромное:) | |
|
|
|
|