• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نحوه ذخیره تاریخ در بانک اطلاعاتی و استفاده از آن
#1
دوستان سلام
امکان داره یه نمونه عینی از نحوه استفاده مجدد از تاریخ جلالی که در بانک اطلاعاتی ذخیره میشه رو اینجا منتشر کنید به عنوان مثال یه شبه کد که بتونم از روی اون روال کار رو مطالعه کنم
من در حال یادگیری هستم و الان روی تاریخ‌ها خیلی زیاد مشکل دارم! Sad
ببینید یه نمونه برای خودم تعریف کردم و دو تا مشکل دارم
نمونه:
برای هر تاریخی یه تعداد نام و مشخصات (من برای انتخاب تاریح جلالی از http://jdf.scr.ir استفاده می‌کنم) وارد دیتا بیس کنیم. یعنی روزی رو انتخاب می‌کنیم و بعد برای اون روی تعدادی نام و اطلاعات اضافه وارد می‌کنیم حالا برای تاریخ‌های مختلفی اطلاعاتی رو در بانک ذخیره کردیم
مسکلات:
۱- فیلد تاریح در یانک اطلاعاتی باید از چه نوعی باشه! string می‌گن خوب نیست و بعدن روی روند پزدازش اطلاعات بر اساس تاریخ مشکل ساز میشه! اگر درسته. شکل درست چیه؟
۲- فرض کنیم اطلاعاتی رو دریافت و در بانک دخیره کردیم حالا اگر بخوام برای یه همه‌ی افرادی که در یک تاریخ مشخص ثبت نام شده‌اند رو لیست کنم نمایش بدم این کار رو چظور باید انجام بدم میشه یه نمونه ساده‌ مثال بزنید؟
اگر این کار رو بکنید کلی کار بادگیری رو برام آسون کردید چون هیچ‌جا ندیدم و نخوندم که این مشکل رو به صورت عینی و کامل توضیخ داده باشند و همه توضیحات پراکنده‌اند
براتون آرزوی توفیق دارم
  پاسخ
تشکر شده توسط :
#2
سلام
برای فیلد تاریخ نوع timestamp رو در نظر بگیرید.
اگر از تاریخ شمسی استفاده میکنید ، هنگامی که تاریخ رو از کاربر گرفتید تبدیل به تاریخ میلادی میکنید سپس با تابع strtotime یا mktime به timestamp تبدیل کنید و در دیتابیس ذخیره کنید.
هنگامی که خواستین به کاربر نمایش بدین کارهای بالا رو برعکس انجام بدین.
اول به تاریخ میلادی تبدیل کنید ، سپس به تاریخ شمسی.
توی این حالت پردازش تاریخ مثل : جستجوی یک تاریخ خاص یا انتخاب بین دوتاریخ رو به راحتی میتونید انجام بدید.
موفق باشید
  پاسخ
تشکر شده توسط :
#3
از لطف و توجه شما ممنونم،
دقیقا مشکل من اینجا است که نمی‌دونم چظور باید تاریخ رو تبدیل کنم تا اونجا که من متوجه شدم برنامه‌ای که تو سایت http://jdf.scr.ir هست اجازه می‌ده کاربر تاریخی رو انتخاب کنه یعنی تاریخ یه صورت یه رشته در فبلد قرار می گیره نه اینکه کاربر بخواد اون رو تایپ کنه خوب این مقدار رو می تونم در دیتا بیس دحیره کنم تا الان به صورت varchar دخیره می کردم که ارزش تاریخی نداشت!
امکانش وجود داره به صورت یه مثال نحوه کار با تابع strtotime یا mktime برای تبدیل تاریخ به timestamp رو نشون بدید و همینطور نحوه‌ی نمایش در زمان تهیه یک لیست از دیتابیس؟ من با همین تبدیل مشکل دارم دوست گرامی اگر هم مستندی در جایی جود داره که خوب توضیج داده ممنون می‌شم راهنمایی کنید
  پاسخ
تشکر شده توسط :
#4
برای توابع که گفتین :
strtotime()
mktime()

برای تابع تبدیل به شمسی هم که تو این سایتی که خودت دادی آموزش داره : لینک آموزش
غایب
  پاسخ
تشکر شده توسط : bahar.bahari
#5
سلام
توي همون سايتي كه گفتين از لينك زير سورس php رو دانلود كنيد كه مجموعه توابع مربوط به تبديل تاريخ هاست.
http://jdf.scr.ir/source/

حالا وقتي تاريخ رو از كاربر ميگيري مثلا اينجوريه :
کد:
1392/05/24

حالا با تابع jalali_to_gregorian كه در لينك بالا قرار داره اين تاريخ رو به ميلادي تبديل ميكنيم :

کد پی‌اچ‌پی:
$hejri "1392/05/27";
list(
$y $m $d ) = explode('/' $hejri);
$date jalali_to_gregorian($y $m $d);
$timestamp strtotime($date); 

خب حالا timestamp رو داري ، توي ديتابيس ذخيره كن.
براي تبديلش به هجري هم ميتوني از gregorian_to_jalali استفاده كني.
  پاسخ
تشکر شده توسط : bahar.bahari ahora
#6
Mr.Moqadam و Alaa عزیز، از هر دوی شما بزرگواران ممنونم تلاشم رو می‌کنم و امیدوارم موفق باشم Smile
  پاسخ
تشکر شده توسط : Alaa
#7
من یه فرم نمونه با چهار فیلد درست کردم، برای دریافت و دخیره اطلاعات. به ترتیب نام ، نام خانوادگی ، شماره و تاریخ تولد
کد فرم:
کد پی‌اچ‌پی:
<!DOCTYPE html>
<
html>
<
head>
<
title>فرم ثبت نام</title>
<
meta http-equiv="Content-Type" content="text/html" charset=utf-8">
<link rel="
stylesheet" href="js-persian-cal.css">
<script src="
js-persian-cal.min.js"></script>

</head>
<body dir="
rtl">

    <div id="
container"> <h1>ثبت‌نام</h1>
        <?php
            mysql_connect('localhost', 'root', 'dbpass');
            mysql_select_db('regist');
            
        if(isset(
$_POST['submit'])){
                  if(mysql_query("
INSERT INTO `info` (`no`, `name`, `family`, `pdate`)  
                  
VALUES (" . intval($_POST['no']) . "'" . mysql_escape_string($_POST['name']) . "''" . mysql_escape_string($_POST['family']) . "''" . mysql_escape_string($_POST['pdate']) . "')")){
                    echo "
با موفقیت افزوده شد.";
                }else{
                    echo "
خطا در ثبت‌نام!";
                }
                echo "
<br /><br />";
            }
        ?>
        <form method="
post" action="add.php">
          <div class="
label">نام:</div><div class="input"><input type="text" name="name" /></div>
          <div class="
label">نام خانوادگی:</div><div class="input"><input type="text" name="family" /></div>
                  <div class="
label">شماره:</div><div class="input"><input type="text" name="no" /></div>
                  <div class="
label">تاریخ تولد</div>
                  <input type="
text" id="pcal1" class="pdate">
        <div class="
label">&nbsp;</div><div class="input"><input type="submit" name="submit" value="ثبت " /></div>
        </form>
        <div style="
clear:both;"></div><br /><br />
    </div>
<script>
    var objCal1 = new AMIB.persianCalendar( 'pcal1' );
</script>    
</body>
</html> 
از جاوا اسکریپتی که امیر مسعود در سایت http://amib.ir/weblog/?page_id=316 برای استفاده‌ی عموم قرار داده و برای انتخاب تاریح توسط کاربر در فبلد آخر استفاده کردم
کد فایل sql را هم در پایین می‌آورم:
اطلاعات در یانک ذخیره میشه اما از اونجایی که من کار خاصی برای تبدیل تاریخ و بعد دخیره‌ی اون انجام ندادم فکر می‌کنم اشتباه است و نمی‌دونم که در زمان تعریف فیلد timestamp چه گزینه‌هایی را باید ست می‌کردم براش . حالا بعد از ذخیره‌ تاریخ در دیتابیس فقط مجموعه ای از چند مربع دارم
توی خود سایت Amib نوشته بود که آخر فایل این اسکریپت:
کد:
<script>
    var objCal1 = new AMIB.persianCalendar( 'pcal1' );
</script>
را اضافه کنیم. یعنی مشکل از این کده!

این هم SQL
کد:
-- phpMyAdmin SQL Dump
-- version 3.4.11.1deb2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Mar 02, 2014 at 07:08 AM
-- Server version: 5.5.31
-- PHP Version: 5.4.4-14+deb7u5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `regist`
--

-- --------------------------------------------------------

--
-- Table structure for table `info`
--

CREATE TABLE IF NOT EXISTS `info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `no` int(11) NOT NULL,
  `name` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  `family` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  `pdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=2 ;

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
خودم هم می‌دونم که تازه رسیدم به اول خط اما راستش تنها راهی که به نظرم رسید بتونم خودم را پیش ببرم این بود که تا جایی که می‌تونم ادامه بدم و از شما اساتید گرامی دوباره کمک بگیرم
می خوام این تاریخی رو که با کد جاوا اسکریپت کاربر انتخاب می‌کنه را درست در دیتابیس ذخبره کنم و بعد بتونم اگر یه فایل لیست ایجاد کردم از این بانک بتونم ثبت نامی‌های یک ماهی رو که باز کاربر انتخاب می‌کنه نمایش بدم Sad
چی کار کنم! من فقط دوست دارم یاد بگیرم همین Huh


فایل‌های پیوست تصاویر بندانگشتی
       
  پاسخ
تشکر شده توسط :
#8
از اساتید گرامی کسی نمی خواد راهنمایی کنه Sad
  پاسخ
تشکر شده توسط :
#9
دوستان از دریافت کمک بیشتر منصرف بشم؟ زمان زیادی منتظر موندم و چون پاسخی نگرفتم مجدد اونو بالا آوردم. امیدوارم اینبار نا امید نشم Sad
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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