2011-09-19 16 views
12

मैं एक फॉर्म बना रहा हूं और बस चीजों को करने के लिए और अधिक कुशल तरीकों की तलाश में हूं। मेरे पास अब तक है:जारी करने के लिए PHP शॉर्टंड POST मूल्य

<p><input type="text" name="transmission" value="" /></p> 
<p><input type="text" name="model" value="<?=$model;?>" /></p> 

तो उनमें से कुछ के पास पहले से ही एक मान होगा, और कुछ खाली हो जाएंगे। मैं क्या करना चाहता हूं यह देखने के लिए कि फॉर्म सेट किया गया है या नहीं, और यदि उसने $ _POST ['name'] का उपयोग मूल्य के रूप में किया है, तो नहीं तो फिर रिक्त का उपयोग करें या मेरे पिछले चर का उपयोग करें।

<p><input type="text" name="name" value="<?php if isset($_POST['submit'])) { echo $_POST['name']; } else { echo ""; } ?>" /></p> 

लेकिन ऐसा करने के लिए एक छोटा रास्ता होना चाहिए।

यदि कोई मुझे दिशा में इंगित कर सकता है तो मैं वास्तव में इसकी सराहना करता हूं।

धन्यवाद!

+3

छोटा! = बेहतर –

+0

'खाली ($ _ POST ['foo']) से बेहतर कुछ भी नहीं है? '': $ _POST ['foo'] '- लेकिन आप इसे सुविधा के लिए एक फ़ंक्शन में डाल सकते हैं (जिसमें '' '' और अन्य किसी भी नब्बे के अलावा डिफ़ॉल्ट मान निर्दिष्ट करना शामिल है)। – Jon

उत्तर

17

आप उदाहरण के लिए, HTML आउटपुट से पहले अपनी स्क्रिप्ट की शुरुआत में वैरिएबल निर्धारित कर सकते हैं:

$name = isset($_POST['submit']) ? $_POST['name'] : null; 
अपने html खंड में

आप चिंता यह

<p><input type="text" name="name" value="<?php echo $name ?>" /></p> 
परिभाषित नहीं किया गया था के बिना $ नाम मुद्रित कर सकते हैं

यदि $ _POST ['submit'] में कोई भी मान नहीं है तो आपको FALSE कथन प्राप्त होने की अधिक संभावना है। ऐसे मुद्दों से बचने के लिए array_key_exists

+0

अच्छा जवाब है लेकिन कुछ मानकों और स्वचालन की कमी है। –

+0

मैं आपके साथ सहमत हूं, अपने फॉर्म जनरेटर का निर्माण करना यह एक रास्ता है कि प्रत्येक डेवलपर के माध्यम से आना चाहिए, जो अपने स्वयं के पहिये का आविष्कार नहीं करना चाहते हैं, मैं ज़ेंड फ्रेमवर्क शस्त्रागार से कुछ उपयोग करने की सलाह दूंगा। – Nazariy

+1

लेकिन वह छोटा खुला टैग बहिष्कार बकवास। सामान्य रूप से उत्तर के लिए –

0

आप इस कोशिश कर सकते ...

$_POST['submit'] ? echo $_POST['name'] : echo ''; 

मैं एक बूलियन isset समारोह के बजाय तुलना उपयोग कर रहा हूँ (तालिका के लिए लिंक देखें)

http://www.php.net/manual/en/types.comparisons.php

या एक अन्य विकल्प है ...

echo ($_POST['submit'] ? $_POST['name'] : ''); 
+0

यदि फॉर्म अभी तक सबमिट नहीं किया गया है, तो यह एक नोटिस फेंक देगा। – animuson

1

का उपयोग न करने के कारणों के बिनाअपने रूपों को ढूढ़ने के लिए, else को हटाने के अलावा बहुत कुछ नहीं किया जा सकता है।

<p><input type="text" name="name" value="<?php if isset($_POST['name'])) echo $_POST['name']; ?>" /></p> 
5

नाज़ारी की तरह, आपको जितना संभव हो सके टेम्पलेट में जितना संभव हो उतना PHP से बचना चाहिए।
वास्तव में, आपके पास पहले से ही आपके टेम्पलेट में पहले से ही तैयार चर होना चाहिए।

तो, अपने कोड में इस

$FORM = array(); 
$form_fields = array('name','sex'); 
foreach($form_fields as $fname) { 
    if (isset($_POST[$fname])) { 
    $FORM[$fname] = htmlspecialchars($_POST[$fname]); 
    } else { 
    $FORM[$fname] =''; 
    } 
} 

की तरह कुछ है और फिर आप चिकनी और साफ टेम्पलेट है:

<p><input type="text" name="name" value="<?=$FORM['name']?>" /></p> 
+1

+1 और 'htmlspecialchars()' का उपयोग करके भी। –

+0

इसमें क्या बात है? मेरे लिए लंबा लगता है। आप वर्णमाला भी निर्दिष्ट नहीं करते हैं, इसलिए एक्सएसएस के खिलाफ सुरक्षा कारण नहीं हो सकता है। – Louis

0
<?= isset($_POST['submit'])? $_POST['name'] : ""; ?> 

से अलग, कम से कम आप इसे मिल जाएगा है <?= $_POST['name']; ?> कहें (यदि जमा सेट नहीं है तो नाम खाली होना चाहिए) - आपको शायद चेतावनियां बंद करने की आवश्यकता है।

यह कहा जा रहा है कि यह बहुत खराब अभ्यास है और आपको cross site scripting (XSS) तक खुलता है। आपको ऐसा करना चाहिए।इंट्रानेट पर भी, यदि किसी हमलावर के पास कभी भी ऐसे कंप्यूटर का मालिक होता है जिस पर इसका उपयोग होता है तो वे XSS का उपयोग उपयोगकर्ता द्वारा किए जा सकने वाले कार्यों को करने के लिए कर सकते हैं।

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

<p><input type="text" name="name" value="{name}" /></p> 
+0

मैंने एचटीएमएल शोधक की जांच की लेकिन यह अभी तक एचटीएमएल 5 डॉक्टरेट का समर्थन नहीं करता है :( – Drew

+0

मैं उस समय के लिए श्वेतसूची दृष्टिकोण लेगा। अगर आप कोई नाम ले रहे हैं, तो वास्तव में केवल कुछ पात्रों को कुछ और प्रस्तुत करना चाहिए पूरी तरह से त्याग दिया जाना चाहिए। एजे, एजेड, -, और '99.99% मामलों में एक नाम की आवश्यकता होनी चाहिए। – Louis

0

मैंने इसे वर्डप्रेस कोडिंग मानक से देखा है। हालांकि वे पठनीयता के लिए प्रोत्साहित नहीं ..

isset($var) || $var = some_function(); 

संदर्भ here

1

आशुलिपि <?=$_POST['name'] ?: ''?>

+0

यह अभी भी एक नोटिस फेंक देगा, क्योंकि यह' जारीकर्ता 'जैसा नहीं है। यह जांचता है कि '$ _POST ['name'] 'खाली है या नहीं, लेकिन यदि कुंजी नहीं है, तो यह नोटिस फेंक देगा। –

+0

यदि आप 'त्रुटि_ रिपोर्टिंग (E_ALL और ~ E_NOTICE) सेट नहीं करते हैं, अन्यथा, जैसा कि आप कहते हैं, आपको मिलेगा कुछ '[8] अपरिभाषित चर: नाम' जैसी कुछ। लेकिन मैं हमेशा सभी त्रुटियों की रिपोर्ट करता हूं और तदनुसार उनके साथ सौदा करता हूं :) – Christian

+1

गली के नीचे अपनी सूचनाओं को छिपाने के लिए 'error_reporting' सेट करना * समाधान * कभी नहीं है। एक कहने की तरह यह है: "हमेशा कोड करें कि वह व्यक्ति जो आपके बाद कोड करेगा वह एक धारावाहिक हत्यारा है जो जानता है कि आप कहां रहते हैं"। अर्थात। त्रुटियों को छिपाएं, बस उन्हें रोकें। –

0

उपयोग php error control ऑपरेटर: @।

<?php 

    $posted_text = @$_POST['posted_text']; 
    echo $posted_text 

?> 

यदि POST चर सेट किया गया है, तो यह echo-ed out होगा। यदि नहीं, तो कुछ भी दिखाई नहीं देगा।

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

  • कोई संबंधित समस्या नहीं^_^