Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11

Исправить ошибки в коде обработчика статистики посещений

17.10.2016, 04:23. Показов 532. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, у меня есть база
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  
  $host = 'localhost';
  $user = 'admin';
  $pswd = 'test';
  $db = 'test';
 
  $connection = mysql_connect($host, $user, $pswd);
  mysql_set_charset('utf8', $connection);
  if (!$connection || !mysql_select_db($db,$connection)){
     exit(mysql_error());
  }
 
  
  ?>
и сценарий для обработки статистики посещения
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php 
include ('db.php');
if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
  mysql_set_charset('utf8', $connection);
  
  $ip_address = $_SERVER['REMOTE_ADDR'];
  $date = date('Y-m-d H-i-s'); 
  $unic = false;
  
  $query = mysqli_query($connection, "SELECT ip_address, data, unic FROM visits WHERE ip_address= $ip_address AND date = $date AND unic = 'true'");
  $row = mysql_fetch_array($query);
 
 if ($query == true ){
     exit('Vas Visit bil uje uchten');
  }
  $query = mysqli_query($connection, "SELECT ip_address, data, unic FROM visits WHERE ip_address= $ip_address AND date = $date AND unic = 'false'");
  $row = mysql_fetch_array($query);
  
  if($row == true){
        $query = mysql_query("INSERT INTO visits(ip_address,date,unic)  VALUES ('$ip_address', '$date', 'true')") ;
         echo "Add unic view";
  }
  
  
  $query = mysqli_query($connection, "SELECT ip_address, data, unic FROM visits WHERE ip_address= $ip_address AND date = $date");
  $row = mysql_fetch_array($query);
  
  if($row == false){
        $query = mysql_query("INSERT INTO visits(ip_address,date,unic)  VALUES ('$ip_address', '$date', 'false')");
        echo "Add not unic view";
  }
  
exit();
 
?>

Логика такая:
Если зашел посетитель, который уже есть в базе и он засчитан как уникальный посетитель => выходим,
Если зашел посетитель, который есть в базе но засчитан как обычный посетитель => записываем его как уникального
Если зашел посетитель, которого нет в базе => запишем в базе как гостя.


Проблема в том что, сохраняет постоянно как гостя и error'ы:

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in E:\AppServ\www\mysite\stats.php on line 13

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in E:\AppServ\www\mysite\stats.php on line 14

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in E:\AppServ\www\mysite\stats.php on line 19

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in E:\AppServ\www\mysite\stats.php on line 20

Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in E:\AppServ\www\mysite\stats.php on line 28

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in E:\AppServ\www\mysite\stats.php on line 29


Подскажите в чём проблема в записи как уникального и что за предупреждения, ответа в инете я не нашел(мб плохо искал).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2016, 04:23
Ответы с готовыми решениями:

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h (inline) #pragma once class list...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить откуда. A.h #pragma once ...

Ошибки при компиляции - исправить ошибки в коде
Помогите исправить ошибки , не понимаю в чем может быть причина ... #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include...

13
94 / 94 / 68
Регистрация: 26.03.2015
Сообщений: 248
17.10.2016, 06:27
Цитата Сообщение от Panda_Geek Посмотреть сообщение
Warning: mysqli_query() expects parameter 1 to be mysqli, resource given in E:\AppServ\www\mysite\stats.php on line 13
Вы устанавливаете соединение с бд с помощью функции mysql_connect(), а выполнить запрос пытаетесь с помощью mysqli_query(). Первая из них принадлежит расширению mysql, а вторая - расширению mysqli.

Следовательно, функция mysqli_query() вместо переменной типа resource возвращает null, который вы передаете в mysql_fetch_array(), что вызывает ошибку
Цитата Сообщение от Panda_Geek Посмотреть сообщение
Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in E:\AppServ\www\mysite\stats.php on line 14
Таким образом, чтобы подобные ошибки не возникали, вам, прежде всего, нужно определиться, с каким расширением работать - mysql или mysqli.
0
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11
17.10.2016, 08:27  [ТС]
При:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php 
 $host = 'localhost';
  $user = 'admin';
  $pswd = 'lol123';
  $db = 'test';
 
  $connection = mysql_connect($host, $user, $pswd);
  mysql_set_charset('utf8', $connection);
  if (!$connection || !mysql_select_db($db,$connection)){
     exit(mysql_error());
  }
 
 
if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
  mysql_set_charset('utf8', $connection);
  
  $ip_address = $_SERVER['REMOTE_ADDR'];
      $date = date('Y-m-d H-i-s'); 
  $unic = false;
  
  $query = mysql_query("SELECT ip_address, data, unic FROM visits WHERE ip_address= $ip_address AND date = $date AND unic = 'true'")|| die(mysql_error());
  $row = mysql_fetch_array($query);
 
 if ($query == true ){
     exit('Vas Visit bil uje uchten');
  }
  $query = mysql_query("SELECT ip_address, data, unic FROM visits WHERE ip_address= $ip_address AND date = $date AND unic = 'false'")|| die(mysql_error());
  $row = mysql_fetch_array($query);
  
  if($row == true){
        $query = mysql_query("INSERT INTO visits(ip_address,date,unic)  VALUES ('$ip_address', '$date', 'true')")|| die(mysql_error()) ;
         echo "Add unic view";
  }
  
  
  $query = mysql_query("SELECT ip_address, data, unic FROM visits WHERE ip_address= $ip_address AND date = $date")|| die(mysql_error());
  $row = mysql_fetch_array($query);
  
  if($row == false){
        $query = mysql_query("INSERT INTO visits(ip_address,date,unic)  VALUES ('$ip_address', '$date', 'false')")|| die(mysql_error());
        echo "Add not unic view";
  }
  
exit();
 
?>
Ошибка:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '::1 AND date = 2016-10-17 05-27-07 AND unic = 'true'' at line 1.
Не могли бы подсказать где конкретно ошибка в синтаксисе...
0
94 / 94 / 68
Регистрация: 26.03.2015
Сообщений: 248
17.10.2016, 08:54
Panda_Geek, подозреваю, что в SQL-запросе переменные $ip_address и $date нужно обрамить кавычками:
PHP
1
$query = mysql_query("SELECT ip_address, data, unic FROM visits WHERE ip_address='$ip_address' AND date='$date' AND unic='true'") || die(mysql_error());
Возможно, также, если поле unic не строка, вокруг false кавычки нужно убрать.

Добавлено через 1 минуту
Если мои догадки не помогут, скиньте структуру таблицы visits.
0
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11
17.10.2016, 09:02  [ТС]
unic это boolean.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php 
 $host = 'localhost';
  $user = 'admin';
  $pswd = 'lol123';
  $db = 'test';
 
  $connection = mysql_connect($host, $user, $pswd);
  mysql_set_charset('utf8', $connection);
  if (!$connection || !mysql_select_db($db,$connection)){
     exit(mysql_error());
  }
 
 
if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
  mysql_set_charset('utf8', $connection);
  
  $ip_address = $_SERVER['REMOTE_ADDR'];
  $date = date('Y-m-d H-i-s'); 
  $unic = false;
  
  $query = mysql_query("SELECT ip_address, date, unic FROM visits WHERE ip_address='$ip_address' AND date='$date' AND unic='true'") || die(mysql_error());
  $row = mysql_fetch_array($query);
 
 
 if ($query == true ){
     exit('Vas Visit bil uje uchten');
  }
  
  $query = mysql_query("SELECT ip_address, date, unic FROM visits WHERE ip_address='$ip_address' AND date='$date' AND unic = false") || die(mysql_error());
  $row = mysql_fetch_array($query);
 
 
  if($row == true){
        $query = mysql_query("INSERT INTO visits(ip_address,date,unic)  VALUES ('$ip_address', '$date', 'true')");
         echo "Add unic view";
  }
  
  
  $query = mysql_query("SELECT ip_address, date FROM visits WHERE ip_address='$ip_address' AND date='$date'") || die(mysql_error());
  $row = mysql_fetch_array($query);
 
 
 
  if($row == false){
        $query = mysql_query("INSERT INTO visits(ip_address,date,unic)  VALUES ('$ip_address', '$date', 'false')");
        echo "Add not unic view";
  }
  
exit();
 
?>
ошибка: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\AppServ\www\mysite\stats.php on line 25
0
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11
17.10.2016, 09:09  [ТС]
Структура
Миниатюры
Исправить ошибки в коде обработчика статистики посещений  
0
94 / 94 / 68
Регистрация: 26.03.2015
Сообщений: 248
17.10.2016, 09:20
Цитата Сообщение от Panda_Geek Посмотреть сообщение
unic это boolean
Значит, вокруг всех значений true и false, которые вы подставляете в поле unic, нужно убрать кавычки. Иначе MySQL будет воспринимать эти значения не как були, а как строки и каждый раз будет выбрасывать ошибку. Странно, что
PHP
1
|| die(mysql_error());
эту ошибку не показывает. Или, может быть, вы что-то не договариваете?
1
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11
17.10.2016, 09:33  [ТС]
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\AppServ\www\mysite\stats.php on line 25

Цитата Сообщение от ns16 Посмотреть сообщение
Или, может быть, вы что-то не договариваете?
Vas Visit bil uje uchten - я не думаю что эта строчка важна...

Убрал везде кавычки, та же ошибка.

Добавлено через 3 минуты
И не могли бы вы подсказать, что вернёт mysql_query если нечего не найдёт?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
17.10.2016, 09:35
Названия столбцов и таблиц нужно обрамлять обратными кавычками.
SQL
1
SELECT `ip_address`, `date` FROM `visits`...
1
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11
17.10.2016, 09:44  [ТС]
удалил
PHP
1
2
3
if ($query){
     exit('Vas Visit bil uje uchten');
  }
так же обромил обратными
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php 
 $host = 'localhost';
  $user = 'admin';
  $pswd = 'lol123';
  $db = 'test';
 
  $connection = mysql_connect($host, $user, $pswd);
  mysql_set_charset('utf8', $connection);
  if (!$connection || !mysql_select_db($db,$connection)){
     exit(mysql_error());
  }
 
 
if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
  mysql_set_charset('utf8', $connection);
  
  $ip_address = $_SERVER['REMOTE_ADDR'];
  $date = date('Y-m-d H-i-s'); 
  $unic = false;
  
  $query = mysql_query("SELECT `ip_address`, `date`, `unic` FROM `visits` WHERE `ip_address`='$ip_address' AND `date`='$date' AND `unic`=true") || die(mysql_error());
  $row = mysql_fetch_array($query);
 
 
 
  
  $query = mysql_query("SELECT `ip_address`, `date`, `unic` FROM `visits` WHERE `ip_address`='$ip_address' AND `date`='$date' AND `unic`=false") || die(mysql_error());
  $row = mysql_fetch_array($query);
 
 
  if($query){
        $query = mysql_query("INSERT INTO `visits`(`ip_address`,`date`,`unic`)  `VALUES` ('$ip_address', '$date', true)");
         echo "Add unic view";
  }
  
  
  $query = mysql_query("SELECT `ip_address`, `date` FROM `visits` WHERE `ip_address`='$ip_address' AND `date`='$date'") || die(mysql_error());
  $row = mysql_fetch_array($query);
 
 
 
  if(!$query){
        $query = mysql_query("INSERT INTO `visits`(`ip_address`,`date`,`unic`)  VALUES ('$ip_address', '$date', false)");
        echo "Add not unic view";
  }
  
exit();
 
?>
Теперь выводит вот:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\AppServ\www\mysite\stats.php on line 25

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\AppServ\www\mysite\stats.php on line 31

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in E:\AppServ\www\mysite\stats.php on line 41
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
17.10.2016, 09:52
Panda_Geek, странная фигня. Как минимум должен текст ошибки на экране появляться. Имею ввиду ошибку mysql, а не PHPшный Warning.

Попробуйте начать с запроса попроще, скажем SELECT * FROM `visits`, затем постепенно добавляйте остальные условия. Просто чтобы понять, проблема в запросе или чём-то ещё.
1
0 / 0 / 0
Регистрация: 14.12.2015
Сообщений: 11
17.10.2016, 10:19  [ТС]
Я кажется понял в чём прикол, оно просто предупреждает что вы не отправляете 2й параметр в фетч, который по дефолту чему-то равен и его отправлять не обязательно.
Тут такой теперь вопрос:
Я отправляю запрос с определёнными параметрами и в базе строчек подходящих под них, не оказалось, что мне вернёт не mysql_query, и что вернёт в случае если всё таки нашлись (мне нужно это для построения условия)
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
17.10.2016, 10:32
Цитата Сообщение от Panda_Geek Посмотреть сообщение
что мне вернёт не mysql_query,
Пустой ресурс в 0 строк, но не falsе
Цитата Сообщение от Panda_Geek Посмотреть сообщение
и что вернёт в случае если всё таки нашлись
Не пустой ресурс
Цитата Сообщение от Panda_Geek Посмотреть сообщение
мне нужно это для построения условия
http://php.net/manual/ru/funct... m-rows.php
1
94 / 94 / 68
Регистрация: 26.03.2015
Сообщений: 248
17.10.2016, 10:36
Цитата Сообщение от Panda_Geek Посмотреть сообщение
Я отправляю запрос с определёнными параметрами и в базе строчек подходящих под них, не оказалось, что мне вернёт не mysql_query, и что вернёт в случае если всё таки нашлись (мне нужно это для построения условия)
В обоих случаях будет возвращена переменная типа resource. Если хотите проверить, были найдены строки или нет, можете воспользоваться конструкцией:
PHP
1
2
3
if (mysql_num_rows($result) > 0) {
    // code...
}
где $result - ресурс, возвращаемый функцией mysql_query().
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2016, 10:36
Помогаю со студенческими работами здесь

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private: int* a; size_t size_; ...

Исправить ошибки в коде
int _tmain(int argc, _TCHAR* argv) { return 0; } #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;windows.h&quot; // Две...

Исправить ошибки в коде
Что не так в программе? program zap52218; type dan=record fam:string; vozr:integer; pol:char; ...

Исправить ошибки в коде
Доброй вечер программисты. Пожалуйста помогите исправить ошибку в задаче. Если ввести матрицу 2x2, и ее эл-ты равны -1 -1 и -1 -1...

Исправить ошибки в коде
#include &lt;windows.h&gt; #include &lt;mmsystem.h&gt; #include &lt;vcl.h&gt; #pragma hdrstop #include &quot;IniFiles.hpp&quot; #include &lt;Tlhelp32.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru