[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: БД выводит не то, что надо!
60reg
При каждом обновлении страницы в бд в поле rating прибавляеться по +15, почему код выводит 15, а не та что уже в бд (90)

// Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))
$query = 'INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'.time().'", `rating` = `rating` +15;';

$res = 'SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ';

$sql = mysql_query($res);

echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<response>
<user>
<rating>'
.$rating.'</rating>
</user>
</response>'
;


_____________
PRchik.ru | Раскрутись и заработай!
sergeiss
60reg, ты распиши словами, плз, ЧТО у тебя делает каждый код. Каждая строка. Просто напиши камент перед каждой строкой. Я думаю, что сам поймешь в процессе, что же тут происходит.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
60reg
sergeiss,


//Добавляет пользователя или обновляет данные его
$query = 'INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'.time().'", `rating` = `rating` +15;';
//Выводит данные пользователя
$res = 'SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ';
//Обрабатывает переменную res
$sql = mysql_query($res);
// выводит общее число rating из бд
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<response>
<user>
<rating>'
.$rating.'</rating>
</user>
</response>'
;


_____________
PRchik.ru | Раскрутись и заработай!
sergeiss
60reg
А теперь давай разберем, что же на самом деле делается :) Я скопирую твой код, но добавлю номера строк в каментах
//1 Добавляет пользователя или обновляет данные его
$query = 'INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'.time().'", `rating` = `rating` +15;';
// 3 Выводит данные пользователя
$res = 'SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ';
// 5 Обрабатывает переменную res
$sql = mysql_query($res);
// 7 далее не существенно для данной проблемы

Итак...
1: создаем переменную $query, содержащую запрос к БД на вставку/обновление данных
3: создаем переменную $res, содержащую запрос с выборкой
5: запускаем запрос, используя переменную $res...

А теперь перечитай заново то, что написал ты и то, что написал я и ответь: где тут ЗАПУСКАЕТСЯ запрос на обновление/вставку, созданный в самом начале? Да, текст запроса ты создал. Но в БД его не отправил. Поэтому совершенно естественно, что запрос с выборкой (3) возвращает старое значение. Оно ж ведь не было изменено.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
60reg
sergeiss под вторым номером идет UPDATE или что... мне никак не сообразить... подскажи пожалуйста!

_____________
PRchik.ru | Раскрутись и заработай!
DeeKeiD
В базу поступает только 1 запрос (на выборку данных)
$res = 'SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ';
$sql = mysql_query($res);

А вот этот
 $query = 'INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'", `rating` = `rating` +15;';
Просто висит в переменной, ибо нету mysql_query($query);


// Записываем запрос записи\обновления в переменную.
$query1 = 'INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'.time().'", `rating` = `rating` +15;';
// Отправляем запрос в базу.
$res_1 = mysql_query($query1);
// Записываем запрос выборки в переменную.
$query2 = 'SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ';
// Отправляем запрос в базу.
$res_2 = mysql_query($query2);


// Совет на будещее, заранее продумывай логику. ;)

_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©
60reg
DeeKeiD все равно что-то не то!! выводит число 15 которое записывается в бд, а не то которое уже в бд находиться (150 к примеру). при следующем обновлении страницы должно выводить уже 165, а выводить всегда 15!


_____________
PRchik.ru | Раскрутись и заработай!
Arh
а от куда берётся $rating?

echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<response>
<user>
<rating>'
.$rating.'</rating>
</user>
</response>'
;


Может рейтинг надо брать из базы?



mysql_query('INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'")
ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'
.time().'", `rating` = `rating` +15;');
$row = mysql_query('SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ');
echo '
<?xml version="1.0" encoding="utf-8"?>
<response>
<user>
<rating>'
.$row['rating'].'</rating>
</user>
</response>'
;


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
60reg
Arh таким способом вообще ничего не выводит
<rating>'.$res_2['rating'].'</rating>


_____________
PRchik.ru | Раскрутись и заработай!
Arh
60reg

я уже подзабыл как mysql_query пользоваться, переходите на PDO)

mysql_query('INSERT INTO `stat` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'")
ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'
.time().'", `rating` = `rating` +15;');
$query = mysql_query('SELECT `rating` FROM `stat` WHERE uid = "'.$viewer_id.'" ');
$row = mysql_fetch_assoc($query);
echo '
<?xml version="1.0" encoding="utf-8"?>
<response>
<user>
<rating>'
.$row['rating'].'</rating>
</user>
</response>'
;


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
DeeKeiD
Цитата (60reg @ 30.07.2014 - 12:32)
DeeKeiD все равно что-то не то!! выводит число 15 которое записывается в бд, а не то которое уже в бд находиться (150 к примеру). при следующем обновлении страницы должно выводить уже 165, а выводить всегда 15!

Значит проблема в записи в базу.
Что показывает если дописать к этим строчкам or die();

$res_1 = mysql_query($query1) or die(mysql_error());
$res_2 = mysql_query($query2) or die(mysql_error());


_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.