Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Обработка формы

Ответить
Настройки темы
Обработка формы

Аватара для ][alter

Старожил


Сообщения: 195
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: ][alter
Дата: 06-12-2007
Доброе время суток.

У меня возникла небольшая проблемка при обработке письма и отправке нужному адресату. Дело в том что, для корректной обработке письма требуется указать поле «recipient» (получатель) их числа администраторы, пользователи и т.д. После удаления данного поля из шаблона формы(а оно не как не вписывается в общий дизайн сайта), возникает ошибка «E-Mail: <> not valid». Как я понимаю, не указан адрес получателя. Вот кусок кода отвечающий за данную операцию:



PHP код: Выделить весь код

if (isset($_POST['send'])) {

    
$stop "";

    if (
$is_logged)
    {
        
$name  $member_id['name'];
        
$email $member_id['email'];
    } else {

        
$name $db->safesql(strip_tags($_POST['name']));
        
$email $db->safesql(strip_tags($_POST['email']));
$db->query("SELECT name from " USERPREFIX "_users where LOWER(name) = '".strtolower($name)."' OR LOWER(email) = '".strtolower($email)."'");

        if (
$db->num_rows() > 0) {
             
$stop $lang['news_err_7'];
         }

        
$name strip_tags(stripslashes($_POST['name']));
        
$email strip_tags(stripslashes($_POST['email']));


    }

    
$subject strip_tags(stripslashes($_POST['subject']));
    
$message strip_tags(stripslashes($_POST['message']));
    
$recip intval($_POST['recip']);


 function 
check_email($value) {
  return 
eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$"$value);
 }

 if (empty(
$name)) {
   
$stop .= $lang['feed_err_1'];
 }

 if (empty(
$email)) {
   
$stop .= $lang['feed_err_2'];
 }
 elseif (!
check_email($email)) {
   
$stop .= $lang['feed_err_3'];
 }

 if (empty(
$subject)) {
   
$stop .= $lang['feed_err_4'];
 }

 if (empty(
$message)) {
   
$stop .= $lang['feed_err_5'];
 }

    if ( 
$_POST['sec_code'] != $_SESSION['sec_code_session'] OR !$_SESSION['sec_code_session']) {
       
$stop .= $lang['reg_err_19'];
    }
    
$_SESSION['sec_code_session'] = false;

if (
$stop) {

msgbox ($lang['all_err_1'], "$stop<br><br><a href=\"javascript:history.go(-1)\">$lang[all_prev]</a>");

} else {

    include_once 
ENGINE_DIR.'/inc/mail.class.php';
    
$mail = new dle_mail ($config);

    
$recipient $db->super_query("SELECT name, email, fullname FROM " USERPREFIX "_users WHERE user_id='".$recip."'");

    if (empty(
$recipient['fullname'])) $recipient['fullname'] = $recipient['name'];

     
$row $db->super_query("SELECT template FROM " PREFIX "_email where name='feed_mail' LIMIT 0,1");

     
$row['template'] = stripslashes($row['template']);
     
$row['template'] = str_replace("{%username_to%}",$recipient['fullname'], $row['template']);
     
$row['template'] = str_replace("{%username_from%}",$name$row['template']);
     
$row['template'] = str_replace("{%text%}",$message$row['template']);
     
$row['template'] = str_replace("{%ip%}",$_SERVER['REMOTE_ADDR'], $row['template']);

     
$mail->from $email;

     
$mail->send ($recipient['email'], $subject$row['template']);

     if (
$mail->send_errormsgbox ($lang['all_info'], $mail->smtp_msg);
      else 
msgbox($lang['feed_ok_1'], "$lang[feed_ok_2] ".$recipient['name']." $lang[feed_ok_3] <a href=\"{$config['http_home_url']}\">$lang[feed_ok_4]</a>");

}

} else {


    
$user intval($_GET['user']);

    if (!
$user)
     
$db->query("SELECT name, user_group, user_id FROM " USERPREFIX "_users where user_group < '4' AND allow_mail = '1' ORDER BY user_group");
    else
     
$db->query("SELECT name, user_group, user_id FROM " USERPREFIX "_users where user_id = '$user' AND allow_mail = '1' ORDER BY user_group");

   if (
$db->num_rows())
     {
     
$empf "<select name=\"recip\">";
     
$i 1;
     while (
$row $db->get_array()) {
      
$str $row['name']." (".stripslashes($user_group[$row['user_group']]['group_name']).")";

       if (
$i == 1) {
         
$empf .= "<option selected=\"selected\" value=\"".$row["user_id"]."\">".$str."</option>\n";
       } else {
         
$empf .= "<option value=\"".$row["user_id"]."\">".$str."</option>\n";
       }
        
$i++;
      }
  
$empf .="</select>"

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

Отправлено: 03:01, 06-12-2007

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Подровняйте код, плиз. Разбираться в такой кашке мало кому будет интересно. Думаю, кстати, что после этого Вы и сами решите проблему.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 12:44, 06-12-2007 | #2



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

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


Аватара для ][alter

Старожил


Сообщения: 195
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Цитата Prisoner:
Подровняйте код, плиз. Разбираться в такой кашке мало кому будет интересно. Думаю, кстати, что после этого Вы и сами решите проблему. »
Подправил код. Но все же проблему не решил самостоятельно

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


Отправлено: 23:38, 06-12-2007 | #3


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


Разгадка в функции
PHP код: Выделить весь код

function check_email($value) { 

  return 
eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$"$value); 
 } 

Поменяйте, например, на
PHP код: Выделить весь код

function check_email($value) { 

  return 
eregi("^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$"$value); 
 } 

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:53, 07-12-2007 | #4


Аватара для ][alter

Старожил


Сообщения: 195
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Результат после замены : E-Mail: <> not valid


А нельзя ли, просто прописать в коде, email администратора?

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


Отправлено: 17:39, 10-12-2007 | #5


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


а! точно! извините, я не полностью прочитал сообщение
да, можно:
PHP код: Выделить весь код

function check_email($value) {  

  return 
$value == 'admin@email';


-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.


Последний раз редактировалось Arrest, 11-12-2007 в 18:18.


Отправлено: 22:32, 10-12-2007 | #6


Аватара для ][alter

Старожил


Сообщения: 195
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Извините. Я наверное не правильно описал суть проблемы. Дело в том, как я понял, эта функция проверяет на корректность данные,переданные в переменные с формы?
Но в действительности, адрес получателя (как я понял), запрашивается с базы, зарегистрированных пользователей, администраторов, модераторов и т.д.

Можно ли попробовать, подсунуть Email на стадии отправки письма?

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


Отправлено: 00:52, 12-12-2007 | #7


Аватара для Arrest

runs with scissors


Сообщения: 642
Благодарности: 77

Профиль | Отправить PM | Цитировать


тогда можно удалить
PHP код: Выделить весь код

if (empty($email)) {
   
$stop .= $lang['feed_err_2'];
 }
 elseif (!
check_email($email)) {
   
$stop .= $lang['feed_err_3'];
 } 

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.


Отправлено: 06:25, 12-12-2007 | #8


Аватара для ][alter

Старожил


Сообщения: 195
Благодарности: 15

Профиль | Сайт | Отправить PM | Цитировать


Это ошибки выводящиеся, если не указан Email отправителя, да?
PHP код: Выделить весь код

(empty($email)) {   

  
$stop .= $lang['feed_err_2'];
   }   
elseif (!
check_email($email)) {  
   
$stop .= $lang['feed_err_3'];   } 

Но после удаления этих условий, проблема не исчезает

Вот нашел, в классах функцию отправки письма и то условие:
PHP код: Выделить весь код

function send($to$subject$message)      {

$this->to   preg_replace"/[ \t]+/" ""  $to   );$this->from preg_replace"/[ \t]+/" ""  $this->from );
        
$this->to   preg_replace"/,,/"     ","  $this->to );

$this->from preg_replace"/,,/"     ","  $this->from );
        
$this->to     '<'.preg_replace"#\#\[\]'\"\(\):;/\$!Ј%\^&\*\{\}#" ""$this->to  ).'>';

$this->from   preg_replace"#\#\[\]'\"\(\):;/\$!Ј%\^&\*\{\}#" ""$this->from);
        
$this->subject $subject;
$this->message $message;
$this->message   str_replace"\r" ""$this->message);


$this->compile_headers();

if ( !
preg_match"/^<.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,4})(\]?)>$/"$this->to ) )
        {
                        
$this->smtp_msg "E-Mail: {$this->to} not valid";
                        
$this->send_error true;
                        
$this->to false;
        }

        if ( (
$this->to) and ($this->from) and ($this->subject) )
        {
                if (
$this->mail_method != 'smtp')
                {
                if (!@
mail$this->to$this->subject$this->message$this->mail_headers ))
                {
                
$this->smtp_msg "PHP Mail Error";
                
$this->send_error true;
                }

                } else {
                    
$this->smtp_send();
                }

        }

        
$this->mail_headers "";

    } 

Пожалуйста помогите, где здесь задать адрес единственного получателя?

Отправлено: 02:00, 13-12-2007 | #9


Deadooshka


Сообщения: 2499
Благодарности: 682

Профиль | Отправить PM | Цитировать


PHP код: Выделить весь код

!@mail$this->to$this->subject$this->message$this->mail_headers 

ну вот же функция, перед носом... вместо $this->to адрес "mail@mail.ma"
а в первом коде (первый пост) видимо вот это
PHP код: Выделить весь код

$mail->send ($recipient['email'], $subject$row['template']); 


вместо $recipient['email']

Отправлено: 02:32, 13-12-2007 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Обработка формы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Пакетная обработка видео zhecka Видео и аудио: обработка и кодирование 17 09-12-2010 14:42
Разное - Не корректная обработка букв... Котяр Microsoft Windows 2000/XP 0 13-09-2008 16:57
Обработка видео Antonij Видео и аудио: обработка и кодирование 14 29-03-2007 21:44
*Решено* | Обработка массивов в С++ Shad0VV Программирование и базы данных 7 15-10-2005 19:59
обработка переменных из сгенерированой формы LuckyNET Вебмастеру 6 11-07-2005 14:40




 
Переход