PDA

View Full Version : مشکلی فوری در دیتابیس



shz_furion
سه شنبه 30 اردیبهشت 1393, 11:07 صبح
سلام و عرض ادب به دوستان.
مشکلی فوری و جدی پیش اومده از طرف یکی از دیتابیس ها.این برنامه رو خودم نوشتم و اطلاعات زیادی ارسال میشه.یعنی کانکشن ها به دیتابیس زیاد هست و به صورت خدماتی به وبلاگ ها خدمات داده میشه.
حالا پشتیبانی یه اروری فرستاده و گفته باید کوئری ها رو نرمال کنید و کوئری های غیر نرمال رو شناسایی کنید و از فرستادن اون ها به دیتابیس و وقفه در کوئری ها جلوگیری کنید.
این هم ارور:
themevie_hossein localhost themevie_like Query 0 Sending data SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = 'facebook-posts.blogfa.com/post/91' AND u
381 themevie_hossein localhost themevie_like_v2 Query 0 Sending data SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = 'http://designer-75.blogfa.com/post/110/K
382 themevie_hossein localhost themevie_like Query 0 Sending data SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = 'romanario.blogfa.com/post-1400.aspx' AND
383 themevie_hossein localhost themevie_like Query 0 Sending data SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = 'pezeshkiyazd91.blogfa.com/post/461' AND
خواهشا یکی سریع جواب بده چون خیلی زیاد عجله دارم.یه دنیا ممنون.

MMSHFE
سه شنبه 30 اردیبهشت 1393, 11:50 صبح
تا اینجا که چیز زیادی مشخص نیست (باید کوئریهای بیشتری بگذارین - خطاها کافی نیست) ولی علی الحساب بجای COUNT(u_id) از COUNT(*) استفاده کنید چون سرعتش بیشتره.

shz_furion
سه شنبه 30 اردیبهشت 1393, 12:00 عصر
اطلاعات به این صورت جمع آوری و نمایش داده میشه:



<?php
$plus = $_GET['plus'];
if($plus=='1'){$plus='1';$minus = '';}
elseif($plus=='-1'){$plus='';$minus = '1';}
$url=$_GET['url'];
$url=strtolower($url);
$url=str_replace('www.','',$url);
$url=str_replace('http://','',$url);
$url=str_replace('https://','',$url);
$page = $url;
$ip = $_SERVER['REMOTE_ADDR'];

//Include your mysql connection file
include 'mysql_conf.php';

$ip = mysql_real_escape_string( $ip );
$page = mysql_real_escape_string( $page );
$plus = mysql_real_escape_string( $plus );
$minus = mysql_real_escape_string( $minus );
$uid ='true';

//Lets see if the user / ip address has already liked the article on this page

$query = mysql_query("SELECT u_id FROM tbllikes WHERE u_ip = '".$ip."' AND u_page = '".$page."' AND u_uid = '".$uid."' LIMIT 1");
$count = mysql_num_rows( $query );

//If the user hasn't then let's go ahead and add the like to the likes table
//If there is an error lets output an error message, else lets go ahead and output a success message
if(!$count)
{
$query = mysql_query("SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = '".$page."' AND u_uid = '".$uid."' LIMIT 1");
$row = mysql_fetch_assoc( $query );

$count = $row['u_count'] + 1;// add one to the database count for this specific article
if(!empty($plus) && $plus=='1'){$plus='1';$minus='';}
if(!empty($minus) && $minus=='1'){$plus='';$minus='1';}
if( mysql_query("INSERT INTO tbllikes VALUES('','".$uid."','".$page."','".$plus."','".$minus."','".$ip."',NULL)") )//add record to table
{
$json = array("error"=>false, "message"=>"Successfully liked", "count"=>$count);
{
$json = array("error"=>true, "message"=>"Error: Could not process like");
}
}else
{
//This means we already have a like for this article on this page
$json = array("error"=>true, "message"=>"Error: IP address already likes ".$uid." content from: ".$page);
}

$plus = $_GET['plus'];
if($plus=='1'){$plus='1';$minus = '';}
$query = mysql_query("SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = '".$page."' AND u_plus = '1' LIMIT 1");
$row = mysql_fetch_assoc( $query );
$plus = $row['u_count'];

$query = mysql_query("SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = '".$page."' AND u_minus = '1' LIMIT 1");
$row = mysql_fetch_assoc( $query );
$minus = $row['u_count'];
if(!empty($_GET['plus']) && $_GET['plus']=='1')
{$new_point=$plus;}
elseif(!empty($_GET['plus']) && $_GET['plus']=='-1')
{$new_point=$minus;}
echo 'ok'.'||'.$new_point;

}
else{
$plus = $_GET['plus'];
if($plus=='1'){$plus='1';$minus = '';}
$query = mysql_query("SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = '".$page."' AND u_plus = '1' LIMIT 1");
$row = mysql_fetch_assoc( $query );
$plus = $row['u_count'];

$query = mysql_query("SELECT COUNT(u_id) AS u_count FROM tbllikes WHERE u_page = '".$page."' AND u_minus = '1' LIMIT 1");
$row = mysql_fetch_assoc( $query );
$minus = $row['u_count'];
if(!empty($_GET['plus']) && $_GET['plus']=='1')
{$new_point=$plus;}
elseif(!empty($_GET['plus']) && $_GET['plus']=='-1')
{$new_point=$minus;}
echo 'Err'.'||'.$new_point;

}
mysql_close($db_connection);
?>

shz_furion
سه شنبه 30 اردیبهشت 1393, 12:22 عصر
کاری که گفتید رو انجام دادم.الان میتونید مشکل رو تشخیص بدید؟؟؟

MMSHFE
سه شنبه 30 اردیبهشت 1393, 12:39 عصر
این کد رو تست کنید:

if(!isset($_GET['plus']) || $_GET['plus'] == '-1') {
$plus = '';
$minus = '1';
}
else {
$plus = '1';
$minus = '';
}
//Include your mysql connection file
include 'mysql_conf.php';
$page = mysql_real_escape_string(str_replace(array('www.', 'http://', 'https://'), '' , strtolower($_GET['url'])));
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
//Lets see if the user / ip address has already liked the article on this page
$query = mysql_query("SELECT COUNT(*) AS `total` FROM `tbllikes` WHERE (`u_ip`='{$ip}' AND `u_page`='{$page}' AND `u_uid`='true')");
//If the user hasn't then let's go ahead and add the like to the likes table
//If there is an error lets output an error message, else lets go ahead and output a success message
if($query && mysql_result($query, 0, 0) > 0) {
$count = mysql_result(mysql_query("SELECT COUNT(*) AS `total` FROM `tbllikes` WHERE (`u_page`='{$page}' AND `u_uid`='true')"), 0, 0);
if(mysql_query("INSERT INTO tbllikes VALUES('','{$uid}','{$page}','{$plus}','{$minus}', '{$ip}',NULL)")) { //add record to table
$json = array('error'=>false, 'message'=>'Successfully liked', 'count'=>$count + 1); // add 1 score to this article
}
else {
$json = array('error'=>true, 'message'=>'Error: Could not process like');
}
}
else {
//This means we already have a like for this article on this page
$json = array('error'=>true, 'message'=>"Error: IP address already likes {$uid} content from: {$page}");
}

if($plus == 1) {
$newScore = mysql_result(mysql_query("SELECT COUNT(*) AS `plus` FROM `tbllikes` WHERE (`u_page`='{$page}' AND `u_plus`='1')"), 0, 0);
}
else {
$newScore = mysql_result(mysql_query("SELECT COUNT(*) AS `minus` FROM `tbllikes` WHERE (`u_page`='{$page}' AND `u_minus`='1')"), 0, 0);
}
echo (mysql_result($query, 0, 0) > 0 ? 'OK' : 'Err') . '||' . $newScore;
سعی کردم کدتون رو بهینه کنم.

shz_furion
سه شنبه 30 اردیبهشت 1393, 13:13 عصر
خیلی ممنون.فقط مشکلی هست.آخر کار که باید امتیاز رو به طور مثال به صورت ok||12 یا Err||12 نشون بده،هیچی نمایش داده نمیشه و یعنی امتیازی ثبت نمیشه.

MMSHFE
سه شنبه 30 اردیبهشت 1393, 13:26 عصر
ولی من که اکو اون آخر رو گذاشتم. باید بالأخره یه چیزی نشون بده. امتیاز ثبت میشه یا نه رو باید توی دیتابیس چک کنید ولی این اکو آخریه بهرحال یه چیزی باید چاپ کنه. مگه اینکه یه جایی تو اسکریپت خطا وجود داشته باشه که نرسه به اون انتها. میتونید تیم ویور بدین تو پیام خصوصی؟

shz_furion
سه شنبه 30 اردیبهشت 1393, 13:33 عصر
سلام.ببخشید مشکل از من بود.
مشکل اینجاست که تمام رای ها رو ثبت می کنه.یعنی فرقی برای آی پی ها نمیذاره و همه رای ها رو ثبت می کنه.یه تستی می کنید؟؟

MMSHFE
سه شنبه 30 اردیبهشت 1393, 13:36 عصر
شرمنده شرط رو برعکس نوشته بودم. این کد رو تست کنید:

if(!isset($_GET['plus']) || $_GET['plus'] == '-1') {
$plus = '';
$minus = '1';
}
else {
$plus = '1';
$minus = '';
}
//Include your mysql connection file
include 'mysql_conf.php';
$page = mysql_real_escape_string(str_replace(array('www.', 'http://', 'https://'), '' , strtolower($_GET['url'])));
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
//Lets see if the user / ip address has already liked the article on this page
$query = mysql_query("SELECT COUNT(*) AS `total` FROM `tbllikes` WHERE (`u_ip`='{$ip}' AND `u_page`='{$page}' AND `u_uid`='true')");
//If the user hasn't then let's go ahead and add the like to the likes table
//If there is an error lets output an error message, else lets go ahead and output a success message
if($query && mysql_result($query, 0, 0) == 0) {
$count = mysql_result(mysql_query("SELECT COUNT(*) AS `total` FROM `tbllikes` WHERE (`u_page`='{$page}' AND `u_uid`='true')"), 0, 0);
if(mysql_query("INSERT INTO tbllikes VALUES('','{$uid}','{$page}','{$plus}','{$minus}', '{$ip}',NULL)")) { //add record to table
$json = array('error'=>false, 'message'=>'Successfully liked', 'count'=>$count + 1); // add 1 score to this article
}
else {
$json = array('error'=>true, 'message'=>'Error: Could not process like');
}
}
else {
//This means we already have a like for this article on this page
$json = array('error'=>true, 'message'=>"Error: IP address already likes {$uid} content from: {$page}");
}

if($plus == 1) {
$newScore = mysql_result(mysql_query("SELECT COUNT(*) AS `plus` FROM `tbllikes` WHERE (`u_page`='{$page}' AND `u_plus`='1')"), 0, 0);
}
else {
$newScore = mysql_result(mysql_query("SELECT COUNT(*) AS `minus` FROM `tbllikes` WHERE (`u_page`='{$page}' AND `u_minus`='1')"), 0, 0);
}
echo (mysql_result($query, 0, 0) == 0 ? 'OK' : 'Err') . '||' . $newScore;
باید میگفتم اگه تعداد رکوردهایی که با IP جاری پیدا میشه برابر با صفر بود، بعد بره اضافه کنه که اشتباهاً گفته بودم اگه بیشتر از صفر بود. درنتیجه همه میتونستن رأی بدن بجز کسی که میخواست رأی جدید بده (برعکس شده بود).

shz_furion
سه شنبه 30 اردیبهشت 1393, 13:47 عصر
ببخشید همون مشکل قبلی رو داره.دانلود کنید اسکریپت رو و تست کنید:
tools.themeviews.ir/like/like3.rar