Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Счетчик посещаемости на сайте

Статус пользователя Ermak
сообщение 4.3.2015, 9:56
Сообщение #1


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Не понимаю почему не работает, вот часть кода

Код
// Получаем IP-адрес посетителя и сохраняем текущую дату
    $ip_user = $_SERVER['REMOTE_ADDR'];
    $tek_data = date("Y-m-d");
// Узнаем, были ли посетитель за сегодня
    $res=mysql_query("SELECT `id` FROM `action_user` WHERE `tek_data`='$tek_data'") or die ("Проблема при подключении к БД");
    $data=mysql_fetch_array($res);

    
// Если сегодня еще не было посетителя
    if (mysqli_num_rows($data) == 0)
    {    
    
        $query="INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`, `ip_user`) VALUES('$user_name','$friend_name','$steam_id','$vk','$tek_data','$ip_user') ";
        
    }

    else
    {
    // Узнаем, были ли ip за сегодня    
    $res=mysql_query("SELECT `id` FROM `action_user` WHERE `ip_user`='$ip_user'");
        $data=mysql_fetch_array($res);
// Если сегодня еще был ip    
    if (mysqli_num_rows($data) == 1)    
    {    
    die("Сегодня вы уже посещали!<a href='index.php'>На главную</a>");    
    }
    else
    {
         $query="INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`, `ip_user`) VALUES('$user_name','$friend_name','$steam_id','$vk','$tek_data','$ip_user') ";
    }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя UnrealGame
сообщение 4.3.2015, 10:05
Сообщение #2


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Нужно смотреть в логи ошибок, что-то типа apache-error.log
Мне кажется вот эта часть
Код:
// Узнаем, были ли посетитель за сегодня
$res=mysql_query("SELECT `id` FROM `action_user` WHERE `tek_data`='$tek_data'") or die ("Проблема при подключении к БД");
$data=mysql_fetch_array($res);


// Если сегодня еще не было посетителя
if (mysqli_num_rows($data) == 0)
{

$query="INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`, `ip_user`) VALUES('$user_name','$friend_name','$steam_id','$vk','$tek_data','$ip_user') ";

}

вообще не логичная, можно обойтись без нее.

Постарайтесь в смущающие части кода повставлять echo, для отслеживания состоянию промещуточных переменных. Но лучше пользоватся функцией error_log

Отредактировал: UnrealGame, - 4.3.2015, 10:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 4.3.2015, 10:22
Сообщение #3


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Мне кажется есть вероятность, что в таблице будет более 1 записи для вот этого участка кода,
Код:
 // Узнаем, были ли ip за сегодня    
$res=mysql_query("SELECT `id` FROM `action_user` WHERE `ip_user`='$ip_user'");
$data=mysql_fetch_array($res);
// Если сегодня еще был ip
if (mysqli_num_rows($data) == 1)
{
die("Сегодня вы уже посещали!<a href='index.php'>На главную</a>");
}

Тогда if будет отрабатывать не корректно, стоит учесть это в проверках.

Добавьте проверку даты в запрос

Отредактировал: UnrealGame, - 4.3.2015, 10:28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя onotole
сообщение 4.3.2015, 11:13
Сообщение #4


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

mysql_query
...
mysqli_num_rows

Мне одному кажется подозрительным? =)
И, если это опечатка, и используется mysql_num_rows, так как функции mysqli_num_rows не существует, то в нее необходимо передавать результат выборки, а не полученный массив:
Код:
$res=mysql_query("SELECT `id` FROM `action_user` WHERE `ip_user`='$ip_user'");

// Если сегодня еще был ip
if (mysql_num_rows($res) == 1)
{
die("Сегодня вы уже посещали!<a href='index.php'>На главную</a>");
}
$data=mysql_fetch_array($res);


Отредактировал: onotole, - 4.3.2015, 11:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 12:58
Сообщение #5


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Вот поправил но выдает ошибку

Проблема при подключении к БД

Код
/ Получаем IP-адрес посетителя и сохраняем текущую дату
    $ip_user = $_SERVER['REMOTE_ADDR'];
    $time=time()-60*60*24;
//Подключаем базу данных
    include("configs.php");
    $link=mysql_connect($host,$login,$password) or die ("Невозможно подключиться к БД");
    mysql_select_db($db,$link);
// Узнаем, были ли посетитель за сегодня
    $res=mysql_query($link,"SELECT `id` FROM `action_user` WHERE `ip_user`= '$ip_user' AND `tek_data`>'$time'") or die ("Проблема при подключении к БД");

    if(!mysqli_num_rows($result))
    {
    $result=mysqli_query($link,"INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`,`ip_user`) VALUES('$user_name','$friend_name','$steam_id','$vk','$tek_data','$ip_user')");
    
        
    }else{
        
   echo "Вы успешно добавили! <br><a href='index.php'>На главную</a>";

}
  
//Если данные успешно занесены в таблицу
    if($result==true)
    {
         echo "Вы успешно добавили! <br><a href='index.php'>На главную</a>";
    }
//Если не так, то выводим ошибку
    else
    {
        echo "Error! ----> ". mysql_error();
    }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 4.3.2015, 13:43
Сообщение #6


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Использую функцию mysql_error() можно понять , что именно не так с подключением.

Хороший ресурс для изучения: http://php.net/manual/ru/function.mysql-error.php
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя onotole
сообщение 4.3.2015, 16:00
Сообщение #7


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Код:
$link=mysql_connect($host,$login,$password) or die ("Невозможно подключиться к БД: " . mysql_error());
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 4.3.2015, 16:19
Сообщение #8


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Наверно переменную $res и $result нужно везде по коду заменить на какое-то одно название переменной. А то в запросе $res
Код
$res=mysql_query($link,"SELECT `id` FROM `action_user` WHERE `ip_user`= '$ip_user' AND `tek_data`>'$time'") or die ("Проблема при подключении к БД");

А в проверках уже $result
Код
if(!mysqli_num_rows($result))
Код
if($result==true)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 4.3.2015, 16:31
Сообщение #9


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Все поправил как выще писали, теперь так
Код
// Узнаем, были ли посетитель за сегодня
    $res=mysql_query($link,"SELECT `id` FROM `action_user` WHERE `ip_user`= '$ip_user' AND `tek_data`>'$time'") or die ("Проблема при подключении к БД: " . mysql_error() );
    $data=mysql_fetch_array($res);

    if(!mysqli_num_rows($data))
    {
    $result=mysqli_query($link,"INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`,`ip_user`) VALUES('$user_name','$friend_name','$steam_id','$vk','$tek_data','$ip_user')");
    
        
    }else{
        
   echo "Вы успешно добавили! <br><a href='index.php'>На главную</a>";

}

Выдает ошибку Проблема при подключении к БД

Убрал $link, все открывается, ввожу данные выводит ошибку Error! ---->
Не понимаю почему так
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 4.3.2015, 20:28
Сообщение #10


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Нужно понять, какая именно строчка кода приводит к ошибке. Можно сделать текст оповещение про ошибку разным в разных местах. Возможно сообщение "Проблема при подключении к БД" есть где-то еще в коде и именно там скрипт вылетает с ошибкой, а не в показанном здесь месте.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 5.3.2015, 16:26
Сообщение #11
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Ermak,
в случаи ошибки или не работоспособности кода, отправьте сюда лога об ошибках.

Код
$connect = mysql_query("SELECT * FROM `action_user` WHERE `ip_user`= '$ip_user' AND `tek_data` > '$time' LIMIT 1") or die(mysq_error());
$statistics = mysql_fetch_object($connect);

// Если найден результат.
if(is_object($statistics))
    echo "Вы успешно добавили!<br><a href='index.php'>На главную</a>";
else
    mysql_query("INSERT INTO `action_user` (`user_name`, `friend_name`, `steam_id`, `vk`, `tek_data`, `ip_user`) VALUES('$user_name','$friend_name','$steam_id','$vk','$tek_data','$ip_user')")  or die(mysq_error());


а эту часть, вставьте в самое начало файла

Код
ini_set("error_reporting", "E_ALL");
ini_set("display_errors", "On");
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 5.3.2015, 21:16
Сообщение #12


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Я решил проблему с ошибкой но не решил основную проблему. Я изменил поле в базе tek_data на тип TIME , но не работает условие на повторение ip адреса, что то опять не так
Вот код

Код
<?php
//Проверяем пришли ли данные
    if(isset($_POST['user_name']) && isset($_POST['friend_name']) && isset($_POST['steam_id']) && isset($_POST['vk']))
    {
//Записываем все в переменные
    $user_name=htmlspecialchars(trim($_POST['user_name']));
    $friend_name=htmlspecialchars(trim($_POST['friend_name']));
    $steam_id=htmlspecialchars(trim($_POST['steam_id']));
    $vk=htmlspecialchars(trim($_POST['vk']));
    
// Получаем IP-адрес посетителя и сохраняем текущую дату
    $ip_user = $_SERVER['REMOTE_ADDR'];
    $time=time()-60*60*24;
    
    
//Проверяем на пустоту
    if($user_name=="" || $friend_name=="" || $steam_id=="" || $vk=="")
    {
        die("Заполните обязательные поля!");
    }
    
//Подключаем базу данных
    include("configs.php");
    $link=mysqli_connect($host,$login,$password,$db) or die ("Невозможно подключиться к БД:" . mysqli_error());


// Узнаем, были ли посетитель за сегодня
    $result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE `user_name`="'.$user_name.'" OR (`ip_user`="'.$ip_user.'" AND `tek_data`>'.$time.')');
    
    if(!mysqli_num_rows($result)){
        $query='INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`,`ip_user`) VALUES("'.$user_name.'","'.$friend_name.'","'.$steam_id.'","'.$vk.'","'.$time.'","'.$ip_user.'")';
        
        if(mysqli_query($link,$query)){
            echo "Вы успешно добавили! <br><a href='index.php'>На главную</a>";
        }else{
            echo "Error! ----> ". mysqli_error();
        }
    }else{
        echo 'Сегодня вы уже посещали!<a href="index.php">На главную</a>';
    }

}

?>

<form action="" method="post">
<div>
<label>Ваше ник в игре </label><br />
<input type="text" placeholder="Ваше ник"  name="user_name" size="10" minlength="4">
</div>
<div>
<label>Ник друга в игре </label><br />
<input type="text" placeholder="Ник друга"  name="friend_name" size="10" minlength="4">
</div>
<div>
<label>Steam_id друга </label><br />
<input type="text" placeholder="Steam_id друга"  name="steam_id" size="10" minlength="4">
</div>
<div>
<label>www.vk.com/ID друга </label><br />
<input type="text" placeholder="www.vk.com/ID друга"  name="vk" size="10" minlength="4">
</div>
<br/>
<div>
<input name="submit" type="submit" value="Отправить заявку"/>
</div>
</form>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 5.3.2015, 21:42
Сообщение #13


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Тип TIME (ссылка на документацию) это только время (к примеру '10:11:12'), определить день записи становиться невозможно. Стоит поменять поле tek_data к примеру на тип DATETIME (еще есть вариант TIMESTAMP).

Запрос к базе можно преобразовать на вот такой:
Код
// Узнаем, были ли посетитель за сегодня
    $result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE `user_name`="'.$user_name.'" OR (`ip_user`="'.$ip_user.'" AND `tek_data`> NOW() - INTERVAL 1 day )');

Если работа каких либо запросов к базе в скриптах смущает, пробуйте подключится к базе использую какой-то mysql-клиент, тогда будет наглядно видно проблему.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 5.3.2015, 21:53
Сообщение #14


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Все всем большое спасибо, все заработала! Изменил тип на timestamp

Код кому интересно
Код
<?php
//Проверяем пришли ли данные
    if(isset($_POST['user_name']) && isset($_POST['friend_name']) && isset($_POST['steam_id']) && isset($_POST['vk']))
    {
//Записываем все в переменные
    $user_name=htmlspecialchars(trim($_POST['user_name']));
    $friend_name=htmlspecialchars(trim($_POST['friend_name']));
    $steam_id=htmlspecialchars(trim($_POST['steam_id']));
    $vk=htmlspecialchars(trim($_POST['vk']));
    
// Получаем IP-адрес посетителя и сохраняем текущую дату
    $ip_user = $_SERVER['REMOTE_ADDR'];
    $time=time()-60*60*24;
    
//Проверяем на пустоту
    if($user_name=="" || $friend_name=="" || $steam_id=="" || $vk=="")
    {
        die("Заполните обязательные поля!");
    }
    
//Подключаем базу данных
    include("configs.php");
    $link=mysqli_connect($host,$login,$password,$db) or die ("Невозможно подключиться к БД:" . mysqli_error());


// Узнаем, были ли посетитель за сегодня

    $result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE `user_name`="'.$user_name.'" OR (`ip_user`="'.$ip_user.'" AND `tek_data`>'.$time.')');
    
    if(!mysqli_num_rows($result)){
        $query='INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`,`ip_user`) VALUES("'.$user_name.'","'.$friend_name.'","'.$steam_id.'","'.$vk.'","'.$time.'","'.$ip_user.'")';
        
        if(mysqli_query($link,$query)){
            echo "Вы успешно добавили! <br><a href='index.php'>На главную</a>";
        }else{
            echo "Error! ----> ". mysqli_error();
        }
    }else{
        echo 'Сегодня вы уже посещали!<a href="index.php">На главную</a>';
    }

}

?>

<form action="" method="post">
<div>
<label>Ваше ник в игре </label><br />
<input type="text" placeholder="Ваше ник"  name="user_name" size="10" minlength="4">
</div>
<div>
<label>Ник друга в игре </label><br />
<input type="text" placeholder="Ник друга"  name="friend_name" size="10" minlength="4">
</div>
<div>
<label>Steam_id друга </label><br />
<input type="text" placeholder="Steam_id друга"  name="steam_id" size="10" minlength="4">
</div>
<div>
<label>www.vk.com/ID друга </label><br />
<input type="text" placeholder="www.vk.com/ID друга"  name="vk" size="10" minlength="4">
</div>
<br/>
<div>
<input name="submit" type="submit" value="Отправить заявку"/>
</div>
</form>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 7.3.2015, 16:21
Сообщение #15


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, Про тестировал оказалось что не работает запрос
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 9.3.2015, 11:53
Сообщение #16


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, я попробовал вашим вариантом, теперь постоянной выводит что я уже добавлял инфо на сайт
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 9.3.2015, 13:05
Сообщение #17


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Ваш запрос выглядит очень подозрительно:
Код
   $result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE `user_name`="'.$user_name.'" OR (`ip_user`="'.$ip_user.'" AND `tek_data`>'.$time.')');

В нем идет выборка всех ID, если:
- в базе существует такой $user_name
- или $ip_user за последний день

Мне кажется, был бы более логичный запрос:
Код
   $result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE `(user_name`="'.$user_name.'" OR `ip_user`="'.$ip_user.'") AND `tek_data`>'.$time.'');

В нем идет выборка всех ID, если есть $user_name или $ip_user за последний день.

Хотя я только предполагаю, возможно я просто не понял заложенный смысл.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 9.3.2015, 17:42
Сообщение #18


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

UnrealGame, Я не понимаю, вы показали один и тот же код, только первый раз со скобками а второй без скобок
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Ermak
сообщение 9.3.2015, 17:52
Сообщение #19


Стаж: 11 лет

Сообщений: 37
Благодарностей: 1
Полезность: < 0

Теперь даже не добавляет

Код
<?php
//Проверяем пришли ли данные
    if(isset($_POST['user_name']) && isset($_POST['friend_name']) && isset($_POST['steam_id']) && isset($_POST['vk']))
    {
//Записываем все в переменные
    $user_name=htmlspecialchars(trim($_POST['user_name']));
    $friend_name=htmlspecialchars(trim($_POST['friend_name']));
    $steam_id=htmlspecialchars(trim($_POST['steam_id']));
    $vk=htmlspecialchars(trim($_POST['vk']));
    
// Получаем IP-адрес посетителя и сохраняем текущую дату
    $ip_user = $_SERVER['REMOTE_ADDR'];
    $time=time()-60*60*24;
    
//Проверяем на пустоту
    if($user_name=="" || $friend_name=="" || $steam_id=="" || $vk=="")
    {
        die("Заполните обязательные поля!");
    }
    
//Подключаем базу данных
    include("configs.php");
    $link=mysqli_connect($host,$login,$password,$db) or die ("Невозможно подключиться к БД:" . mysqli_error());


// Узнаем, были ли посетитель за сегодня

    $result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE `(user_name`="'.$user_name.'" OR `ip_user`="'.$ip_user.'") AND `tek_data`>'.$time.'');
    
    if(!mysqli_num_rows($result)){
        $query='INSERT INTO `action_user` (`user_name`,`friend_name`,`steam_id`,`vk`,`tek_data`,`ip_user`) VALUES("'.$user_name.'","'.$friend_name.'","'.$steam_id.'","'.$vk.'","'.$time.'","'.$ip_user.'")';
        
        if(mysqli_query($link,$query)){
            echo "Вы успешно добавили! <br><a href='index.php'>На главную</a>";
        }else{
            echo "Error! ----> ". mysqli_error();
        }
    }else{
        echo 'Сегодня вы уже посещали!<a href="index.php">На главную</a>';
    }

}

?>

<form action="" method="post">
<div>
<label>Ваше ник в игре </label><br />
<input type="text" placeholder="Ваше ник"  name="user_name" size="10" minlength="4">
</div>
<div>
<label>Ник друга в игре </label><br />
<input type="text" placeholder="Ник друга"  name="friend_name" size="10" minlength="4">
</div>
<div>
<label>www.vk.com/ID друга </label><br />
<input type="text" placeholder="www.vk.com/ID друга"  name="vk" size="10" minlength="4">
</div>
<br/>
<div>
<input name="submit" type="submit" value="Отправить заявку"/>
</div>
</form>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя UnrealGame
сообщение 10.3.2015, 14:46
Сообщение #20


Стаж: 11 лет

Сообщений: 38
Благодарностей: 21
Полезность: 383

unreal game
Цитата(Ermak @ 9.3.2015, 17:42) *
UnrealGame, Я не понимаю, вы показали один и тот же код, только первый раз со скобками а второй без скобок

Скобки влияют та логику работы условий.

В моем примере ошибка, первую скобку надо поставить левее:
Код
$result=mysqli_query($link,'SELECT `id` FROM `action_user` WHERE (`user_name`="'.$user_name.'" OR `ip_user`="'.$ip_user.'") AND `tek_data`>'.$time.'');


Отредактировал: UnrealGame, - 10.3.2015, 14:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: