ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 3 پست
سلام عزیزان
مشکل این کوئری چیه :
$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";
}
تشکر.
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
شما این مدلی نمیتونید توی تاریخ جستجو کنید. باید با 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}";
ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 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 رو با اینها ذخیره کنم؟!!
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
خوب این روش ذخیرهکردن از اساس اشتباهه. شما نباید تاریخ رو مستقیماً ذخیره کنید چون نمیتونه BETWEEN بگیره. یعنی نمیتونه تاریخهای بین رو محاسبه کنه چون BETWEEN بین اعداد و کلاً فرمتهای قابلشمارش بکار میره. برای ذخیرهکردن تاریخ اگه فیلدتون DATETIME باشه هم باید با فرمتی که خود MySQL ذخیره میکنه کار کنید نه Y/m/d خالی. نوع فیلد رو int بگذارین و موقع ذخیرهکردن برای تاریخ فقط خروجی تابع time رو بکار ببرین. تاریخ شمسی رو هم اصلاً فکرشم نکنید که بخواین مستقیماً توی دیتابیس ذخیره کنید و بعد با BETWEEN کار کنید چون اصلاً نمیشناسه چه برسه به اینکه BETWEEN رو هم بخواد محاسبه کنه. همونطور که گفتم، بجای ذخیره تاریخ با دو فرمت شمسی و میلادی، کافیه Timestamp جاری (خروجی تابع time() توی PHP) رو ذخیره کنید و نوع فیلد رو هم int بگذارین. بعد موقع جستجو تاریخهای موردنظرتون رو با jmktime (اگه شمسی باشن) یا mktime (اگه میلادی باشن) محاسبه و به timestamp تبدیل کنید و BETWEEN رو روی اون مقادیر اجرا کنید. اگه با دقت توضیحاتی که گفتم رو بخونید، جایی برای پیچیدگی و ابهام وجود نداره.
ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 3 پست
ممنون از توضیحات خوبتون.
استاد بدین شکل ذخیره کردم :
<?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 رو بگیرم و در یک متغیر ذخیره کنم و بعد چه عملیاتی روی آن انجام بدم؟
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
باید با کمک تابع 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
ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 3 پست
استاد مشکل این کدها چیه الآن؟
<?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);
}
?>
ارسالها: 122
موضوعها: 28
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 69
36 بار تشکر شده در 26 پست
اینجوری که نمیشه شما بگید خطای شما چیه؟
ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 3 پست
نقل قول: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
06-05-1395، 11:02 ب.ظ
(آخرین تغییر در ارسال: 06-05-1395، 11:06 ب.ظ توسط hamid.)
ارسالها: 122
موضوعها: 28
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 69
36 بار تشکر شده در 26 پست
بجای $jalali_date از فانکشن jdate استفاده کنید.
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
echo $jalali_date; // Jalali format
ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 3 پست
در نهایت درست شد :
کدها :
<?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 استفاده کنم؟
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
باید تاریخها رو به 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})");
ارسالها: 89
موضوعها: 42
تاریخ عضویت: اسفند 1394
اعتبار:
2
تشکرها: 47
5 بار تشکر شده در 3 پست
کدها :
<?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
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
فرمت تاریخهاتون رو باید بگذارین. احتمالاً داخلشون تاریخ با - جدا نشده. اگه با / جدا کردین، بجای - توی خط 11 و 12 کدی که گذاشتین، از / استفاده کنید. ضمناً فایل jdf.php رو ضمیمه نکردین و تابع jmktime رو نمیشناسه.
|