2013-03-08 3 views
0

Вот мой код для отслеживания взглядов IMAGE (tracks.php скрипта):Двойных записей вставленных при отслеживании изображения просмотров

$img_id = $_GET['img_id']; 
$db->insert(TRACKS, $img_id); 
header('Content-Type: image/jpeg'); 
//then output img's content 

Когда я использую header() функцию и вывод контент на изображении, в записи дублируется. Я не знаю почему?

Пожалуйста, помогите мне. Огромное спасибо.

ответ

0

Существует несколько причин, по которым это может произойти, что мне будет трудно отслеживать работу, не выполняя несколько тестов и больше узнать об объекте $ db.

→ Простым решением проблемы является проверка того, что $ img_id еще не существует в базе данных, прежде чем вставлять его.

Использование Zend DB объект $ дб для проверки img_id первый должен работать что-то вроде этого:

$select = $db->select(); 
$select->from('table_name', '*'); 
$select->where('img_id = ?', $img_id); 

$rows = $db->fetchAll($select); 

if(count($rows[0]) == 0) { $db->insert(TRACKS, $img_id); } 

убедившись, что дезинфицировать $ img_id первый держать sql injection со спины.

→ Затем проверьте rowCount/mysql_num_rows(). Если возвращаемое число равно 0, тогда вставьте $ img_id. Иначе, не вставляйте его.

+0

Спасибо за ваш ответ. Объект $ db расширяется из класса Zend_DB. Когда я удаляю функцию header() и не выводя содержимое изображения, запись вставляется правильно. –

+0

Что произойдет, если вы поместите $ _GET и $ db-> вставку ниже вызова header()? –

+0

Я пробовал это, но он все еще дублировал вставленную запись. –

Смежные вопросы