내 사이트 방문자에 대한 통계 스크립트를 만들려고합니다. 이를 위해 방문자의 IP를 날짜 및 경과 횟수와 함께 기록합니다. 첫 번째 방문 인 경우 데이터베이스의 모든 레코드에서 하지만 하루에 1 인당 1 패스를 계산하고 싶습니다. 는 IP가 이미 존재 경우, 날짜가 하루 다른 : 우리는 (+1)을 전달하는 수를 오늘의 날짜를 지정하고 증가 내가 뭘하려고 오전중복 삽입 키 업데이트 IF 문
.
문제 : 날짜가 다른 날짜와 다를 경우 변경되지만, IP가 이미 계산 된 경우에도 통과 횟수가 계속 증가합니다.
날짜 변경 ... 여기내 테이블 구조 그것은 단지 다음날 수행해야
:
$IP_NewGuest = $_SERVER['REMOTE_ADDR'];
$Today = date('d/m/Y');
$SQL = "INSERT INTO `ChartsGuests` (`IP_Guest` , `Date`, `Total`) VALUES ('".$IP_NewGuest."' , '".$Today."', 1)
ON DUPLICATE KEY UPDATE
Date = IF(Date != '".$Today."', VALUES(Date), '".$Today."'),
Total = IF(Date != '$Today', VALUES(Total), Total + 1)";
$REQ = $DB->prepare($SQL);
$REQ->execute() or die(var_dump($REQ->errorInfo()));
// echo $SQL;
:
다음
--
-- Table structure for table `ChartsGuests`
--
CREATE TABLE `ChartsGuests` (
`IP_Guest` varchar(39) NOT NULL,
`Date` varchar(10) NOT NULL,
`Total` int(11) NOT NULL,
PRIMARY KEY (`IP_Guest`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB DEFAULT CHARSET=utf8;
코드입니다
날짜가 바뀌면 다음 날에만해야합니다 ... 어디에 문제가 있는지 알 수 없습니다. 나는 "이중화 키"를 "IF"와 함께 사용하는 것은 이번이 처음입니다 ...
미리 감사드립니다!
사용 https://piwik.org/을 더 많은 것을 얻게 될 것이고 바퀴를 재발 명할 필요가 없을 것입니다 .. 또한 SQL 매개 변수가 무엇인지 배우면 코드가 훨씬 안전합니다 – user3791372
** 경고 ** : 이것은 심각한 [SQL injection 버그] (http : /bobby-tables.com/)'$ _GET' 데이터가 쿼리 내에서 사용되기 때문입니다. 가능하면 ** prepared statements **를 사용하십시오. 이것들은 [mysqli] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)와 [PDO] (http://php.net/manual/)에서 매우 간단합니다. en/pdo.prepared-statements.php) 어디에서 사용자가 제공 한 데이터는 나중에 사용되는 것에 따라'bind_param' 또는'execute'를 사용하여 채워지는'?'또는': name' 지시자로 지정됩니다. **'$ _POST' 또는'$ _GET' 데이터를 쿼리에 직접 입력하지 마십시오. – tadman
MySQL은 날짜를 ISO-8601 형식으로, 즉 'YYYY-MM-DD'로 선호합니다. 비표준 형식을 사용하면 문제가 많으며 정렬 문제가 발생할 수 있으며 색인을 생성 할 수 없습니다. 데이터를 표시 할 때 원하는 형식으로 언제든지 형식을 지정할 수 있습니다.이 설정은 국가 별 설정이나 기본 설정에 따라 매우 특수한 경우가 많습니다. – tadman