رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در کوئری LIKE و Between (حل شد)
#1
سلام عزیزان
مشکل این کوئری چیه :
$query="SELECT * FROM dating WHERE t_fdate LIKE BETWEEN '%$get_date3%' AND '%$get_date4%' ";
خطا :
نقل قول:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:xampphtdocsTaghvim-2process.php on line 98

از این خط خطا میگیره (لاین 98) :
while($user=mysql_fetch_assoc($records))

مجموع کدها :
if (isset($_POST["submit3"])) {
    
    $get_date3=$_POST["fdate3"];
    $get_date4=$_POST["fdate4"];
    echo ' <table border="1" >
        <tr>
          <th>Row</th>
          <th>Persian Date</th>
          <th>Milade Date</th>
        </tr>
        ';
    
        mysql_query('set names "utf8"');
        $query="SELECT * FROM dating WHERE t_fdate LIKE BETWEEN '%$get_date3%' AND '%$get_date4%' ";
        $records=mysql_query($query);

    
       while($user=mysql_fetch_assoc($records))
       {
         echo '<tr>';
         echo "<td>".$user['t_id']."</td>";
         echo "<td>".$user['t_fdate']."</td>";
         echo "<td>".$user['t_edate']."</td>";      
         echo "</tr>";
       }
        echo '</table>' ; 
    
    echo '<br />';
    echo '<a href="index.php">Go back</a>';

}
else {  
   echo "Error in submit-3";
}


تشکر.
پاسخ
تشکر شده توسط:
#2
شما این مدلی نمیتونید توی تاریخ جستجو کنید. باید با timestamp ذخیره کنید و بعد تاریخهای شروع و پایان رو هم به timestamp تبدیل کنید و درنهایت با BETWEEN بین دو تاریخ جستجو کنید. مثال:
$start = jmktime(0, 0, 0, 1, 1, 1395);
$end = jmktime(23, 59, 59, 29, 12, 1395);
$query = "SELECT * FROM dating WHERE t_fdate BETWEEN {$start} AND {$end}";
پاسخ
تشکر شده توسط: پیام حیاتی
#3
برای من خیلی پیچیده شد.
الآن این کدهای Insert بنده هست :
if (isset($_POST["submit1"])) {
    
   $fa_date=$_POST["fdate"];
   $en_date=date("Y/m/d");
   
   mysql_query('set names "utf8"');
   $qry = "INSERT INTO dating(t_fdate, t_edate) VALUES('$fa_date','$en_date')";
   $result = mysql_query($qry);
   echo "Inserrt record";
   echo '<br />';
   echo '<a href="index.php">Go back</a>';
}
else {  
   echo "Error";
}

timestamp رو با اینها ذخیره کنم؟!!
پاسخ
تشکر شده توسط:
#4
خوب این روش ذخیره‌کردن از اساس اشتباهه. شما نباید تاریخ رو مستقیماً ذخیره کنید چون نمیتونه BETWEEN بگیره. یعنی نمیتونه تاریخهای بین رو محاسبه کنه چون BETWEEN بین اعداد و کلاً فرمتهای قابل‌شمارش بکار میره. برای ذخیره‌کردن تاریخ اگه فیلدتون DATETIME باشه هم باید با فرمتی که خود MySQL ذخیره میکنه کار کنید نه Y/m/d خالی. نوع فیلد رو int بگذارین و موقع ذخیره‌کردن برای تاریخ فقط خروجی تابع time رو بکار ببرین. تاریخ شمسی رو هم اصلاً فکرشم نکنید که بخواین مستقیماً توی دیتابیس ذخیره کنید و بعد با BETWEEN کار کنید چون اصلاً نمیشناسه چه برسه به اینکه BETWEEN رو هم بخواد محاسبه کنه. همونطور که گفتم، بجای ذخیره تاریخ با دو فرمت شمسی و میلادی، کافیه Timestamp جاری (خروجی تابع time() توی PHP) رو ذخیره کنید و نوع فیلد رو هم int بگذارین. بعد موقع جستجو تاریخهای موردنظرتون رو با jmktime (اگه شمسی باشن) یا mktime (اگه میلادی باشن) محاسبه و به timestamp تبدیل کنید و BETWEEN رو روی اون مقادیر اجرا کنید. اگه با دقت توضیحاتی که گفتم رو بخونید، جایی برای پیچیدگی و ابهام وجود نداره.
پاسخ
تشکر شده توسط: پیام حیاتی
#5
ممنون از توضیحات خوبتون.
استاد بدین شکل ذخیره کردم :
<?php
//(isset($_POST["submit1"]) && !empty($_POST["fdate"]))    
if (isset($_POST["submit5"])) {
   //$created_date = date("Y-m-d H:i:s");
   $created_date=time();
   mysql_query('set names "utf8"');
   $qry = "INSERT INTO bingo(b_val) VALUES('$created_date')";
   $result = mysql_query($qry);
   echo "Inserrt record";
   echo '<br />';
   echo '<a href="index.php">Go back</a>';
}
else {  
   echo "Error in submit-1";
}
مقدار در بانک هم int قرار دادم ، نتیجه:
[عکس: joomlaforum.ir_14695886691.png]
الآن باید برای نمایش تاریخ فارسی این رکورد ذخیره شده ابتدا مقدار b_val رو بگیرم و در یک متغیر ذخیره کنم و بعد چه عملیاتی روی آن انجام بدم؟
پاسخ
تشکر شده توسط:
#6
باید با کمک تابع jdate برای شمسی یا date برای میلادی نمایش بدین. مثال:
echo date('l j F Y - H:i:s', $row['b_val']); // Gregorian format
echo jdate('l j F Y - H:i:s', $row['b_val']); // Jalali format
پاسخ
تشکر شده توسط: پیام حیاتی
#7
استاد مشکل این کدها چیه الآن؟
<?php
 
if (isset($_POST["submit6"])) {
$con=mysqli_connect("localhost","root","","taghvim");
// Check connection
if (mysqli_connect_errno())
 {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }

   
$timezone = 0;//برای 3:30 عدد 12600 و برای 4:30 عدد 16200 را تنظیم کنید
$now = date("Y-m-d", time()+$timezone);
$time = date("H:i:s", time()+$timezone);
list($year, $month, $day) = explode('-', $now);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
include ('jdf.php');
$jalali_date = jdate("زمان: H:i:s - تاریخ: Y/m/d",$timestamp);
//echo $jalali_date;
   
   
$sql="SELECT * FROM bingo";
$result=mysqli_query($con,$sql);

// Associative array
$row=mysqli_fetch_assoc($result);
echo date('l j F Y - H:i:s', $row['b_val']); // Gregorian format
   echo "<br />";
echo $jalali_date('l j F Y - H:i:s', $row['b_val']); // Jalali format    

// Free result set
mysqli_free_result($result);

mysqli_close($con);    
}

?>
پاسخ
تشکر شده توسط:
#8
اینجوری که نمیشه شما بگید خطای شما چیه؟
پاسخ
تشکر شده توسط:
#9
نقل قول:
Wednesday 27 July 2016 - 07:27:38

Fatal error: Call to undefined function زمان: ۱۳:۰۷:۳۷ - تاریخ: ۱۳۹۵/۰۵/۰۶() in C:xampphtdocsTaghvim-2process.php on line 159

لاین 159 :
echo $jalali_date('l j F Y - H:i:s', $row['b_val']); // Jalali format    
پاسخ
تشکر شده توسط:
#10
بجای $jalali_date از فانکشن jdate استفاده کنید.
پاسخ
تشکر شده توسط:
#11
echo $jalali_date; // Jalali format
پاسخ
تشکر شده توسط: پیام حیاتی
#12
در نهایت درست شد :
[عکس: joomlaforum.ir_14697076622.png]
کدها :
<?php
 
if (isset($_POST["submit6"])) {
$con=mysqli_connect("localhost","root","","taghvim");
// Check connection
if (mysqli_connect_errno())
 {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
   
$timezone = 0;//برای 3:30 عدد 12600 و برای 4:30 عدد 16200 را تنظیم کنید
$now = date("Y-m-d", time()+$timezone);
$time = date("H:i:s", time()+$timezone);
list($year, $month, $day) = explode('-', $now);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
include ('jdf.php');
$jalali_date = jdate("زمان: H:i:s - تاریخ: Y/m/d",$timestamp);
//echo $jalali_date;
   
   
$sql="SELECT * FROM bingo";
$result=mysqli_query($con,$sql);

// Associative array
$row=mysqli_fetch_assoc($result);
echo date('l j F Y - H:i:s', $row['b_val']); // Gregorian format
   echo "<br />";
//echo $jalali_date('l j F Y - H:i:s', $row['b_val']); // Jalali format    
echo $jalali_date;
// Free result set
mysqli_free_result($result);

mysqli_close($con);    
}

?>

الآن چطور می تونم بین دو تاریخ فارسی که کاربر وارد می کند بعد از دریافت  از between استفاده کنم؟
[عکس: joomlaforum.ir_14697076611.png]
پاسخ
تشکر شده توسط:
#13
باید تاریخها رو به Timestamp تبدیل کنید. فرض کنید تاریخها به همین شکل یعنی 12-05-1395 و... ثبت بشن. اینطوری باید کار کنید:
list($sy, $sm, $sd) = explode('-', '1395-05-12');
list($ey, $em, $ed) = explode('-', '1395-05-28');
$sts = jmktime(0, 0, 0, $sm, $sd, $sy); // Start Timestamp
$ets = jmktime(0, 0, 0, $em, $ed, $ey); // End Timestamp
$query = "SELECT * FROM `table` WHERE (`ts` BETWEEN {$sts} AND {$ets})");
پاسخ
تشکر شده توسط: پیام حیاتی
#14
کدها :
<?php
  
if (isset($_POST["submit8"])) {
mysql_connect('localhost','root','');
mysql_select_db('taghvim');
   
   
$date1=$_POST['fdate7'];    
$date2=$_POST['fdate8'];

list($sy, $sm, $sd) = explode('-', '$date1');    
list($ey, $em, $ed) = explode('-', '$date2');        
   
   
$sts = jmktime(0, 0, 0, $sm, $sd, $sy); // Start Timestamp    
$ets = jmktime(0, 0, 0, $em, $ed, $ey); // End Timestamp    

echo '
   <table class="table" style="font-size:12px">
       <tr>
         <th>ردیف</th>
         <th>تاریخ های جستجو شده</th>
       </tr>
       ';
       
   
       mysql_query('set names "utf8"');
       $query="SELECT * FROM bingo WHERE b_val BETWEEN $sts AND $ets";
       $records=mysql_query($query);

   
while($user=mysql_fetch_assoc($records))
      {
        echo "<tr>";
        echo "<td>".$user['b_id']."</td>";
        echo "<td>".$user['b_val']."</td>";
        echo "</tr>";
      }
       echo '</table>';
    
}

?>
     
خطا :
نقل قول:
Notice: Undefined offset: 2 in C:xampphtdocsTaghvim-2process.php on line 180

Notice: Undefined offset: 1 in C:xampphtdocsTaghvim-2process.php on line 180

Notice: Undefined offset: 2 in C:xampphtdocsTaghvim-2process.php on line 181

Notice: Undefined offset: 1 in C:xampphtdocsTaghvim-2process.php on line 181

Fatal error: Call to undefined function jmktime() in C:xampphtdocsTaghvim-2process.php on line 184
پاسخ
تشکر شده توسط:
#15
فرمت تاریخهاتون رو باید بگذارین. احتمالاً داخلشون تاریخ با - جدا نشده. اگه با / جدا کردین، بجای - توی خط 11 و 12 کدی که گذاشتین، از / استفاده کنید. ضمناً فایل jdf.php رو ضمیمه نکردین و تابع jmktime رو نمیشناسه.
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 5 مهمان