PDA

View Full Version : مشکل در کد شمارش بازدید مطلب



mohamad_a226
یک شنبه 23 تیر 1398, 10:21 صبح
سلام. خسته نباشید
ببخشید من از کد زیر برای شمارش بازدید مطلب میخوام استفاده کنم، ولی متأسفانه با syntax error مواجه میشم.
نمیدونم کدوم قسمت کد ایراد داره. ممنون میشم راهنمایی کنید


<?php
if ($_SERVER['REQUEST_METHOD']=='POST'){
header("Content-Type: application/json; charset=UTF-8");
$conn = new mysqli("localhost", "username", "password", "dbname");
$post_id=$_POST['post_id'];
$sql="select meta_id,post_id,meta_key,meta_value from wp_postmeta where post_id='$post_id' and meta_key='_post_views_count'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$m_id=$row["meta_id"];
$count=$row["meta_value"];
$count=$count+1;
echo $count;
$qurey_insert_view="update wp_postmeta set meta_value='$count' where post_id='$post_id' and meta_id='$m_id'";
if ($conn->query($qurey_insert_view)==true) {
echo 'Record updated successfully';
} else {
echo 'Error updating record: ' . $conn->error;
}
$conn->close();
}
?>

plague
یک شنبه 23 تیر 1398, 20:27 عصر
اصل کار اون سینتکس اررورست که نزاشتی

mohamad_a226
یک شنبه 23 تیر 1398, 22:09 عصر
اصل کار اون سینتکس اررورست که نزاشتی

من با برنامه Postman تست میکنم و فقط همین Syntax error رو میزنه و چیزی نمیزنه.

ali_sed
سه شنبه 25 تیر 1398, 11:41 صبح
من با برنامه Postman تست میکنم و فقط همین Syntax error رو میزنه و چیزی نمیزنه.

ممکنه مشخصات اتصال به دیتابیس را اشتباه وارد کرده باشید؟ حتما شروط لازم برای بررسی اتصال موفق به دیتابیس و خالی نبودن $result (مثلا به دلیل اشتباه بودن سینتکس کوئری) را اضافه کنید.

من مشخصات یک دیتابیس وردپرس را وارد کردم و پیام موفقیت آمیز زیر نمایش داده شد:
1Record updated successfully

ali_sed
سه شنبه 25 تیر 1398, 12:06 عصر
من با برنامه Postman تست میکنم و فقط همین Syntax error رو میزنه و چیزی نمیزنه.

چند نکته دیگه هم حتما در برنامه خود لحاظ کنید.

۱. حتما مطمئن شوید که $row خالی نباشد در صورت خالی بودن به این معنی است که meta_key مورد نظر _post_views_count برای پست مورد نظر شما وجود ندارد و بجای آپدیت باید از اینسرت استفاده کنید. (دستور آپدیت حتی اگر سطری برای بروزرسانی نیابد هیچ خطایی بر نمیگرداند)
۲. چنین دستوراتی که مقدار جدید وابسته به مقدار قبلی می باشد حتما باید در یک TRANSACTION صورت گیرد. که یا باید از دستورات begin commit rollback استفاده کنید یا اینکه در این مورد خاص بروزرسانی را در یک دستور پیاده کنید چیزی شبیه به این:

update wp_postmeta set meta_value=meta_value+1 where ...

(شرح مشکل در صورت استفاده از کد شما: ممکن است بصورت همزمان دو کاربر یک صفحه را باز کنند. هر دو دستور سلکت اجرا می شود مثلا مقدار قبلی ۲۰ تا بوده یکی بهش اضافه میشه یعنی عدد ۲۱ و سپس هر دو دستور بروزرسانی مقدار ۲۱ را در جدول درج می کنند در حالی که باید مقدار ۲۲ ذخیره شود)

mohamad_a226
چهارشنبه 26 تیر 1398, 16:48 عصر
چند نکته دیگه هم حتما در برنامه خود لحاظ کنید.

۱. حتما مطمئن شوید که $row خالی نباشد در صورت خالی بودن به این معنی است که meta_key مورد نظر _post_views_count برای پست مورد نظر شما وجود ندارد و بجای آپدیت باید از اینسرت استفاده کنید. (دستور آپدیت حتی اگر سطری برای بروزرسانی نیابد هیچ خطایی بر نمیگرداند)
۲. چنین دستوراتی که مقدار جدید وابسته به مقدار قبلی می باشد حتما باید در یک TRANSACTION صورت گیرد. که یا باید از دستورات begin commit rollback استفاده کنید یا اینکه در این مورد خاص بروزرسانی را در یک دستور پیاده کنید چیزی شبیه به این:

update wp_postmeta set meta_value=meta_value+1 where ...

(شرح مشکل در صورت استفاده از کد شما: ممکن است بصورت همزمان دو کاربر یک صفحه را باز کنند. هر دو دستور سلکت اجرا می شود مثلا مقدار قبلی ۲۰ تا بوده یکی بهش اضافه میشه یعنی عدد ۲۱ و سپس هر دو دستور بروزرسانی مقدار ۲۱ را در جدول درج می کنند در حالی که باید مقدار ۲۲ ذخیره شود)

ممنون بابت توضیحی که دادین و همینطور توضیح درباره مشکلی که داخل کد هست.

تو کدی که داده بودم. خط زیر رو حذف کردم مشکل حل شد.


header("Content-Type: application/json; charset=UTF-8");