CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
n0lik

Форма обратной связи

Recommended Posts

Всем привет.

Есть у меня форма обратной связи на ПХП

<?

error_reporting(0);

function show_form()

{

?>

                        <table width="100%" border="0" cellspacing="0" cellpadding="0">

                          <tr>

                            <td width="20" align="left" valign="top"><img src="{THEME}/images/dlet_abl01.gif" width="20" height="30" alt="" /></td>

                            <td align="left" valign="top" class="abl02"><table width="100%" border="0" cellpadding="0" cellspacing="0" class="abl121">

                                <tr>

                                  <td width="40" height="30"><img src="{THEME}/images/spacer.gif" width="40" height="1" alt="" /></td>

                                  <td align="left" class="ntitle">Обратная связь</td>

                                </tr>

                              </table></td>

                            <td width="20" align="right" valign="top"><img src="{THEME}/images/dlet_abl13.gif" width="20" height="30" alt="" /></td>

                          </tr>

                          <tr>

                            <td width="20" align="left" valign="top"><img src="{THEME}/images/dlet_abl51.gif" width="20" height="30" alt="" /></td>

                            <td align="left" valign="top" class="abl22"><table width="100%" border="0" cellspacing="0" cellpadding="0">

                                <tr>

                                  <td height="30" class="abl221">&nbsp;</td>

                                </tr>

                              </table></td>

                            <td width="20" align="right" valign="top"><img src="{THEME}/images/dlet_abl53.gif" width="20" height="30" alt="" /></td>

                          </tr>

                          <tr>

                            <td width="20" align="left" valign="top" class="abl31"><img src="{THEME}/images/spacer.gif" width="20" height="1" alt="" /></td>

                            <td align="left" valign="top" class="stext">


<form action="" method=post>

                                    <table width="98%" border="0" cellpadding="0" cellspacing="0">

                                      <tr>

                                        <td width="130" height="25">Ваше имя:</td>

                                        <td><input class="f_input" type="text" name="input_name[0]" size="45" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][0])), 0, 500);?>"><input type="hidden" name="check[]" value="1"></td>

                                      </tr>


                                      <tr>

                                        <td width="130" height="25">E-Mail:</td>

                                        <td><input class="f_input" type="text" name="input_name[1]" size="45" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][1])), 0, 500);?>"><input type="hidden" name="check[]" value="1"></td>

                                      </tr>

                                      <tr>

                                        <td width="130" height="25">Телефон:</td>

                                        <td><input class="f_input" type="text" name="input_name[2]" size="45" value="<?=substr(htmlspecialchars(trim($_POST['input_name'][2])), 0, 500);?>"><input type="hidden" name="check[]" value="1"></td>

                                      </tr>

                                      <tr>

                                        <td width="130">Сообщение:</td>

                                        <td><textarea class="f_textarea" style="width:420px; height:160px" rows="" cols="" name="input_name[3]" ><?=substr(htmlspecialchars(trim($_POST['input_name'][3])), 0, 10000);?></textarea><input type="hidden" name="check[]" value="1"></td>

                                      </tr>

                                      <tr>

                                        <td width="130" height="25">&nbsp;</td>

                                        <td><input type="submit" value="Отправить" name="submit"></td>

                                      </tr>

                                      <tr>

                                        <td width="130" height="25">&nbsp;</td>

                                        <td><b style="color:red;">* Помечены поля, которые необходимо заполнить!</b></td>

                                      </tr>

                                    </table>

</form>

                            </td>

                            <td width="20" align="right" valign="top" class="abl33"><img src="{THEME}/images/spacer.gif" width="20" height="1" alt="" /></td>

                          </tr>

                          <tr>

                            <td width="20" align="left" valign="top"><img src="{THEME}/images/dlet_abl31.gif" width="20" height="5" alt="" /></td>

                            <td><img src="{THEME}/images/spacer.gif" width="1" height="5" alt="" /></td>

                            <td width="20" align="right" valign="top"><img src="{THEME}/images/dlet_abl33.gif" width="20" height="5" alt="" /></td>

                          </tr>

                          <tr>

                            <td width="20" align="left" valign="top"><img src="{THEME}/images/dlet_abl41.gif" width="20" height="40" alt="" /></td>

                            <td class="abl42">&nbsp;</td>

                            <td width="20" align="right" valign="top"><img src="{THEME}/images/dlet_abl43.gif" width="20" height="40" alt="" /></td>

                          </tr>

                        </table>

                        <br />

                        <br />

<?

}

function complete_mail() {


        $empty_input[] = 'Имя';

        $empty_input[] = 'E-mail';

        $empty_input[] = 'Телефон';

        $empty_input[] = 'Сообщение';

        for ($i=0; $i<count($_POST['input_name']); $i++) {

              $_POST['input_name'][$i] = substr(htmlspecialchars(trim($_POST['input_name'][$i])), 0, 100000);

              if(substr(htmlspecialchars(trim($_POST['check'][$i])), 0, 1) == 1) {

                 if(empty($_POST['input_name'][$i])) {

                         $sendemail = 'No';

                         echo '<br /><b>Необходимо заполнить поле '.$empty_input[$i].'!</b>';


                 }

              }

        }

        if($sendemail == 'No') show_form();

        $mess = '';

        $mess .= '<b>Имя: </b>'.$_POST['input_name'][0].'<br />';

        $mess .= '<b>E-mail: </b>'.$_POST['input_name'][1].'<br />';

        $mess .= '<b>Телефон: </b>'.$_POST['input_name'][2].'<br />';

        $mess .= '<b>Сообщение: </b>'.$_POST['input_name'][3].'<br />';


        // подключаем файл класса для отправки почты

        require 'class.phpmailer.php';

        $mail = new PHPMailer();

        $mail->From = 'mail@mail.ru';                    // от кого email

        $mail->FromName = 'Пользователь сайта';          // от кого имя

        $mail->AddAddress('mail@mail.ru', 'Вася');       // кому - адрес, Имя

        $mail->IsHTML(true);                             // выставляем формат письма HTML

        $mail->Subject = 'Письмо с сайта';               // тема письма

        $mail->Body = $mess;


        if($sendemail != 'No'){

              // отправляем наше письмо

              if (!$mail->Send()) die ('Mailer Error: '.$mail->ErrorInfo);

              echo 'Спасибо! Ваше письмо отправлено.';

        }

}

if (!empty($_POST['submit'])) complete_mail();

else show_form();

?>
Эта форма работает как положено. А как мне сделать что бы когда приходит письмо ко мне из этой формы, то в поле кто отправил и имя того кто отправил были не те что я вбил в фому (// от кого email, // от кого имя), а те что вбивает пользователь? И ещё один момент, если кнопка отправить у меня в коде выглядит так:
<input type="submit" value="Отправить" name="submit">
то всё отправляется, а вот если я делаю графическую кнопку вот так:
<input name="submit" type="image" style="width:80px; height:20px; cursor:hand" src="{THEME}/images/dlet_bttn_submit.gif" alt="submit" />

то не отправляет, что я не так делаю?

Edited by n0lik

Share this post


Link to post
Share on other sites

Только сегодня поставил такой модуль))) Все работает... http://www.web-sdelka.ru/index.php?do=form&id=1 :D

Но как ты советовал мне в соседнем поиске, могу только посоветовая воспользоваться поиском и желанием :rolleyes:

Share this post


Link to post
Share on other sites

Только сегодня поставил такой модуль))) Все работает... http://www.web-sdelk...hp?do=form&id=1

Какой модуль? У меня просто форма обратной связи на ПХП и не более того.

Но как ты советовал мне в соседнем поиске, могу только посоветовая воспользоваться поиском и желанием

Зачем мне модуль? :lol: Мне нужен совет непосредственно по этой форме связи.

Edited by n0lik

Share this post


Link to post
Share on other sites

Видимо, в этом причина:

value="Отправить"
сабмит не должен быть пустым из условия:
if (!empty($_POST['submit'])) complete_mail();

else show_form();

Share this post


Link to post
Share on other sites

zgr, спасибо большое.

Не подскажите, а как быть вот с этим?

А как мне сделать что бы когда приходит письмо ко мне из этой формы, то в поле кто отправил и имя того кто отправил были не те что я вбил в фому (// от кого email, // от кого имя), а те что вбивает пользователь?

Share this post


Link to post
Share on other sites

Это делается примерно так:

if ($is_logged==1) $login = true; else $login = false;
или аналогично, т.е. делаем проверку на того, кто залогинен, либо на логин и конкретную группу пользователей, которым разрешено отправлять сообщение на почту.
if ($is_logged==1 && $user_group[$member_id['user_group']]['allow_admin']) $login = true; else $login = false;
Далее вытаскиваем нужные данные юзера (ник, имя, айди, фото и т.д.), вот весь список массива:
if ($login) $nik = $member_id['name']; else $nik = 'unknow';
Остальные по аналогии, думаю, догадаетесь :) Чтобы наши переменные заработали в вашей функции, их нужно объявить:
function show_form() {

  global $is_logged, $user_group;

  if ($is_logged==1) $login = true; else $login = false;

  if ($login) $nik = ''; else $nik = 'unknow';

  ...

Теперь подставьте полученные переменные (например, $nik) вместо тех, что сейчас в форме.

Вот и всё. :)

П.С. Если грамотно делать, чтоб не спамили, не взламывали и т.д., то нужно проверять очень большой список данных: ЮзерАгент, айпи, отмечать кто и когда и что отправляет, какие сообщения и т.д. - это может занять пару недель работы и километр кода. Думаю, далее разберетесь сами, уже есть от чего отталкиваться.

//Не зарегистрированый юзер
$member_id = Array([user_group] => 5)
//Зарегистрированый юзер $member_id = Array ( => zgr@bk.ru [password] => 95e1cd33d [name] => Администратор [user_id] => 1 [news_num] => 91 [comm_num] => 5 [user_group] => 1 [lastdate] => 1278685014 [reg_date] => 1271399014 [banned] => [allow_mail] => 1 [info] => Простой христианско-советский рабочий парень. [signature] => Хорошо, когда собака друг, плохо, когда друг - собака. [foto] => foto_1.png [fullname] => Зайва Игорь Леонидович [land] => Казахсттан, Алматы [icq] => 463768885 [favorites] => [pm_all] => 0 [pm_unread] => 0 [time_limit] => [xfields] => [allowed_ip] => [hash] => [logged_ip] => 0.0.0.0 [restricted] => 0 [restricted_days] => 0 [restricted_date] => ) $user_group = Array( [1] => Array( [id] => 1 [group_name] => Администраторы [allow_cats] => all [allow_adds] => 1 [cat_add] => all [allow_admin] => 1 [allow_addc] => 1 [allow_editc] => 1 [allow_delc] => 1 [edit_allc] => 1 [del_allc] => 1 [moderation] => 1 [allow_all_edit] => 1 [allow_edit] => 1 [allow_pm] => 1 [max_pm] => 50 [max_foto] => 101 [allow_files] => 1 [allow_hide] => 1 [allow_short] => 1 [time_limit] => 0 [rid] => 1 [allow_fixed] => 1 [allow_feed] => 1 [allow_search] => 1 [allow_poll] => 1 [allow_main] => 1 [captcha] => 0 [icon] => /templates/isle/images/icon_1.png [allow_modc] => 0 [allow_rating] => 1 [allow_offline] => 1 [allow_image_upload] => 1 [allow_file_upload] => 1 [allow_signature] => 1 [allow_url] => 1 [news_sec_code] => 0 [allow_image] => 1 [max_signature] => 500 [max_info] => 1000 [admin_addnews] => 1 [admin_editnews] => 1 [admin_comments] => 1 [admin_categories] => 1 [admin_editusers] => 1 [admin_wordfilter] => 1 [admin_xfields] => 1 [admin_userfields] => 1 [admin_static] => 1 [admin_editvote] => 1 [admin_newsletter] => 1 [admin_blockip] => 1 [admin_banners] => 1 [admin_rss] => 1 [admin_iptools] => 1 [admin_rssinform] => 1 [admin_googlemap] => 1 [allow_html] => 1 [group_prefix] => [group_suffix] => [allow_subscribe] => 1 [allow_image_size] => 1 [cat_allow_addnews] => all ) [2] => Array(...) ... [5] => Array(...)
Делаем проверку, чтобы вытащить, например, ник для отправки в форме:
Edited by zgr

Share this post


Link to post
Share on other sites

zgr, вы меня не так поняли, у меня форма ни как не связанна с DLE, это обычная форма на PHP и когда мне приходит письмо с этой формы, то данные от кого оно пришло берутся вот эти

        $mail->From = 'mail@mail.ru';                    // от кого email

        $mail->FromName = 'Пользователь сайта';          // от кого имя
то есть те которые я вбил в php код, а мне надо, что бы вместо мыла и имени которые прописаны в форме было имя и мыло того, кто отправляет мне письмо, то есть вот эти
        $mess .= '<b>Имя: </b>'.$_POST['input_name'][0].'<br />';

        $mess .= '<b>E-mail: </b>'.$_POST['input_name'][1].'<br />';

Edited by n0lik

Share this post


Link to post
Share on other sites

А, вот чего. Для начала распечатайте массивы передачи - ПОСТы, посмотрите, что в них, включите на сайте и опишите ошибки, на глазок - всё рабочее, проблем не вижу, хотя код очень кривой и сырой. Если посты проходят, то обратитесь к разработчику, тратить день на изучение всей этой кривой мути нет времени, по мелочам подскажу.

П.С. Спросите inokentik, как он сделал у себя.

Edited by zgr

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this