2012-04-16 7 views
9

CakePHP 1.3 में आप कई के साथ एक फ़ॉर्म बना सकते प्रस्तुत बटन क्लिक किया गया है:CakePHP 2.0 तय करें कि कौन सबमिट बटन

echo $this->Form->submit('Submit 1', array('name'=>'submit'); 
echo $this->Form->submit('Submit 2', array('name'=>'submit'); 

और पता लगाने के जो सबमिट बटन के साथ नियंत्रक में दबाया गया था:

if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Submit 1") { 
    // first button clicked 
} 

केकपीएचपी में, $ यह-> पैराम्स ['फॉर्म'] सेट नहीं है और क्लिक किए गए बटन मान $-> अनुरोध, $ this-> अनुरोध-> डेटा, $ this-> पैराम्स में कहीं भी दिखाई नहीं देता है , $ यह-> डेटा या $ _POST

मैं कैसे निर्धारित करूं कि केकपीएचपी 2.0 में कौन सा बटन क्लिक किया गया है?

अग्रिम धन्यवाद।

संपादित करें:

<?php echo $this->Form->create('History', array('action'=>'add')); ?> 
<div class='submit'> 
<?php 
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit')); 
?> 
</div> 
<?php echo $this->Form->end()?> 

और फार्म के उत्पादन:

<form action="/projects/kings_recruit/trunk/www/histories/add" id="HistoryAddForm" method="post" accept-charset="utf-8"> 
    <div style="display:none;"> 
    <input name="_method" value="POST" type="hidden"> 
    </div> 
    <div class="submit"> 
    <input name="submit" value="Yes" type="submit"> 
    <input name="submit" value="No" type="submit"> 
    </div> 
</form> 
+0

आपको आउटपुट एचटीएमएल भी पोस्ट करना चाहिए - सबमिट बटन आपके दृश्य में कैसा दिखता है! भी: क्या आपके पास अपने फॉर्म के चारों ओर

टैग है? – mark

उत्तर

0

2,0 में कोई $this->params['form'] अब सभी

के रूप में अनुरोध किया है, यहां फार्म के लिए कोड है फार्म सहायक पोस्ट फ़ील्ड $this->data में समाप्त होते हैं (जो वैसे भी अधिक समझ में आता है)

,210

तो

if (!empty($this->data['submit']) && $this->data['submit'] == "Submit 1") {} 

ध्यान दें कि! खाली() बेहतर यहाँ भी है।

पुनश्च: आप इसे अपने कोड में बदलने के लिए मेरी बढ़ाया उन्नयन खोल का उपयोग कर सकते हैं: https://github.com/dereuromark/upgrade

अपने आदेश

cake Upgrade.Upgrade request 

(https://github.com/dereuromark/upgrade/blob/ मास्टर/कंसोल/कमांड/UpgradeShell.php # L833)

+0

मुझे इस में $ 1 सबमिट नहीं किया गया है-> डेटा या तो :-( इसके अलावा, मैं एक 1.3 प्रोजेक्ट को अपग्रेड नहीं कर रहा हूं, यह एक नया 2.0 प्रोजेक्ट है। – RichardAtHome

+0

इसे $ _POST में भी नहीं देख रहा है इस – RichardAtHome

0
if (!empty($this->request->data['submit']) && $this->request->data['submit'] == "Yes") { 
// do your stuff 
} 
+0

को प्रतिबिंबित करने के लिए मेरे प्रश्न को अपडेट किया है जैसा कि मैंने पिछले उत्तर में उल्लेख किया है (और इसे प्रतिबिंबित करने के लिए प्रश्न अपडेट किया गया है), मुझे $ में 'सबमिट' नहीं दिख रहा है-> डेटा – RichardAtHome

+0

@ रिचर्डएटहोम '$ यह-> डेटा नहीं ', यह' $-- अनुरोध-> डेटा' है। कृपया '$ this-> अनुरोध-> डेटा' – thecodeparadox

+0

के साथ कोड को दोबारा जांचें, इसे $-- request-> डेटा में भी नहीं देखें (क्षमा करें मैंने सोचा यह मेरे बिंदु के साथ यह इंगित किया गया था कि यह $-> अनुरोध नहीं देख रहा है) – RichardAtHome

7

दोनों बटन प्रस्तुत के लिए एक ही नाम का उपयोग न करें। इस उदाहरण पर विचार:

<?php echo $this->Form->create(false); ?> 
<?php echo $this->Form->text('input'); ?> 
<?php echo $this->Form->submit('Yes', array('name' => 'submit1')); ?> 
<?php echo $this->Form->submit('No', array('name' => 'submit2')); ?> 
<?php echo $this->Form->end(); ?> 

डिबग ($ this-> अनुरोध> डेटा) के बाद का उत्पादन करेगा जब "हाँ" बटन क्लिक किया जाता है:

array(
    'submit1' => 'Yes', 
    'input' => 'test' 
) 

और यहाँ यह है जब "नहीं "बटन क्लिक किया जाता है:

array(
    'submit2' => 'No', 
    'input' => 'test' 
) 

जाँच करने के लिए जो बटन क्लिक किया गया था:

if (isset($this->request->data['submit1'])) { 
    // yes button was clicked 
} else if (isset($this->request->data['submit2'])) { 
    // no button was clicked 
} 
19

आम तौर पर सबमिट बटन दोनों के लिए समान नाम का उपयोग करना एक बुरा अभ्यास है। $ _POST और $ this-> अनुरोध-> डेटा

में "सबमिट" कुंजी होना चाहिए, मैंने इसे केकपीएचपी 2.1 में परीक्षण किया।1 नीचे दिखाया गया है:

दृश्य कोड: नियंत्रक में

<?php echo $this->Form->create('Message', array('action'=>'test')); 
// Extra test input field 
echo $this->Form->input('test'); 
?> 

<div class='submit'> 
<?php 
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit')); 
?> 
</div> 
<?php echo $this->Form->end()?> 

$ this-> अनुरोध> डेटा में:

array(
    'submit' => 'Yes', 
    'Message' => array(
     'test' => 'TestFieldTest' 
    ) 
) 

और में $ _POST:

array(
    '_method' => 'POST', 
    'data' => array(
     'Message' => array(
      'test' => 'TestFieldTest' 
     ) 
    ), 
    'submit' => 'Yes' 
) 

आप दो अलग-अलग नाम भी सबमिट कर सकते हैं:

echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submitY')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submitN')); 

इस तरह आप $ _POST या $ this-> अनुरोध> डेटा में उन्हें अलग हो सकता है, क्योंकि कुंजी प्रविष्टियों पर के नाम हो जाएगा:

array(
    'submitY' => 'Yes', 
    'Message' => array(
     'test' => 'foo' 
    ) 
) 

array(
    '_method' => 'POST', 
    'data' => array(
     'Message' => array(
      'test' => 'Bar' 
     ) 
    ), 
    'submitY' => 'Yes' 
) 

फिर निर्धारित करने के लिए कौन सा बटन आप दबाया जाता है एक साधारण जारीकर्ता ($ _ POST ['']) या $ से अधिक-> अनुरोध-> डेटा का उपयोग कर सकते हैं?

+0

सबसे पूरा उत्तर आईएमओ – pbond

+0

यह मेरे फॉर्म पोस्ट एरे में नहीं देख रहा है - यहां तक ​​कि एक ब्रांड नई परियोजना के साथ: -एस मैं थोड़ा और बाद में खोजूंगा और आप वापस आ जाओ ... – RichardAtHome

+0

क्या आप पोस्ट पर किसी भी कस्टम फ़िल्टरिंग का उपयोग कर रहे हैं - जैसे कोडनिर्देशक एक्सएसएस या? यह बहुत अजीब है। एक मामूली सवाल होगा: क्या आप सही कार्रवाई में हैं? क्या सही कार्य की ओर इशारा करते हुए फॉर्म है? जमा करने के लिए अलग-अलग नामों के साथ इसे आज़माएं। क्या आप पोस्ट की सामग्री भी प्रदान कर सकते हैं? –

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