उपयोगकर्ता अपनी तिथि 3 ड्रॉपडाउन (दिन, महीना, वर्ष) से चुनते हैं। मैं '2008-12-30' जैसी स्ट्रिंग बनाने के लिए उन्हें सर्वर-साइड पर जोड़ दूंगा। फिर मैं यह सुनिश्चित करने के लिए मान्य कैसे कर सकता हूं कि यह दिनांक सही प्रारूप/संख्यात्मक, आदि में था?PHP में एक MYSQL दिनांक को कैसे सत्यापित करें?
उत्तर
यदि वे 3 अलग-अलग ड्रॉप-डाउन हैं, तो आपको उन्हें तीन अलग-अलग मानों के रूप में सत्यापित करने की आवश्यकता होगी।
Ie,
- मान्य है कि वर्ष स्तंभ में संख्यात्मक और के बीच जो कुछ भी साल अपने अनुप्रयोग
- मान्य में मान्य हैं कि महीने के स्तंभ में संख्यात्मक
- मान्य है उस दिन स्तंभ संख्यात्मक है
- सत्यापित करें कि वे चेकडेट()
का उपयोग करके सभी वैध मान हैं या, आप उन्हें केवल अल एल पूर्णांक करने के लिए, उन्हें एक तारीख में एक साथ संयोजित करें, और देखें कि परिणामस्वरूप दिनांक मान्य है या नहीं। यानी,
$time = mktime(0, 0, 0, (int)$_POST['month'], (int)$_POST['day'], (int)$_POST['year']);
// in this example, valid values are between jan 1 2000 (server time) and now
// modify as required
if ($time < mktime(0, 0, 0, 1, 1, 2000) || $time > time())
return 'Invalid!';
$mysqltime = date('Y-m-d', $time);
// now insert $mysqltime into database
इस विधि के लिए नकारात्मक पक्ष यह है कि यह केवल यूनिक्स टाइमस्टैम्प रेंज यानी 1970 के भीतर दिनांकों 2038 या तो करने के लिए के साथ काम करेंगे है।
आप शायद यह जांचना चाहते हैं कि यह एक पूर्णांक है, न कि यह संख्यात्मक है। is_numeric फ्लोट्स के साथ-साथ पूर्णांक के लिए भी सही है, लेकिन is_int केवल पूर्णांक के लिए जांचता है। – gpojd
is_int() उपयोगकर्ता द्वारा सबमिट किए गए चर, यानी $ _POST में चर, पर काम नहीं कर सकता है, क्योंकि ये हमेशा प्रकार की स्ट्रिंग हैं। हालांकि, आप उन्हें (int) $ _ POST ['var'] का उपयोग करके पूर्णांक में डाल सकते हैं और फिर मूल स्ट्रिंग मान (== का उपयोग करके) की तुलना में इसकी तुलना कर सकते हैं। – thomasrutter
आप देख सकते हैं कि दिनांक checkdate का उपयोग कर वैध है। यदि आप यह सुनिश्चित करना चाहते हैं कि मान संख्यात्मक और सही लंबाई हैं, तो आप दिनांक बनाने से पहले
is_int
ctype_digit और strlen संयोजन के रूप में कुछ सरल कर सकते हैं।
// untested
if(!ctype_digit)($month) || strlen($month) != 2) {
// handle error
}
// repeat for $day and $year
if (checkdate($month, $day, $year) {
// do your work
}
मैंने thomasrutter की टिप्पणी के आधार पर is_int से ctype_digit से अपना जवाब बदल दिया है कि is_int POST चर को सही तरीके से संभाल नहीं पाएगा। – gpojd
यदि आपके पास तीन ड्रॉपडाउन हैं तो ड्रॉपडाउन से आने वाले मान हमेशा संख्याएं होनी चाहिए क्योंकि आप महीने से जुड़े मानों को नियंत्रित करते हैं (नीचे दिखाए गए)। इसके बाद यह निष्कर्ष निकाला जाएगा कि संयुक्त परिणाम वैध है।
<option value="01">January</option>
आप इस तरह के रूप में ड्रॉप-डाउन का में सहायता प्रविष्टियों प्रदान प्रदान करते हैं "एक महीने का चयन करें" तो आप उस मान 0 बनाने के लिए और यह सुनिश्चित करें कि मान प्रत्येक ड्रॉप बॉक्स से आने वाले शून्य से अधिक है सकते हैं।
संभावना है कि कोई अन्य मूल्य प्रदान करने के लिए HTML फॉर्म को बदल देगा। यदि यह एक चिंता है तो आप यह सुनिश्चित करने के लिए PHP फ़ंक्शन ctype_digit() का उपयोग कर सकते हैं कि प्रत्येक मान वास्तव में एक संख्यात्मक अंक है।
यदि आपकी चिंता यह है कि तिथि वास्तव में checkdate() फ़ंक्शन का उपयोग करने के लिए मान्य है।
फॉर्मों के उपयोग के बिना एक स्क्रिप्ट में पोस्ट करना संभव है। मैं एक बॉट लिख सकता हूं जो फ़ॉर्म के उपयोग के बिना प्रत्येक फ़ील्ड के लिए आपके फॉर्म में पोस्ट करता है और पोस्ट करता है। –
यह सच है यही कारण है कि ctype_digit() और checkdate() का उपयोग करने का सुझाव समझ में आता है। मैं इस बयान पर अपना जवाब दे रहा था कि आपके पास एक फॉर्म था। यहां तक कि यदि आप एक स्क्रिप्ट का उपयोग करते हैं, तो इस उदाहरण में कई मामले नहीं हैं जिसमें यह रूपों में मानों का उपयोग नहीं करेगा। – Paulo
बस एक ही समस्या थी। मैंने एक छोटा सा कार्य लिखा है जो यह जांचता है कि प्रारूप सही है या नहीं, और यदि तिथि असली है:
function valid_mysql_date($str){
$date_parts = explode('-',$str);
if (count($date_parts) != 3) return false;
if ((strlen($date_parts[0]) != 4) || (!is_numeric($date_parts[0]))) return false;
if ((strlen($date_parts[1]) != 2) || (!is_numeric($date_parts[1]))) return false;
if ((strlen($date_parts[2]) != 2) || (!is_numeric($date_parts[2]))) return false;
if (!checkdate($date_parts[1], $date_parts[2] , $date_parts[0])) return false;
return true;
}
उम्मीद है कि इससे मदद मिलती है।
चेकडेट(), दोस्त –
मजाकिया है, अब मैं समझने की कोशिश कर रहा हूं कि मेरे साथ क्या गलत है ... :) –
ठीक है अब मैं देख रहा हूं कि मेरा क्या मतलब है, cuz मैं आज भी एक ही समस्या में भाग गया। चेकडेट() तीन मानकों के लिए पूछें। इसलिए यदि आपको तारीख की एक स्ट्रिंग मिल गई है, तो यह आपकी मदद नहीं करता है। मेरे फ़ंक्शन को एक स्ट्रिंग और प्रारूप मिलते हैं और चेकडेट() –
मैं व्यक्तिगत रूप से पाया इस अगर दिनांक स्वरूप और वैध के अनुसार दोनों है निर्धारित करने के लिए होने के लिए सही और सुरुचिपूर्ण तरीका:
- व्यवहार करता है
20111-03-21
अमान्य के रूप में की तरह दिनांक -checkdate()
के विपरीत
- कोई संभावित PHP चेतावनियां (यदि कोई भी पैरामीटर प्रदान किया गया है, स्वाभाविक रूप से) - अधिकांश
explode()
समाधान - लीप लेता है
: रेगुलर एक्सप्रेशन-केवल समाधान/** * Tests if a string is a valid mysql date. * * @param string date to check * @return boolean */ function validateMysqlDate($date) { return preg_match('#^(?P<year>\d{2}|\d{4})([- /.])(?P<month>\d{1,2})\2(?P<day>\d{1,2})$#', $date, $matches) && checkdate($matches['month'],$matches['day'],$matches['year']); }
- पूरी तरह से mysql
DATE
स्वरूप के साथ संगत के विपरीत खाते में साल
यहाँ विधि आप उपयोग कर सकते हैं (10.03.21 2010-03-21 के समान है)
मैं इस समारोह का उपयोग कर रहा:
<?php
function validateMysqlDate($date){
if (preg_match("/^(\d{4})-(\d{2})-(\d{2}) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/", $date, $matches)) {
if (checkdate($matches[2], $matches[3], $matches[1])) {
return true;
}
}
return false;
}
// check it:
$a = validateMysqlDate('2012-12-09 09:04:00');
$b = validateMysqlDate('20122-12-09 09:04:00');
$c = validateMysqlDate('2012-12_09 09:04:00');
$d = validateMysqlDate('');
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
?>
$ एक सच है, दूसरों को झूठे हैं - और था टी सही है
रावेरेन (उपरोक्त) के फ़ंक्शन टाइमस्टैम्प के साथ मान्य तिथियां शामिल नहीं करेंगे !!! $ एक रिटर्न झूठी वहाँ! और बीटीडब्ल्यू: चेकडेट() $ b के लिए सच हो जाएगा हालांकि यह मान्य mysql डेटाटाइम
धन्यवाद, आपके फ़ंक्शन ने मेरी सहायता की :) –
यह * गलत * अवैध रूप से '10.03 को अमान्य कर देगा।21 00: 00: 00' और समय के बिना तारीख स्ट्रिंग को मान्य नहीं करेगा * - जिसे ओपी ने पूछा था। – raveren
- 1. MySQL वर्तमान दिनांक दिनांक को
- 2. मैं रेल में दिनांक कैसे सत्यापित करूं?
- 3. दो mysql प्रश्नों को PHP/MYSQL में कैसे निष्पादित करें?
- 4. 'दिनांक` प्रकार के बजाय' स्ट्रिंग` का उपयोग करते समय दिनांक को कैसे सत्यापित करें?
- 5. मौजूदा रिकॉर्ड php mySQL के साथ दिनांक दिनांक सेट करें। कैसे?
- 6. PHP/MySQL दिनांक '0000-00-00'
- 7. PHP - नियमित अभिव्यक्ति को स्वयं कैसे सत्यापित करें?
- 8. PHP का उपयोग कर फोन नंबर को कैसे सत्यापित करें?
- 9. MYSQL - दिनांक
- 10. mysql दिनांक दिनांक दिनांक_format
- 11. मार्कडाउन को कैसे सत्यापित करें?
- 12. JTextField को कैसे सत्यापित करें?
- 13. पासपोर्ट को कैसे सत्यापित करें?
- 14. mysql दिनांक
- 15. टाइमस्टैम्प को पठनीय दिनांक/समय में कनवर्ट करें PHP
- 16. MySQL में दिनांक से रिकॉर्ड कैसे फ़िल्टर करें?
- 17. PHP दिनांक दिनांक DTSTART
- 18. PHP- mySQL
- 19. MySQL दिनांक स्ट्रिंग
- 20. PHP कनवर्टिंग स्ट्रिंग दिनांक और समय MySQL डेटटाइम
- 21. गिट में कैसे करें, एक निर्दिष्ट दिनांक
- 22. {} PHP में एक MySQL क्वेरी को कैसे प्रभावित करता है?
- 23. एक स्ट्रिंग में एक JSON दिनांक को अधिक पठनीय दिनांक
- 24. MySQL/PHP
- 25. xslt में दिनांक को कैसे प्रारूपित करें?
- 26. एक छिपे हुए फ़ील्ड को सत्यापित करें
- 27. PHP, कुछ प्रारूप में वर्तमान दिनांक कैसे प्राप्त करें
- 28. PHP/MySQL साइट में समवर्ती उपयोगकर्ता लॉगिन को कैसे रोकें?
- 29. एक विश्वसनीय/सत्यापित प्रकाशक कैसे प्राप्त करें?
- 30. पीडीएफ फॉर्म को कैसे सत्यापित करें?
क्या आप इसे थोड़ा सा हल कर सकते हैं; यह पूरी तरह से स्पष्ट नहीं है कि आप क्या कर रहे हैं। क्या आप क्वेरी से आने वाली तारीख को सत्यापित करना चाहते हैं, या आप डेटाबेस में डालने से पहले व्यक्तिगत घटकों को सत्यापित करना चाहते हैं? – Rob
मैं तिथि के घटकों को गठबंधन करना चाहता हूं और डेटाबेस के विरुद्ध संयुक्त तिथि को मान्य करना चाहता हूं। –
यह क्यों कम किया गया था? –