Проблема в том что в базу данных не добавляются данные о посетителе. По скольку я тестирую это на локальном сервере должно выводится стандартное ip и время но их нет
if ( $connection == false ) {
echo 'Произошла ошибка подключения к базе данных пожалуйста обратитесь по номеру +7(963)132-28-69';
mysqli_connect_error();
die();
}
$visitor_ip = $_SERVER['REMOTE_ADDR'];
$date2 = date("H") + 2;
$date = date("Y-m-d-$date2-i-s");
$all_ip = mysqli_query($connection, "SELECT 'ip' from 'counter' WHERE 'ip' = '$visitor_ip' ");
if ($all_ip){
echo '1';
mysqli_query($connection, " UPDATE 'counter' SET 'view_values' = 'view_values' + 1 WHERE 'IP' = '$visitor_ip' " );
} else {
mysqli_query($connection, "INSERT INTO 'counter'('ip','date') VALUES ('".$visitor_ip."','".$date."')" );
echo '2';
};
В коде множество проблемных мест:
Предлагаю сделать на таблице counter уникальный индекс на колонке ip, если его еще нет. После этого, с учетом всего вышесказанного, скрипт можно будет переписать так:
if ( $connection == false ) {
echo 'Произошла ошибка подключения к базе данных пожалуйста обратитесь по номеру +7(963)132-28-69';
mysqli_connect_error();
die();
}
$visitor_ip = $_SERVER['REMOTE_ADDR'];
if( ! $connection->query("INSERT INTO counter(ip,date) VALUES ('$visitor_ip', now()+interval 2 hour) ON DUPLICATE KEY UPDATE view_values=view_values+1") {
printf("Ошибка выполнения SQL запроса: %s\n", $connection->error);
}
Конечно это то же далеко от идеала. В приложении желательно иметь свой слой для работы с БД, который например будет передавать все параметры во все запросы в виде плейсхоледеров и привязки значений, вместо прямой подстановки. В данном случае код безопасен, поскольку переменная $_SERVER['REMOTE_ADDR']
получена от web сервера, а не от клиента и мы можем быть уверены, что в ней находится ip и он не содержит кавычек. Но лучше всегда использовать prepare и bind_param. Кроме того в приложении очень желательна централизованная обработка ошибок в виде исключений, а не написание соответствующего кода в каждой второй строке. Тогда будет сложно забыть обработать ошибку и в итоге не узнать, что с запросами что то не так.
P.S. Возможно у вашего MySQL сервера нет таких проблем с настройками, как у php, и два часа добавлять к now() не надо.
Я сегодня столкнулся с камнем, который мешает продолжить моей работе
Как можно поменять адрес отправителя в команде mail в php? Был выставлен
Я развернул сайт по адресу но зайти на него не получается, попасть можно на сайт только если в строке запроса поставлю два слеша вот так shihzamanappcom//