Перейти к содержимому

Реферальная программа Мегаплана


Javascript дублирует запись в бд

#1 Юрий_К

Юрий_К
  • Пользователь
  • 1 сообщений
  • Репутация: 0
0

Отправлено 17 Май 2015 - 16:30

Здравствуйте, уважаемые. Начинающему нужна помощь.

1) В нескольких словах проблема в следующем: есть страница-благодарности на PHP, одной из функций которой является запись полученных данных в БД. При попытке вставить скрипт Яндекс-метрики выяснилось, что стала появляться каждый раз дополнительная запись в БД (1-я запись нормальная - все всеми переданным значениями, 2-я пустая - как если бы страницу-благодарности просто перезагрузили не передав значения по POST)

 

PHP страница следующего упрощенного содержания:

<?php

$fio = $_REQUEST['fio'];
$phone = $_REQUEST['phone'];
$email = $_REQUEST['email'];
$date = date('Y-m-d H:i:s',time());

mysql_query(
"INSERT INTO leedstable (id, date, fio, phone, email, article, name)
VALUES ('', '$date', '$fio', '$phone', '$email', '', 'Товар');"
, db1::connect());

$HTML='
здесь код страницы и скрипт яндекс метрики
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
    (w[c] = w[c] || []).push(function() {
        try {
            w.yaCounter25991641 = new Ya.Metrika({id:26991641,
                    webvisor:true,
                    clickmap:true,
                    trackLinks:true,
                    accurateTrackBounce:true});
        } catch(e) { }
    });

    var n = d.getElementsByTagName("script")[0],
        s = d.createElement("script"),
        f = function () { n.parentNode.insertBefore(s, n); };
    s.type = "text/javascript";
    s.async = true;
    s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";

    if (w.opera == "[object Opera]") {
        d.addEventListener("DOMContentLoaded", f, false);
    } else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/26991641" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
';

print $HTML;
?>

Интересует сама причина второй записи, которая стала появляться как только вставил javascript метрики. Понятно, что еще нужна проверка значений - это в процессе - что бы исключить пустые записи в бд в любом случае.

 

И следом из этого второй вопрос:

 

2) Будьте любезны проверить и поправить скрипт от SQL иньекций:

function cleanInput($input) {
$search = array(
'@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments
);
$output = preg_replace($search, '', $input);
return $output;
}

// Sanitization function
function sanitize($input) {
if (is_array($input)) {
foreach($input as $var=>$val) {
$output[$var] = sanitize($val);
}
}
else {
if (get_magic_quotes_gpc()) {
$input = stripslashes($input);
}
$input = cleanInput($input);
$output = mysql_real_escape_string($input);
}
return $output;
}

 

 

  • 0

#2 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 21 Май 2015 - 10:58

Я вот так борюсь

function def($post){
$post = htmlspecialchars( strip_tags( trim( $post ) ) ); // удаление хтмл и пхп тегов
            // удаляем экранирование, если включены "Волшебные кавычки"
            if( get_magic_quotes_gpc () ){
                $post = stripslashes ($post);
            }
            return addslashes($post); // экранируем кавычку
}

  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.



Оформление форума – IPBSkins.ru