Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: S7 mailing
 
 автор: P@Sol   (23.06.2005 в 13:13)   письмо автору
 
 

ТЗ:
Создаем менеджер почтовой рассылки.
1. Пользователи могут создавать рассылку и рассылать ее (или тока администратор может рассылать?!), подписываться на рассылки:
1.1. Регистрация пользователя
1.2. Подписка пользователя на рассылку
1.3. Отмена подписки на рассылку
1.4. Способ получения - HTML или текст
2. Администратор:
2.1. Изменение списка рассылки
3. Общее:
3.1. Просмотр списка и информации о рассылки
3.2. Просмотр архива

кажеться я зря все это затеял:(

   
 
 автор: JC_Piligrim   (23.06.2005 в 13:49)   письмо автору
 
   для: P@Sol   (23.06.2005 в 13:13)
 

Да-да, и еще почтового демона в придачу, который будет выполнять команды по мылу. Как на [url]subscribe.ru[/url] B-)

Ладно, ладно, это я так... А идея создать толковый и функциональный скрипт отличная! Желаю вам успехов!

   
 
 автор: cernos   (23.06.2005 в 13:51)   письмо автору
 
   для: 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 адрессов (адреса которых не существует, для того чтобы вам не приходило обратное письмо)

Таким я вижу модную рассылку, которая действительно пригодится пользователям!

   
 
 автор: P@Sol   (23.06.2005 в 14:00)   письмо автору
 
   для: 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 можно вроде просмотреть и в текстовом варианте?

а по второму пункту, а если пользователь забыл пароль? мне кажется это не правильный подход....

   
 
 автор: JC_Piligrim   (23.06.2005 в 14:08)   письмо автору
 
   для: P@Sol   (23.06.2005 в 14:00)
 

Пароль пусть назначает пользователь. Просто нужно предупредить его, что простой пароль может поспособствовать легкому хищению аккаунта. Дать пару советов.

   
 
 автор: cernos   (23.06.2005 в 14:11)   письмо автору
 
   для: 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 можно вроде просмотреть и в текстовом варианте? - ТУТ спорить не буду!

   
 
 автор: P@Sol   (23.06.2005 в 14:17)   письмо автору
 
   для: cernos   (23.06.2005 в 14:11)
 

>VARCHAR( 100 ) - можно сделать просто text
>Такого плана
>'User_login' text NOT NULL , //инфа о логине
>
а что быстрее? и меньше места занимает?

>Вы ему на e-mail высылаете пароль, удалил это письмо, как бы
>так его проблемы!
его, не его, а расхлебывать нам...надо искать другой подход...или высылать повторно пароль

>ТУТ спорить не буду!
т.е. я прав? или я не прав?

Primary key - проверяет чтобы записи были уникальные..нет? я нигде не видел что нельзя к тексту

   
 
 автор: cernos   (23.06.2005 в 14:43)   письмо автору
 
   для: 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 "Такое имя уже существует!";
}



Ну посмотрим что скажет на это Хеопс

   
 
 автор: P@Sol   (23.06.2005 в 14:47)   письмо автору
 
   для: cernos   (23.06.2005 в 14:43)
 

я и коде проверяю:)

   
 
 автор: P@Sol   (24.06.2005 в 10:15)   письмо автору
 
   для: cernos   (23.06.2005 в 13:51)
 

для администрирования стоит делать отдельную страницу или просто дополнить меню соответствующими пунктами?

   
 
 автор: cernos   (24.06.2005 в 10:19)   письмо автору
 
   для: P@Sol   (24.06.2005 в 10:15)
 

Думаю что необходимо сделать отдельную страницу!

   
 
 автор: P@Sol   (24.06.2005 в 10:27)   письмо автору
 
   для: cernos   (24.06.2005 в 10:19)
 

да, я тоже так подумал...

   
 
 автор: P@Sol   (23.06.2005 в 15:09)   письмо автору
 
   для: 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 в 15:21)   письмо автору
 
   для: 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;
    }
}
?>

   
 
 автор: cernos   (23.06.2005 в 15:40)   письмо автору
 
   для: 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();
}
?>

Конечно лучше создать еще фугкцию которая будет выводит ошибки!

   
 
 автор: P@Sol   (24.06.2005 в 11:43)   письмо автору
 
   для: cernos   (23.06.2005 в 15:40)
 

а перед тем как заносить в бд больше ничего делать не надо, кроме addslashes()? надо ли использовать htmlspecialchars() и strip_tags()?

   
 
 автор: P@Sol   (24.06.2005 в 09:57)   письмо автору
 
   для: 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   (24.06.2005 в 10:26)   письмо автору
 
   для: 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

такой запрос считается нормальным?

   
 
 автор: glsv (Дизайнер)   (24.06.2005 в 12:13)   письмо автору
 
   для: P@Sol   (24.06.2005 в 10:26)
 

>такой запрос считается нормальным?
Хм… а нельзя чуть перепроектировать базу, добавив избыточность, для того, чтобы избавится из многотабличных запросов. MySQL начинает жутко тормозить когда в запросе участвует больше 2 таблиц.

   
 
 автор: P@Sol   (24.06.2005 в 12:24)   письмо автору
 
   для: glsv (Дизайнер)   (24.06.2005 в 12:13)
 

по-моему по другому никак...таблица с полльзователями, таблица со списком рассылок и таблица в которой пользователь сопоставляеться с выбранной рассылкой

update: тут подумал...т.е. лучше вместо id пользователя использовать его имя?

   
 
 автор: P@Sol   (24.06.2005 в 14:26)   письмо автору
 
   для: P@Sol   (23.06.2005 в 13:13)
 

Сделал:
1. Авторизация пользователей
2. Высолка нового пароля при потере старого на e-mail указаный при регистрации
3. Вывод рассылок, на которые подписан пользователь
4. Редактирование профиля пользователя
5. Смена пароля у пользователя
6. Изменение списка рассылок (почти)

можно ли выложить сюда скрипт, что бы вы сказали где и что следует исправить?

p.s. дизайн отсутствует:)

   
 
 автор: cernos   (24.06.2005 в 16:20)   письмо автору
 
   для: P@Sol   (24.06.2005 в 14:26)
 

Конечно можно, даже нужно! :))

   
 
 автор: P@Sol   (24.06.2005 в 16:33)   письмо автору
 
   для: cernos   (24.06.2005 в 16:20)
 

вот скрипт

   
 
 автор: P@Sol   (24.06.2005 в 16:34)   письмо автору
887 байт
 
   для: cernos   (24.06.2005 в 16:20)
 

вот sql
есть один пользователь 123, пароль 123456

   
 
 автор: P@Sol   (27.06.2005 в 09:04)   письмо автору
 
   для: cernos   (24.06.2005 в 16:20)
 

ну и что можно сказать?

   
 
 автор: P@Sol   (28.06.2005 в 11:57)   письмо автору
 
   для: cernos   (24.06.2005 в 16:20)
 

>Конечно можно, даже нужно! :))

Я выложил, а Вы молчите, а я жду...

   
 
 автор: P@Sol   (01.07.2005 в 09:54)   письмо автору
 
   для: cernos   (24.06.2005 в 16:20)
 

cheops, расскажите правильно ли я делаю...

   
 
 автор: cheops   (01.07.2005 в 10:17)   письмо автору
 
   для: P@Sol   (01.07.2005 в 09:54)
 

А, так это мне :))) хорошо, сегодня вечером его посмотрю, всё, что найду выложу сюда (или в новую тему - эта уже длинная).

   
 
 автор: P@Sol   (01.07.2005 в 10:42)   письмо автору
 
   для: cheops   (01.07.2005 в 10:17)
 

спасибо огромное:)

   
 
 автор: cheops   (01.07.2005 в 21:03)   письмо автору
 
   для: P@Sol   (01.07.2005 в 10:42)
 

Давайте переедем в новую тему http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5138

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования