2010-02-17 22 views
13

के साथ किसी फ़ॉर्म को संसाधित करने के लिए मैं CodeIgniter में नया हूं। मुझे एक फॉर्म को संसाधित करने की आवश्यकता है। मैं दृश्यकोडइग्निटर

<html> 
    <head> 
    <title>Search</title> 
    </head> 
    <body> 
    <form action="search"> 
     <input type="text" name="search" value="" size="50" /> 
     <div> 
     <input type="submit" value="Submit" /> 
     </div> 
    </form> 
    </body> 
</html> 

और फार्म नियंत्रक

class Form extends Controller { 

    function Form() { 
    parent::Controller(); 
    } 

    function index() {  
    $this->load->view('form'); 
    } 

} 

में एक form.html पेज है और मैं एक दृश्य फ़ाइल search.php है लेकिन जब यह संसाधित किया जाता है यह नहीं मिला पेज से पता चलता ...

उत्तर

10

नियंत्रक को लोड और प्रदर्शित करने के बिना फ़ाइल देखें बेकार है। फ़ॉर्म डेटा प्राप्त करने, प्रक्रिया करने, फिर प्रक्रिया परिणाम प्रदर्शित करने के लिए आपको नियंत्रक बनाना होगा।

आप प्रपत्र खुला टैग, भी करीब टैग सेट करने के एक फार्म के सहायक का उपयोग कर सकते हैं:

<form action="<?php echo site_url('form/search'); ?>"> 

तब: प्रपत्र सहायक का उपयोग किए बिना

<?php echo form_open('form/search'); ?> 
<input type="text" name="search" value="" size="50" /> 
<div><input type="submit" value="Submit" /></div> 
<?php echo form_close(); ?> 

, तब भी आप इसे इस तरह लिख सकते हैं

function search() 
{ 
    //get form field 
    $search = $this->input->post('search'); 
    // do stuffs here 
    //... 
} 

रेम: form नियंत्रक में search विधि जोड़ें एम्बर कि सीआई केवल आपको बुनियादी कोड संगठन के साथ मदद करता है और सहायक पुस्तकालय और सहायक प्रदान करता है। लेकिन आपको अभी भी अपनी साइट में प्रक्रिया के एल्गोरिदम लिखने की जरूरत है।

डाउनलोड किए गए कोडनिर्देशक पैकेज में शामिल उपयोगकर्ता मार्गदर्शिका को पढ़ने के लिए मत भूलना। आप वहां से उदाहरण से कई सामान सीख सकते हैं। उन चीजों से पूछने में संकोच न करें जिन्हें आप यहां नहीं जानते हैं, स्टैक ओवरफ्लो के कई सदस्य आपकी मदद करेंगे।

0

यह सुनिश्चित करने के लिए कि आप सही जगह पर इंगित कर रहे हैं, अपनी क्रिया में कोडनिर्देशक 'site_url' का उपयोग करने का प्रयास करें। आपके उदाहरण में कार्रवाई 'फॉर्म' नियंत्रक की बजाय 'खोज' नियंत्रक के पास गई होगी।

<html> 
<head> 
<title>Search</title> 
</head> 
<body> 
<form action="<?= site_url('form/process_search') ?>"> 
<input type="text" name="search" value="" size="50" /> 
<div><input type="submit" value="Submit" /></div> 
</form> 
</body> 
</html> 

सूचकांक केवल .. जब और कुछ नहीं पारित हो जाता है अपने नियंत्रक में प्रयोग किया जाता है तो मेरी उदाहरण के मामले में आप कुछ इस तरह चाहेगा ऊपर:

function Form() 
{ 
    parent::Controller(); 
} 

function process_search() 
{ 

    print "<pre>"; 

    print_r($_POST); 

    print "</pre>"; 
} 
0

Nettuts CodeIgniter के लिए एक महान ट्यूटोरियल है लॉगिन फॉर्म के लिए। स्क्रीनकास्ट का पालन करें और यह आपके प्रश्नों को साफ़ कर देगा। CodeIgniter तरह

http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-6-login/

+0

लिंक मर चुका है। उदास चेहरा। –

31

में एम .odel वी .iew सी .ontroller सेटअप दृश्य यूजर इंटरफेस तत्व हैं। उन्हें पार्सिंग परिणाम नहीं होना चाहिए।

अगर मैं गलत नहीं कर रहा हूँ, आप क्या कर रहे हैं पास डेटा www.yoursite.com/index.php/form से www.yoursite.com/index.php/search

असंरचित PHP में करने के लिए आप search.php का एक रूप कार्रवाई के साथ एक form.html हो सकता है। उपयोगकर्ता yoursite.com/form.html पर नेविगेट करेगा, जो yoursite.com/search.php पर कॉल करेगा, जो yoursite.com/results.php पर रीडायरेक्ट हो सकता है।

CodeIgniter (और, जहाँ तक मैं यह समझ के रूप में, किसी भी MVC प्रणाली में, भले ही भाषा की) अपने Controller, Form एक समारोह है जो अपने आप में form.htmlViewलोड करता है कहता है और फिर इसे चलाता है। View कोड उत्पन्न करता है (आमतौर पर एचटीएमएल, लेकिन जरूरी नहीं) जो उपयोगकर्ता के साथ इंटरैक्ट करता है। जब उपयोगकर्ता अनुरोध करता है कि दृश्य संभाल नहीं सकता है (अधिक डेटा या किसी अन्य पृष्ठ के लिए अनुरोध) यह उस अनुरोध को वापस नियंत्रक को पास करता है, जो अधिक डेटा या किसी अन्य दृश्य में लोड होता है।

दूसरे शब्दों में, व्यू निर्धारित करता है कि डेटा कैसे प्रदर्शित किया जा रहा है। नियंत्रक मानचित्र दृश्यों के लिए अनुरोध करते हैं।

जब आप जटिल और/या दृश्य में प्रदर्शित डेटा बदलना चाहते हैं तो यह थोड़ा अधिक जटिल हो जाता है। separation of concerns को बनाए रखने के लिए कि एमवीसी को कोडइग्निटर की आवश्यकता है, आपको Models भी प्रदान करता है।

मॉडल किसी भी वेब अनुप्रयोग के सबसे कठिन भाग के लिए ज़िम्मेदार हैं - डेटा प्रवाह का प्रबंधन। डेटा डेटा अखंडता सुनिश्चित करने के तरीकों में डेटा पढ़ने, डेटा लिखने और सबसे महत्वपूर्ण बातों के तरीकों में वे विधियां शामिल हैं। दूसरे शब्दों में मॉडल चाहिए:

  • सुनिश्चित करें कि डेटा सही प्रारूप में है।
  • सुनिश्चित करें कि डेटा में कुछ भी नहीं है (दुर्भावनापूर्ण या अन्यथा) जो उस पर्यावरण को तोड़ सकता है जिसके लिए इसे नियत किया गया है।
  • के लिए सी .reating, आर .eading, यू .pdating, और ऊपर की कमी के भीतर डी .eleting डेटा के अधिकारी तरीकों।

Akelos एक अच्छा ग्राफिक MVC के घटकों बिछाने है:

Request - Response http://svn.akelos.org/trunk/docs/images/akelos_mvc.png

कहा जा रहा है, सरल (पढ़ें "सबसे आसान", "सबसे विस्तार योग्य" नहीं) जिस तरह से पूरा करने के लिए आप क्या क्या करना चाहते है:

function Form() 
{ 
    parent::Controller(); 
} 

function index() 
{ 
     $this->load->view('form'); 
} 

function search() 
{ 
     $term = $this->input->post('search'); 
     /* 
      In order for this to work you will need to 
      change the method on your form. 
      (Since you do not specify a method in your form, 
      it will default to the *get* method -- and CodeIgniter 
      destroys the $_GET variable unless you change its 
      default settings.) 

      The *action* your form needs to have is 
      index.php/form/search/ 
     */ 

     // Operate on your search data here. 
     // One possible way to do this: 
     $this->load->model('search_model'); 
     $results_from_search = $this->search->find_data($term); 

     // Make sure your model properly escapes incoming data. 
     $this->load->view('results', $results_from_search); 
} 
+3

+1 - मेरा आशावादी उपरोक्त। यह स्पष्ट और आमंत्रित है।मैं यह मूल्यांकन करने के लिए पर्याप्त कुशल नहीं हूं कि यह कितना सच है, लेकिन मैं देख रहा हूं कि मैं ऐसा करने के लिए इसका उपयोग कर सकता हूं या नहीं। – Smandoli

+0

'$ शब्द = $ यह-> इनपुट-> पोस्ट ('खोज'); 'यहां ...' खोज 'फॉर्म का नाम है, सही? –

+2

@b_dubb - 'search' * फ़ील्ड * का नाम है:' <इनपुट प्रकार = "टेक्स्ट" नाम = "खोज"> '। विस्तृत उत्तर के लिए –

0

<?php echo form_open('form/search');?> और autoload.php फ़ाइल के साथ इस <form action="search"> की जगह ०१२३२९९९४७१९ जोड़ने

और उसके बाद न फ़ाइल search.php का उपयोग फ़ाइल बस यहाँ

class Form extends Controller { 

    function Form() { 
    parent::Controller(); 
    } 

    function index() {  
    $this->load->view('form'); 
    } 

function search(){ 
//your code here 
} 
} 
1

की तरह अपने नियंत्रक फ़ाइल में अपने search.php कोड जोड़ने के इस रूप को मान्यता है और नियंत्रक मेरा पूरा नियंत्रक कक्षा में प्रस्तुत

class MY_Controller extends CI_Controller { 

     function __construct() 
     { 
      parent::__construct(); 

      $this->load->library(array('session','form_validation')); 
      $this->load->helper(array('form', 'url', 'date')); 

      //$this->load->config('app', TRUE); 

      //$this->data['app'] = $this->config->item('app'); 


      } 
    } 

    <?php 

    if (!defined('BASEPATH')) 
     exit('No direct script access allowed'); 

    class Article extends MY_Controller { 

     function __construct() { 
      parent::__construct(); 
      $this->load->model('article_model'); 
     } 

     public function index() { 

      $data['allArticles'] = $this->article_model->getAll(); 

      $data['content']  = $this->load->view('article', $data, true); 
      $this->load->view('layout', $data); 

     } 

     public function displayAll() { 

      $data['allArticles'] = $this->article_model->getAll(); 

      $data['content']  = $this->load->view('displayAllArticles', $data, true); 
      $this->load->view('layout', $data); 

     } 

     public function displayArticle($id) { 

      $data['article']  = $this->article_model->read($id); 

      $data['articleId']  = $id; 

      $data['comment']  = $this->load->view('addComment', $data, true); 

      $data['content']  = $this->load->view('displayArticle', $data, true); 


      $this->load->view('layout', $data); 

     } 

     public function add() { 

      $this->form_validation->set_message('required', '%s is required'); 
      $this->form_validation->set_rules('title', 'Title', 'required|xss_clean'); 
      $this->form_validation->set_rules('description', 'Description type', 'required|xss_clean'); 

      $this->form_validation->set_error_delimiters('<p class="alert alert-danger"><a class="close" data-dismiss="alert" href="#">&times;</a>', '</p>'); 


      if ($this->form_validation->run() == TRUE) { 

       $article = array(
         'title'   => $this->input->post('title'), 
         'description' => $this->input->post('description'), 
         'created'  => date("Y-m-d H:i:s") 
       ); 

       $this->article_model->create($article); 

       redirect('article', 'refresh'); 


      } else { 

       $data['article'] = array(
        'title'   => $this->input->post('title'), 
        'description' => $this->input->post('description'), 
       ); 

       $data['message'] = validation_errors(); 

       $data['content'] = $this->load->view('addArticle', $data, true); 
       $this->load->view('layout', $data); 
      } 
     } 

    } 

हम इस तरह के सामान्य HTML फॉर्म का उपयोग कर सकते हैं।

  <?php echo $message; ?> 

      <form method="post" action="article/add" id="article" > 
       <div class="form-group"> 
        <label for="title">Article Title</label> 
        <input type="text" class="form-control" id="title" name="title" value="<?php echo $article['title']; ?>" > 
       </div> 
       <div class="form-group"> 
        <label for="description">Description</label> 
        <textarea class="form-control" rows="13" name="description" id="description"><?php echo $article['description']; ?></textarea> 
       </div> 

       <button type="submit" class="btn btn-default">Submit</button> 
      </form>  
     </div> 
    </div>