現在のページを送信するクエリを作成しようとしましたが、データベーステーブルclick_countに送信しています。私は私が間違って何をしているのか分からないのですが、私は今、私のエラー報告に何の誤りもないからです。クエリは実行されておらず、エコーされたエラーは表示されません。現在のページURLをデータベースに送信する
問題がセッションを構築しているかどうかはわかりません。 $_SESSION['page'] = $curPage;
。私がしようとしているのは、SELECT
のクエリでレコードがあるかどうかを確認し、そうでない場合はINSERT
とし、その時点からUPDATE
page_count
のユーザーがページを訪れるたびに実行します。
誰かが間違っている可能性があることを指摘しているものはありますか?
表click_count:
click_count
CREATE TABLE `click_count` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`page_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`page_count` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
コード:
session_start();
//create current page constant
$curPage = $_SERVER['PHP_SELF'];
//echo $_SERVER['REQUEST_URI'];
//set number of clicks variable to 0
$clicks = 0;
//set current page as session variable
$_SESSION['page'] = $curPage;
//do not recount if page currently loaded
if($_SESSION['page'] != $curPage) {
$click_sql = "
SELECT *
FROM click_count
WHERE user_id = ?
AND page_url = ?
";
if (!$click_stmt = $con->prepare($click_sql)) {
$click_stmt->execute(array($user_id, $curPage));
$click_stmt_rows = $click_stmt->fetchAll(PDO::FETCH_ASSOC);
$page_count = $click_stmt->rowCount();
if (!$click_stmt->errno) {
echo "Error selecting page count.";
}
} else if ($page_count == 0) {
//try to create new record and set count for new page to 1
//output error message if problem encountered
$click_insert_stmt = "
INSERT INTO click_count
(page_url, page_count)
VALUES(?, ?)";
if(!$click_stmt = $con->prepare($click_insert_stmt)) {
$click_insert_stmt->execute(array($curPage, 1));
echo "Could not create new click counter.";
}
else {
$clicks = 1;
}
} else {
//get number of clicks for page and add 1 fetch(PDO::FETCH_BOTH)
while($click_row = $click_insert_stmt->fetch(PDO::FETCH_BOTH)) {
$clicks = $row['page_count'] + 1;
//update click count in database;
//report error if not updated
$click_update_stmt = "
UPDATE click_count
SET page_count=page_count+1
WHERE page_url = ?
";
if(!$click_stmt = $con->prepare($click_update_stmt)) {
$click_update_stmt->execute(array($curPage));
echo "Could not save new click count for this page.";
}
}
}
}
更新されたコード:
$curPage = $_SERVER['PHP_SELF'];
$clicks = 0;
$click_sql = "
SELECT *
FROM click_count
WHERE user_id = ?
AND page_url = ?
";
$click_stmt = $con->prepare($click_sql);
$click_stmt->execute(array($user_id, $curPage));
$click_stmt_rows = $click_stmt->fetchAll(PDO::FETCH_ASSOC);
$page_count = $click_stmt->rowCount();
if ($page_count == 0) {
//try to create new record and set count for new page to 1
//output error message if problem encountered
$click_insert_stmt = "
INSERT INTO click_count
(user_id, page_url, page_count)
VALUES(?, ?, ?)";
if(!$click_stmt = $con->prepare($click_insert_stmt)) {
$click_insert_stmt->execute(array($user_id, $curPage, 1));
echo "Could not create new click counter.";
}
else {
$clicks = 1;
}
} else {
//get number of clicks for page and add 1 fetch(PDO::FETCH_BOTH)
while($click_row = $click_insert_stmt->fetch(PDO::FETCH_BOTH)) {
$clicks = $row['page_count'] + 1;
//update click count in database;
//report error if not updated
$click_update_stmt = "
UPDATE click_count
SET page_count=page_count+1
WHERE user_id = ?
AND page_url = ?
";
if(!$click_stmt = $con->prepare($click_update_stmt)) {
$click_update_stmt->execute(array($user_id, $curPage));
echo "Could not save new click count for this page.";
}
}
}
NEWEST CODE:
$curPage = $_SERVER['PHP_SELF'];
$clicks = 0;
$click_sql = "
SELECT *
FROM click_count
WHERE user_id = ?
AND page_url = ?
";
$click_stmt = $con->prepare($click_sql);
$click_stmt->execute(array($user_id, $curPage));
$click_stmt_rows = $click_stmt->fetchAll(PDO::FETCH_ASSOC);
$page_count = $click_stmt->rowCount();
if ($page_count == 0) {
$click_insert_sql = "
INSERT INTO click_count
(user_id, page_url, page_count)
VALUES(?, ?, ?)
ON DUPLICATE KEY UPDATE page_count=page_count+1;
";
$click_insert_stmt = $con->prepare($click_insert_sql);
$click_insert_stmt->execute(array($user_id, $curPage, 1));
}
私はむしろhttp://dev.mysql.com/doc/refman/5.7/en/insert-on([重複するキー更新の挿入]を使用します-duplicate.html)を使ってコードロジックを最小化する – Dragos
私にとって、この行 'if($ _ SESSION ['page']!= $ curPage){'は悪役の役を演じています。 –
@NanaPartykarもっと良い選択肢についてのご意見はありますか? – Paul