تالار گفتمان nCIS.ir

نسخه‌ی کامل: مشکل در کوئری LIKE و Between (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
صفحات: 1 2
سلام عزیزان
مشکل این کوئری چیه :
$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";
}


تشکر.
شما این مدلی نمیتونید توی تاریخ جستجو کنید. باید با 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}";
برای من خیلی پیچیده شد.
الآن این کدهای 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 رو با اینها ذخیره کنم؟!!
خوب این روش ذخیره‌کردن از اساس اشتباهه. شما نباید تاریخ رو مستقیماً ذخیره کنید چون نمیتونه BETWEEN بگیره. یعنی نمیتونه تاریخهای بین رو محاسبه کنه چون BETWEEN بین اعداد و کلاً فرمتهای قابل‌شمارش بکار میره. برای ذخیره‌کردن تاریخ اگه فیلدتون DATETIME باشه هم باید با فرمتی که خود MySQL ذخیره میکنه کار کنید نه Y/m/d خالی. نوع فیلد رو int بگذارین و موقع ذخیره‌کردن برای تاریخ فقط خروجی تابع time رو بکار ببرین. تاریخ شمسی رو هم اصلاً فکرشم نکنید که بخواین مستقیماً توی دیتابیس ذخیره کنید و بعد با BETWEEN کار کنید چون اصلاً نمیشناسه چه برسه به اینکه BETWEEN رو هم بخواد محاسبه کنه. همونطور که گفتم، بجای ذخیره تاریخ با دو فرمت شمسی و میلادی، کافیه Timestamp جاری (خروجی تابع time() توی PHP) رو ذخیره کنید و نوع فیلد رو هم int بگذارین. بعد موقع جستجو تاریخهای موردنظرتون رو با jmktime (اگه شمسی باشن) یا mktime (اگه میلادی باشن) محاسبه و به timestamp تبدیل کنید و BETWEEN رو روی اون مقادیر اجرا کنید. اگه با دقت توضیحاتی که گفتم رو بخونید، جایی برای پیچیدگی و ابهام وجود نداره.
ممنون از توضیحات خوبتون.
استاد بدین شکل ذخیره کردم :
<?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 رو بگیرم و در یک متغیر ذخیره کنم و بعد چه عملیاتی روی آن انجام بدم؟
باید با کمک تابع 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
استاد مشکل این کدها چیه الآن؟
<?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);    
}

?>
اینجوری که نمیشه شما بگید خطای شما چیه؟
نقل قول:
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    
بجای $jalali_date از فانکشن jdate استفاده کنید.
echo $jalali_date; // Jalali format
در نهایت درست شد :
[عکس: 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]
باید تاریخها رو به 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})");
کدها :
<?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
فرمت تاریخهاتون رو باید بگذارین. احتمالاً داخلشون تاریخ با - جدا نشده. اگه با / جدا کردین، بجای - توی خط 11 و 12 کدی که گذاشتین، از / استفاده کنید. ضمناً فایل jdf.php رو ضمیمه نکردین و تابع jmktime رو نمیشناسه.
صفحات: 1 2