2010-02-19 11 views
5

मैं यह सुनिश्चित करने के लिए एक फॉर्म को सत्यापित करना चाहता हूं कि उपयोगकर्ता किसी नाम और अंतिम नाम में लिखता है।सबमिट होने के बाद मैं टेक्स्ट इनपुट में मूल्य कैसे रख सकता हूं?

यदि कोई उपयोगकर्ता केवल अपने अंतिम नाम में लिखता है, तो फॉर्म को अंतिम नाम फ़ील्ड के बगल में एक त्रुटि संदेश के साथ फिर से दिखाना चाहिए, लेकिन नाम मान अभी भी होना चाहिए।

मुझे नहीं पता कि यह कैसे करना है, हे। मैं सिर्फ एक नौसिखिया PHP प्रोग्रामर हूँ।

<html> 
<head> 
</head> 

<body> 
    <form action="formprueba.php" method="get"> 
     <dl> 
      <dt>Last Name:</dt> 
      <dd><input type="text" value="" name="name" /> 
       <?php if((isset($_GET['name'])) && ($_GET['name'] == "")){ 
        echo "Please write a correct name."; 
       } 
       ?> 
      </dd>     

      <dt>Last Name:</dt> 
      <dd><input type="text" value="" name="lastname" /> 
       <?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){ 
        echo "Please write a correct last name."; 
       } 
       ?> 
      </dd> 

      <br />     
      <dt> 
       <input type="submit" value="enviar" /> 
      </dt> 
      <input type="hidden" name="enviado" value="j"/> 
     </dl> 
    </form> 
</body> 

इसके अलावा, मुझे यकीन है कि इस मान्यता भयानक है, अगर आप कुछ मिनटों के लिए है, मैं वास्तव में अगर किसी को यह कर सकते हैं स्नातक होगी हूँ:

यहाँ मैं अब तक राशि है मुझे सत्यापित करने के लिए एक और अधिक प्रभावी तरीका दिखाएं (तीसरे पक्ष के एडॉन्स का उपयोग किए बिना)।

धन्यवाद SO।

उत्तर

14

प्लेस चर आप "मूल्य" इस तरह अपने इनपुट-टैग के क्षेत्र में की जरूरत है:

<input type="text" value="<?php echo htmlspecialchars($_GET['lastname']); ?>" name="lastname" /> 

और यह कम से उद्धृत करने के लिए महत्वपूर्ण है कम से कम एचटीएमएल वर्ण जो किसी को डाल सकते हैं (htmlspecialchars द्वारा)।

+5

$ _GET सेट नहीं होने पर अपरिभाषित इंडेक्स नोटिस को संभालने के लिए, मैं आमतौर पर स्क्रिप्ट्स $ lastname = isset ($ _ GET ['lastname']) $ $ के शीर्ष पर यह कहीं करता हूं? $ _GET [ 'उपनाम']: ''; – vsr

0

आप क्लाइंट साइड जावास्क्रिप्ट का उपयोग कर सकते हैं - आप इस तरह से सर्वर पर एक यात्रा सहेजते हैं।

हालांकि नकारात्मकता: आप वास्तव में केवल मूल जांच कर सकते हैं क्योंकि उपयोगकर्ता को भरोसा नहीं किया जा सकता है (निश्चित रूप से सुरक्षा उपायों के लिए)। सर्वर पर महंगी यात्रा करने से पहले आप अमान्य पैटर्न को कम से कम "ध्वजांकित" कर सकते हैं।

+0

मैं अभी एकमात्र समाधान एक PHP की जरूरत है। : पी मैं उस छोटे से होमवर्क में हाथ रखता हूं। क्या बस वर्णन कर सकता है कि मुझे क्या करना है? मैं जरूरी नहीं कि सभी कोड सिर्फ मुझे सौंपे। –

+0

क्लाइंट साइड जेएस सर्वर की यात्रा सहेज लेगा, लेकिन इसे उपयोगकर्ता पर भरोसा करने की आवश्यकता है। यह केवल "उपयोगकर्ता के लिए अच्छा" हो सकता है और वास्तविक जांच के लिए कभी भी विकल्प नहीं हो सकता है। – Quentin

2

यदि कोई उपयोगकर्ता केवल अपने अंतिम नाम में लिखते हैं, तो प्रपत्र फिर साथ अंतिम नाम फ़ील्ड के बगल में एक त्रुटि संदेश दिखाना चाहिए, लेकिन नाम मूल्य अभी भी वहाँ हो चाहिए।

बस भी सुरक्षा कारणों से htmlspecialchars फ़ंक्शन का उपयोग $_GET से उनके मूल्य (आप उपयोग कर रहे प्रपत्र विधि)

<input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" /> 

और इतने पर ....

आप चाहिए मिलता है। यदि आप जावास्क्रिप्ट पर भरोसा कर सकते

More Information Here.

+1

** ** ** नहीं होना चाहिए। सिस्टम से बाहर जाने से पहले डेटा को स्वच्छ करने में विफल होने से एक्सएसएस हमलों तक साइट खुल जाएगी। – Quentin

+0

@ डेविड: आप सही हैं :) – Sarfraz

-2

मुझे लगता है, जावास्क्रिप्ट सबसे अच्छा जवाब है। लेकिन क्लाइंट साइड स्क्रिप्ट अधिक से अधिक सवार हो सकता है। तो बाद में सर्वर पर अपने इनपुट को मान्य करें। एक त्रुटि संदेश प्रदर्शित करने और उपयोगकर्ता बैक बटन दबाने के आग्रह (या कर ही जावास्क्रिप्ट का उपयोग) इनपुट फ़ील्ड में मान सामान्य रूप में नहीं की रक्षा करता है:

0

सिर्फ एक छोटा सा नोट मैं मुश्किल तरीके से सीखने के लिए किया था।

ऐसा लगता है कि यह पूरी तरह ब्राउज़र-विशिष्ट है, उदा। मेरे लिए यह सफारी पर काम किया, लेकिन Firefox पर नहीं ...

0

सर्वर पक्ष पर सत्यापन करने के लिए यह अच्छा है। आपका दृष्टिकोण सही लगता है। आप केवल एक ध्वज बनाए रख सकते हैं जो आपको पृष्ठ के मौसम के अंत में बताएगा या सत्यापन सफल नहीं हुआ था।

उदाहरण

$ झंडा = संरचना;

<?php if((isset($_GET['lastname'])) && ($_GET['lastname'] == "")){ 
     echo "Please write a correct last name."; 
     $flag="false"; 
} 
?> 

तो पेज अगर के नीचे ($ झंडा == सच) गूंज "फ़ॉर्म सबमिट" पर;

व्यक्ति का मान एक के हठ के बारे में सही ढंग से अपने इनपुट टैग के लिए मूल्य जोड़ने

value="<?php echo $_GET['lastname'];?>" 

आशा इस मदद करता है का उल्लेख किया है।

1

आप

<input type="text" value="" name="lastname" value="<?php echo $_GET['lastname'];?>" /> 

की तरह कुछ कर रहे हैं कभी जाँच/मूल्य आप जैसे का उपयोग करके प्रदर्शन से बचने के लिए भूल जाते हैं कभी नहीं कभी नहीं htmlentities()। अन्यथा आप पूरी तरह से छोटे जावास्क्रिप्ट इंजेक्शन हमलों के लिए खुले हैं!

-1

अपने प्रपत्र को यह जोड़े जहां पहले यह घोषणा:

<form onsubmit="event.preventDefault(); validateMyForm();"> 
+0

OP "इसे बनाने के लिए" क्यों होना चाहिए? एक ** अच्छा उत्तर ** हमेशा क्या किया गया था इसका एक स्पष्टीकरण होगा और यह ओपी के लिए क्यों नहीं बल्कि भविष्य के आगंतुकों के लिए ऐसा किया गया था। –

संबंधित मुद्दे