powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выполнение кода лишний раз
19 сообщений из 19, страница 1 из 1
Выполнение кода лишний раз
    #38794474
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть код:
Код: 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.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
<?php
session_start();

$slovo_original = $_SESSION["slovo_original"];
$slovo_k = $_POST["slovo"];
$perevod = $_POST["perevod"];
$znachenie = $_POST["znachenie"];

for ($i = 0; $i < count($perevod); $i++)
{
	$perevod[$i] = trim($perevod[$i]);
	$perevod[$i] = preg_replace("/ {2,}/", " ", $perevod[$i]);
	$perevod[$i] = preg_replace("/'/", "\'", $perevod[$i]);
	}

for ($i = 0; $i < count($znachenie); $i++)
{
	$znachenie[$i] = trim($znachenie[$i]);
	$znachenie[$i] = preg_replace("/ {2,}/", " ", $znachenie[$i]);
	$znachenie[$i] = preg_replace("/'/", "\'", $znachenie[$i]);
	}

include ('podkluchenie.php');

if($slovo_original != $slovo_k)
{
	$proverka_nalichiya_slova = mysql_query("  
	SELECT `s` FROM `k-ts` WHERE `s` = '".$slovo_k."'
	");
	
	$n = 0;
	while ($data = mysql_fetch_array($proverka_nalichiya_slova))
	{
		$proverka_nalichiya[$n] = $data['s'];
		$n++;
		}
		
	if(!isset($proverka_nalichiya))
	{
		mysql_query("
		UPDATE `k-ts`
		SET `s` = '".$slovo_k."'
		WHERE `s` = '".$slovo_original."' 
		");
		}
		else if(isset($proverka_nalichiya))
		{
			/////////////////////////////////////////////////////////////////////
			
			$ids_original = mysql_query("
			SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_original."'
			");
			
			$n = 0;
			while ($data = mysql_fetch_array($ids_original))
			{
				$ids_orig[$n] = $data['ids'];
				$n++;
				}
			
			$ids_original = $ids_orig[0];
			
			//////////////////////////////////////////////////////////////////////
			
			$ids_ispravlennogo = mysql_query("
			SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'
			");
			
			$n = 0;
			while ($data = mysql_fetch_array($ids_ispravlennogo))
			{
				$ids_ispr[$n] = $data['ids'];
				$n++;
				}
			
			$ids_ispravlennogo = $ids_ispr[0];
			
			//////////////////////////////////////////////////////////////////////
			
			mysql_query("
			UPDATE `k-t_s`
			SET `id_s` = '".$ids_ispravlennogo."'
			WHERE `id_s` = '".$ids_original."' 
			");
			
			mysql_query("
			UPDATE `k_l`
			SET `idk` = '".$ids_ispravlennogo."'
			WHERE `idk` = '".$ids_original."' 
			");
			
			mysql_query("
			DELETE FROM `k-ts` WHERE `s` = '".$slovo_original."'
			");
			}
	}

$a = count($perevod);//print_r($a);

for($i = 0; $i < $a; $i++)
{
	mysql_query("  
	INSERT IGNORE INTO `l-ts` (`s`)
	VALUES ('".$perevod[$i]."')
	");
	mysql_query(" 
	INSERT IGNORE INTO `tz` (`z`)
	VALUES ('".$znachenie[$i]."')
	");
	mysql_query("  
	INSERT INTO `k_l` (`idk`, `idl`, `idz`)
	VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
			(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
			(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
	");
	}
	
mysql_query("
UPDATE `k-ts`
SET `f` = 1
WHERE `s` = '".$slovo_k."' 
");
	
mysql_close($podkluchenie);

header("Location: http://***.php");

?>


При непонятных условиях вот этот кусок (а может и не только то, что я указал, а больший кусок):
Код: php
1.
2.
3.
4.
5.
6.
mysql_query("  
	INSERT INTO `k_l` (`idk`, `idl`, `idz`)
	VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
			(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
			(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
	");


заносит в бд перевод и значение два раза подряд. Более трёх раз не встречалось. Так происходит иногда, даже не понять тенденцию и условия. Причём, когда я повторяю замеченый случай с теми же данными, то всё нормально — не могу отследить причину. Может вообще не там ищу…
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38794650
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выведите на экран исходный запрос, посмотрите что возвращают вложенные запросы. var_dump ваше все.
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38794869
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал после скрипта сразу вывод результата: буду так ловить повторения.
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38794944
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Повторения происходят периодически, можно сказать даже часто, проверка их выводит: раз через десять. ХЗ…
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796862
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При помощи переменной проверил число повторений цикла вставки данных в базу: МИСТИКА))) Число повторений нормальное даже когда вставки дублируются. Что кроме цикла может заставить вставлять в бд записи ещё один раз?
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796864
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrejkПри помощи переменной проверил число повторений цикла вставки данных в базу: МИСТИКА))) Число повторений нормальное даже когда вставки дублируются. Что кроме цикла может заставить вставлять в бд записи ещё один раз?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
$b = 0;
	for($i = 0; $i < count($perevod); $i++)
	{
		mysql_query("  
		INSERT IGNORE INTO `l-ts` (`s`)
		VALUES ('".$perevod[$i]."')
		");
		mysql_query(" 
		INSERT IGNORE INTO `tz` (`z`)
		VALUES ('".$znachenie[$i]."')
		");
		mysql_query("  
		INSERT INTO `k_l` (`idk`, `idl`, `idz`)
		VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
				(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
				(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
		");
		$b++;
		}
	
	/////////////////////////
	$_SESSION["aaa"] = $b;
	/////////////////////////
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796865
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причём второй раз записи вставляются не по очереди (1,1,2,2,3,3,4,4), а партией (1,2,3,4,1,2,3,4). Напомню, это происходит редко. По последним наблюдениям неск раз на пару сотен обращений к циклу. Таблица в utf8 bin. Может дедло не в php?
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796866
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только что предаоложил: может дело в этой строке
Код: php
1.
SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'

,
может она выбирает более одного значения?
Гуру БД, как поведёт запрос, если эта строка выберет более одного значения? Хотя, этот столбец ункальный… ХЗ…
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796897
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, сделать логгирование запросов?
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796902
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleМожет, сделать логгирование запросов?
Я ещё ни разу не делал логирование. как это сделать?
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38796906
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменяете в коде mysql_query на название своей функции (или метода класса) работы с БД. А там уже легко добавить строчки для записи в файл текста запроса, ошибки выполнения, количества возвращаемых строк и т.д. и т.п.
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38797109
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

андрей... вот ерундой занимаетесь... судя по мыслям - голова есть, погладьте себя по ней - но вот ленивыми руками постучите по столу:)

1)а что будет если вернёт больше одной записи, хотя столбец вроде уникальный...
зашли в базу - как вы там к ней подключаетесь и выполнили запрос
вместо (селект поле из таблица где иникальное_поле=10)
на (...... уникальное_поле=10 или уникальное_поле=11) и посмотрели что будет - говорю, голова золотая, а вот руки ....

2)я не делал логирования...и прочая теоретическая ерунда...
на каждой команде mysql_query(ааа) добавили команду дозаписи ааа строки в файл.

потом по файлу посмотрите что было...

или

$mylog = '';

везде где запрос в базу, сразу дозапись запроса в переменую малог

везде где ветвление(улосвие) или цикл, дозапись в майлог, о том что выполнилась такаято итерация цикла, или сработало такоето условие.

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

потом сели, и пологу посмотрели - как выполнялась программа.

ЗЫ
всегда первый шаг поиска бага теоретический, но если пару часов и результата нету, надо от теории переходить к практике.
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38797545
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
INSERT INTO `k_l` (`idk`, `idl`, `idz`)
		VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` in ('море','фон')),  
				(SELECT `ids` FROM `l-ts` WHERE `s` = '3d'),
				(SELECT `idz` FROM `tz` WHERE `z` = '3Д-графика (трёхмерная графика)'))  


Этот запрос, как и следовало, не выполняется и ничего не записывает, видно, дело не в нём… Да, интересно девки пляшут. Колупаю дальше…
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38797551
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453на каждой команде mysql_query(ааа) добавили команду дозаписи ааа строки в файл.

Я впервые сталкиваюсь с отслеживанием, чирканите, пож, что за комманда и как её добавить.
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38797746
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38797752
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
file_put_content('filename.ext',$string, FILE_APPEND)
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38798053
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
5.
6.
7.
$kontrol = mysql_query("  
		INSERT INTO `k_l` (`idk`, `idl`, `idz`)
		VALUES ((SELECT `ids` FROM `k-ts` WHERE `s` = '".$slovo_k."'),  
				(SELECT `ids` FROM `l-ts` WHERE `s` = '".$perevod[$i]."'),
				(SELECT `idz` FROM `tz` WHERE `z` = '".$znachenie[$i]."'))  
		");
file_put_contents('kontrol.txt',$kontrol, FILE_APPEND);


Вот это возвращает 1.
Что вы имеете ввиду под дозаписью запроса в файл?
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38798214
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysql_query("select ...$k...");

-->

$string_query = "select ....$k...";

mysql_query($string_query);
file_put_content('file','query='.$string_query,FILE_APPEND)
...
Рейтинг: 0 / 0
Выполнение кода лишний раз
    #38798668
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, я понял, запрос зделать через переменную. А что такое $k у вас?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Выполнение кода лишний раз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]