Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не могу понять почему скрипт неправильно работает
ak167  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Ушел в отрыв!)))
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 19030
На форуме: 7 лет, 2 месяца, 24 дня
Карма: 1

Не курю:
30 лет, 8 месяцев, 27 дней


Всем привет!
Пишу скрипт облака тэгов. Начал делать ещё вчера, но застрял на одном моменте, когда скрипт делает совсем не то, что надо. В чём дело понять не могу. Вчера 4 часа бился над разгадкой и бес толку, сегодня вот уже 2,5 часа бьюсь и так не могу решить. Сил моих больше нет решать эту головоломку...

Задача такая: есть переменная $tags, которой передаются тэги через запятую, например: тэг1, тэг2, тэг3. Нужно сделать так, чтобы скрипт проверял если такой тэг в базе и если есть, то повышал его рейтинг на 1, а если нет (то есть это новый тэг), то просто записывал его в базу. Проблема в том, что он всегда пытается повысить рейтинг даже для тех тэгов, которых нет в базе! Почему так происходит?

			 // составим sql для записи новых тэгов либо увеличения рейтинга старых
if ($tags)
{
$tags_mas = explode(",", $tags); // объединим тэги в массив и удалим лишние пробелы по бокам
$count_tags = count($tags_mas); // подсчитаем сколько всего тэгов

for ($i=0; $i<$count_tags; $i++)
{
$tags_mas[$i] = trim($tags_mas[$i]);
$sql_select_tags[$i] = 'SELECT rating FROM '.$db["db_table_tags"].' WHERE tags="'.$tags_mas[$i].'" LIMIT 0, 1';

$result_select_tags[$i] = connect_bd($sql_select_tags[$i]);

if(!$result_select_tags[$i]) // запишем тэг в БД, если его до этого там не было
{
$sql = 'INSERT INTO '.$db['db_table_tags'].' (tags, rating) VALUES ("'.$tags_mas[$i].'", 1)';
$result_insert_tags = connect_bd($sql);

echo ' Выполняем запись!';
}
else // увеличим счётчик тэга, если он уже есть в БД
{
$count_rating[$i] = mysql_fetch_array($result_select_tags[$i]); // разложим полученные данные в массив

$count_rating[$i]['rating']++;

// формируем sql-строку и коннектимся к БД
$sql = 'UPDATE '.$db['db_table_tags'].' SET tags="'.$tags_mas[$i].'", rating="'.$count_rating[$i]['rating'].'" WHERE tags="'.$tags_mas[$i].'"';
$result = connect_bd($sql);

echo ' Выполняем увеличение!';
}
}
}

Вроде бы простой скрипт, а я застрял из-за него на много часов!
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
waldicom  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 6204
Пользователь №: 5552
На форуме: 8 лет, 5 месяцев, 1 день
Карма: 162




А что за структура таблицы? Primary key отсутствует?


--------------------
Свои мозги еще никто не отменял.
Телепатов нету.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ak167  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Ушел в отрыв!)))
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 19030
На форуме: 7 лет, 2 месяца, 24 дня
Карма: 1

Не курю:
30 лет, 8 месяцев, 27 дней


Цитата (waldicom @ 2.08.2016 - 14:15)
А что за структура таблицы? Primary key отсутствует?

waldicom, Primary Key есть. Вот sql-запрос для создания таблицы.

CREATE TABLE `gs_blog_tags` (
`tags` varchar(255) DEFAULT NULL,
`rating` int(11),
PRIMARY KEY (`tags`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0";
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5910
Пользователь №: 1
На форуме: 10 лет, 10 месяцев
Карма: 125

Не пью :
22 года, 3 месяца, 1 день


Цитата (ak167 @ 2.08.2016 - 15:54)
$tags_mas = explode(",", $tags); // объединим тэги в массив и удалим лишние пробелы по бокам

foreach($tags_mas as $k=>$v)$tags_mas[$k] = trim($v);


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 265
Пользователь №: 39616
На форуме: 2 года, 6 месяцев, 24 дня
Карма: 31




connect_bd() что возвращает? Небось mysql_query()?

P.S. Это у тебя часть поисковика с ИИ? smile.gif



--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ak167  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Ушел в отрыв!)))
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 19030
На форуме: 7 лет, 2 месяца, 24 дня
Карма: 1

Не курю:
30 лет, 8 месяцев, 27 дней


Цитата (brevis @ 2.08.2016 - 14:48)
connect_bd() что возвращает? Небось mysql_query()?

P.S. Это у тебя часть поисковика с ИИ? :)

brevis , да именно его она и возвращает. Нижу привожу код функции.
Нет, это не поисковик с ИИ а движок для сайтов:)

function connect_bd($sql) // функция соединения с БД
{

global $db;

$connect = mysql_connect($db['db_server'], $db['db_user'], $db['db_pass']); // коннект к БД
mysql_select_db($db['db_name'], $connect); // выбор БД
mysql_query("SET NAMES 'cp1251'");
$result = mysql_query($sql, $connect);

return $result;

}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 265
Пользователь №: 39616
На форуме: 2 года, 6 месяцев, 24 дня
Карма: 31




Ну попробуй так:
if(!$result_select_tags[$i]) // запишем тэг в БД, если его до этого там не было
==>
if (mysql_num_rows($result_select_tags[$i]) == 0) // запишем тэг в БД, если его до этого там не было


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ak167  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Ушел в отрыв!)))
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 324
Пользователь №: 19030
На форуме: 7 лет, 2 месяца, 24 дня
Карма: 1

Не курю:
30 лет, 8 месяцев, 27 дней


Цитата (brevis @ 2.08.2016 - 15:00)
Ну попробуй так:
if(!$result_select_tags[$i]) // запишем тэг в БД, если его до этого там не было
==>
if (mysql_num_rows($result_select_tags[$i]) == 0) // запишем тэг в БД, если его до этого там не было

brevis, ооо! Вот теперь работает! Как же я забыл про mysql_num_rows. Целый год на php ничего не писал, вот и вылетело из памяти.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса