سلام عزیزان
مشکل این کوئری چیه :
$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 قرار دادم ، نتیجه:
الآن باید برای نمایش تاریخ فارسی این رکورد ذخیره شده ابتدا مقدار 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
در نهایت درست شد :
کدها :
<?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 استفاده کنم؟
باید تاریخها رو به 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 رو نمیشناسه.