Создать ответ 
Защита отправки данных сложением чисел
Автор Сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #31
RE: Защита отправки данных сложением чисел
Поясню некоторые моменты,

данного сообщения
Цитата:Сообщение отправлено успешно !
у меня в jQuery нет, а находится в contact.php (весь код имеется в теме).
Часть кода:

if(mail($address, $e_subject, $msg, $headers)) {

// Email

echo "<fieldset>";
echo "<div id='success_page'>";
echo "<h1>Сообщение отправлено успешно !</h1>";
echo "<p>Спасибо <strong>$name</strong>, ваше сообщение было отправлено !</p>";
echo "</div>";
echo "</fieldset>";

} else {

echo 'ERROR!';

}

весь код jQuery:

Код:
jQuery(document).ready(function(){
    
        $('#contactform').submit(function(){

        var action = $(this).attr('action');

        $("#message").slideUp(750,function() {
        $('#message').hide();

        $('#submit')
            .after('<img src="images/ajax-loader.gif" class="loader" />')
            .attr('disabled','disabled');
            
       function redirect() { location="http://usefulscript.ru"; }
            
       $.post(action, {
            name: $('#name').val(),
            email: $('#email').val(),
            phone: $('#phone').val(),
            subject: $('#subject').val(),
            comments: $('#comments').val(),
            verify: $('#verify').val(),
            summa: $('#summa').val()            
        },
            function(data){
                document.getElementById('message').innerHTML = data;
                $('#message').slideDown('slow');
                $('#contactform img.loader').fadeOut('slow',function(){$(this).remove()});
                $('#submit').removeAttr('disabled');
                if(data.match('success') != null) $('#contactform').slideUp('slow');
                
                if (data.match('success')) {
                    $('#name').val('');
                    $('#email').val('');
                    $('#phone').val('');
                    $('#subject').val('');
                    $('#comments').val('');
                    $('#verify').val('');                  
                
                }
                
                if (data.match('message')) {
                $('#verify').val('');
                
                }
                
                 if (data.match('success')) { setTimeout('redirect()', 5000); }
                
            }
            
        );

        });

        return false;

    });

});

Все работает, но переадресации нет.
28.06.2015 23:25:05
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #32
RE: Защита отправки данных сложением чисел
Все верно.
JS код перехватывает выводимое сообщение и в зависимости от его содержимого либо делает редирект, либо нет!

Строчка if (data.match('Сообщение отправлено')) { у Вас же не вызвала недоумения, хотя "Сообщение отправлено" так же находится в файле contact.php.

Хотя, если у Вас условие if (data.match('success')) { работает правильно, то можно в его конец ( после $('#verify').val(''); ) добавить setTimeout('redirect()', 5000);
28.06.2015 23:53:24
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #33
RE: Защита отправки данных сложением чисел
Здравствуйте, вроде все правильно, но не работает...

if (data.match('success')) {
$('#name').val('');
$('#email').val('');
$('#phone').val('');
$('#subject').val('');
$('#comments').val('');
$('#verify').val('');
$('#summa').val('');
setTimeout('redirect()', 5000);

}

Появляется сообщение об успешной отправке, но редиректа все нет...
29.06.2015 00:11:36
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #34
RE: Защита отправки данных сложением чисел
А функция redirect() вообще срабатывает? Попробуйте внутрь функции redirect() в начало добавить alert('Работает!'); для проверки, вызывается ли она или нет.

Если на экране появится сообщение 'Работает!', то location="http://usefulscript.ru"; можно попробовать заменить на window.location.replace("http://usefulscript.ru");

Если сообщение не появляется, то тут нужно думать.
29.06.2015 00:26:39
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #35
RE: Защита отправки данных сложением чисел
Только что проверил... К сожалению, ничего не появляется, никакого сообщения...
29.06.2015 00:33:08
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #36
RE: Защита отправки данных сложением чисел
Здравствуйте, еще раз проверил на другом локальном сервере и не работает, почему-то нет переадресации, как на локальный так и сетевой адрес.
29.06.2015 23:40:45
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #37
RE: Защита отправки данных сложением чисел
Доброе время суток.

Небольшой сдвиг в переадресации появился, т.е в коде добавляю строчку:
window.location.href = "http://usefulscript.ru";

function(data){
document.getElementById('message').innerHTML = data;
$('#message').slideDown('slow');
$('#contactform img.loader').fadeOut('slow',function(){$(this).remove()});
$('#submit').removeAttr('disabled');
if(data.match('success') != null) $('#contactform').slideUp('slow');

if (data.match('success')) { // Form field cleanup after succesful message sending
$('#name').val('');
$('#email').val('');
$('#phone').val('');
$('#subject').val('');
$('#comments').val('');
$('#verify').val('');
$('#summa').val('');
window.location.href = "http://usefulscript.ru";

}

if (data.match('message')) {
$('#verify').val('');

}

}

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

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

Заранее благодарен.

Все разобрался, переадресация работает, нужно было изменить строчку:
Цитата:setTimeout('location.replace("http://usefulscript.ru")', 10000);

Или можно еще как-то сделать, но при таком подходе все работает !

Доброе время суток,

С предыдущей темой у меня есть вопросы, но решать я буду сам, дабы не отвлекать вас по пустякам, но мне нужна ваша помощь в плане решения другого вопроса.

Решил не создавать отдельную тему, так как вопрос имеется всего один и задача такая же, как и в 1 теме, т.е имеется контактная форма для отправки сообщения и хотел бы защитить дополнительно данные сложением чисел, где данная форма будет использоваться на сайте, а предыдущая форма для заглушки.

Форма рабочая, хотел только добавить поле для проверочного кода.

1. Имеется код html:

<?php $a = rand(10,50); $b = rand(1,10); ?>

<form method="post" action="php/mail/message.php">
<fieldset>


<div class="left">
<label for="name" title="Введите ваше имя">Имя:</label>
<input name="name" id="name" type="text" class="input_field" maxlength="20" title="Введите ваше имя" placeholder="Введите ваше имя" tabindex="1" />
<div class="clean"></div>

<label for="email" title="Введите ваш e-mail">Email:</label>
<input name="email" id="email" type="text" class="input_field" maxlength="40" title="Введите ваш e-mail" placeholder="Введите ваш e-mail" tabindex="2" />
<input name="submit" type="submit" class="submit_btn" value="Отправить сообщение" alt="Отправить сообщение" />

<div class="clean"></div>
</div>

<div class="border-right"></div>

<div class="right">
<label for="text" title="Написать сообщение">Сообщение:</label>
<textarea name="text" id="text" cols="40" rows="10" title="Написать сообщение" placeholder="Написать сообщение" tabindex="3"></textarea>

<?php echo "$a + $b = "; ?>
<input type="text" name="verify" id="verify" />
<input type="hidden" name="summa" id="summa" value="<?php echo md5($a + $b); ?>" />


<div class="clean"></div>
</div>
</fieldset>
</form>

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

[Изображение: tid_335_forma.png]

2. Код обработчика message.php

//message.php

<?php include "config.php";
Код:
// Если нажата кнопка "Отправить сообщение"
if (isset ($_POST['submit']))
{
    // если хотя бы одно из полей не заполнено
    if ((empty($sender)) OR (empty($email)) OR (empty($text)))
    {
        // сообщение если не все поля заполнены
        echo $warning;
    }
    
    // если все поля заполнены
    else
    {
        // если email не подходит по формату
        if (!filter_var($email, FILTER_VALIDATE_EMAIL))
        {
            // выводим предупреждающее сообщение
            echo $email_warning;                        
            // скрипт прекращает работу
            exit();            
        }
        
        // если сообщение успешно отправлено
        if (mail($mymail, $topic, $message, $headers))
        {
            // перенаправление на страницу
            echo $url_success_send;            
            // вывод сообщения об успешной отправке
            echo $success;                      
        }
        
        // если произошла ошибка при отправке
        else
        {  
            // вывод сообщения об ошибке
            echo $fail;
        }            
    }
}

?>

3. Код config.php

//config.php

Код:
<!DOCTYPE HTML>
<html>
<head>

<meta charset = "utf-8" />
<title>Проверка контактной формы</title>

</head>

<?php
// email получателя
$mymail = '';

// тема письма
$topic = '';

// переменные
$sender = $_POST['name'];
$email = $_POST['email'];
$text = $_POST['text'];

// очистка от спецсимволов и тегов
$sender = strip_tags(htmlspecialchars($sender));
$email = strip_tags(htmlspecialchars($email));
$text = strip_tags(htmlspecialchars($text));

// сообщение
$message = "<table>
    <tr>
        <td>Вам написал:</td>
        <td>$sender</td>
    </tr>
    <tr>
        <td>e-mail:</td>
        <td>$email</td>
    </tr>
    <tr>
        <td style = 'vertical-align: top'>Сообщение:</td>
        <td>$text</td>
    </tr>
</table>";
          
// Дополнительные заголовки
$headers = 'From: site.ru <>' . "\r\n" . 'Content-type: text/html; charset = utf-8';
          
// переадресация после отправки письма
$url_success_send = "<meta http-equiv='Refresh' content='; url=http://'>";

// Сообщение о том, что должны быть заполнены все поля
$warning = '<div class = "warning"><h2 class = "warning_text">Для отправки сообщения нужно заполнить все поля&nbsp;!</h2>
            <p class = "back"><a href = "javascript:history.back();">Вернуться назад</a></p></div>';

// Сообщение, неправильный E-mail
$email_warning = '<div class = "warning"><h2 class = "warning_text">Проверьте правильность ввода <br />Email-адреса&nbsp;!</h2>
                  <p class = "back"><a href = "javascript:history.back();">Вернуться назад</a></p></div>';

// Сообщение об успешной отправке письма
$success = '<div class = "warning"><h2 class = "success_text">Письмо успешно отправлено&nbsp;!</h2>
            <p class = "back">Ожидайте в течение 24 часов.</p></div>';

// Сообщение об ошибке при отправке письма
$fail = '<div class = "warning">
         <h2 class = "fail_text">Сообщение не было отправлено&nbsp;!</h2></div>';
?>

</html>

Если например неправильно введен email адрес, то будет выдавать на странице
Цитата:http://site.ru/php/mail/message.php

сообщение, как на скрине ниже:

[Изображение: tid_335_forma_email.png]

Идея проста, хотел бы добавить в скрипт, что появлялось окно, где было бы в случае неправильного ввода суммы цифр, сообщение, например:

Цитата:Вы ввели неправильный проверочный код !

и ссылка для перехода назад ("Вернуться назад)", как на скрине с неправильным вводом email адреса.

В обработчик пробовал добавлять код:

Код:
if(!isset($verify) || trim($verify) == '') {
    echo '<div class="error_message">Введите проверочный код !</div>';
    exit();
} else if(md5(trim($verify)) != $_POST['summa']) {
    echo '<div class="error_message">Вы ввели неправильный проверочный код !</div>';
    exit();
}

но не работает, так как думаю не совсем правильно делаю, вот и нужна ваша помощь.

Заранее благодарен. Yes
(Последний раз сообщение было отредактировано 02.07.2015 в 00:38:08, отредактировал пользователь ale10ey.)
02.07.2015 00:00:01
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #38
RE: Защита отправки данных сложением чисел
Здравствуйте, уважаемый администратор обращаюсь к вам насчет предыдущего сообщения что-то у меня не получается реализовать защиту данных суммы цифр.
Нет ли у вас решения, хотел бы сделать, как и у вас в форме добавления комментариев, но если вы, конечно, поможете.

P.S.: Скрипт отправки сообщения message.php включая config.php является рабочий, который каждый может применить на своем сайте.

С уважением и заранее благодарен Yes
03.07.2015 22:23:02
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #39
RE: Защита отправки данных сложением чисел
P.S.: При добавлении кода в message.php:

Код:
if(!isset($verify) || trim($verify) == '') {
    echo '<div class="error_message">Введите проверочный код !</div>';
    exit();
} else if(md5(trim($verify)) != $_POST['summa']) {
    echo '<div class="error_message">Вы ввели неправильный проверочный код !</div>';
    exit();
}

выдается сообщение "Введите проверочный код" в самом верхнем левом углу браузера и поле для ввода проверочного кода может быть заполнено или нет...Scratch, но проверка не работает.
Экспериментирование с кодом не принесло результата, хотя мой скрипт является рабочим, но не работает вышеприведенный код, а как его адаптировать для данного скрипта что-то не выходит...Pardon
05.07.2015 00:04:29
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #40
RE: Защита отправки данных сложением чисел
Странно, что у Вас это вызывает проблемы...

Все очень просто. Для организации защиты формы отправки сообщений путем сложения чисел Вы должны добавить два поля: поле для ввода проверочного кода и невидимое поле с md5 хэшем результата. А на страничке обработчика необходимо получить md5 хэш отправленного проверочного кода и сравнить его с md5 хэшем результата!


if(md5($_POST['verify']) != $_POST['summa']) {
echo 'Вы ввели неправильный проверочный код !';
}

P.S. А поле для проверочного кода я бы поместил непосредственно над кнопкой "Отправить сообщение".
05.07.2015 22:46:15
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru