2013-04-17 5 views
5

मैं समर्थक नहीं हूं, लेकिन PHP के चारों ओर अपना रास्ता जानता हूं, मैं कोडनिर्देशक के लिए नया हूं।कोडनिर्देशक फॉर्म पोस्ट और सत्यापन

कि यह शिक्षण सामग्री के माध्यम से चल रहा है: http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/

ठीक है, तो मैं एक पृष्ठ है कि उपयोगकर्ताओं को सूचीबद्ध करता है, उन के नाम पर क्लिक एक संपादन पृष्ठ पर चला जाएगा, के उस पेज से किया जा रहा यूआरएल है: index.php उपयोगकर्ताओं// संपादित करें/1 (जहां 1 उपयोगकर्ता आईडी है)

संपादन पृष्ठ पर एक रूप है, इस फ़ॉर्म में कुछ भाग होते हैं, प्रत्येक भाग डीबी में विभिन्न तालिकाओं से पॉप्युलेट होता है। तो संपादन के लिए मेरी नियंत्रक इस प्रकार है:

function edit() { 

     //load model 
     $this->load->model('users_model'); 

     //assign user data from DB 
     $data['data_user'] = $this->users_model->getUser($this->uri->segment(3)); 
     //get users Password, using username from above 
     $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName); 

     $data['page_content'] = 'pages/users_edit'; 
     $this->load->view('template/template', $data); 
    } 

नोटिस: $data['data_user'] नाम, उपयोगकर्ता नाम, ईमेल की तरह $data['data_user_password'] एक अलग मेज से उन पासवर्ड शामिल

मैं तो, प्रपत्र पॉप्युलेट कर सकते हैं पर उन डेटा होता है users_edit.php, यह सब ठीक काम करता है।

if (is_array($data_user)) { 
    foreach($data_user as $user) 
    { 
     $userID   = $user->id; 
     $userName  = $user->Name; 
     $userUserName = $user->UserName; 
     $userMail  = $user->Mail; 
     $userDepartment = $user->Department; 
     $userWorkPhone = $user->WorkPhone; 
     $userHomePhone = $user->HomePhone; 
     $userMobile  = $user->Mobile; 

    } 
} 
//user password 
if (is_array($data_user_password)) { 
    foreach($data_user_password as $user) 
    { 
     $userPassword = $user->value; 
    } 
} 

Name: 
<?php echo form_input('name', set_value('name', $userName), 'id="name" class="inputLong"'); ?> 

जब मैं पोस्ट, मैं करने के लिए डेटा भेज रहा: उपयोगकर्ताओं/index.php/अद्यतन

इस पृष्ठ के लिए मेरे नियंत्रक अब तक है मैं निम्न तरीके से वह डेटा तक पहुँचने हूँ:

function update() { 

     echo '<pre>'; 
     print_r($_POST); 
     echo '</pre>'; 
     //exit(); 

     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('name', 'Name', 'trim|required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('pages/users_edit'); 
     } 
     else 
     { 
      $this->index(); 
     } 

    } 

अभी के लिए, मैं सिर्फ उन पर मान्यता का परीक्षण कर रहा हूँ "नाम" जहां प्रपत्र इनपुट = नाम आईडी = नाम

मुझे लगता है कि मैं से निपटने नहीं कर रहा हूँ अगर ($ this-> form_validation-> रन() == गलत) इसका सही हिस्सा है, अगर फॉर्म में डेटा है, तो यह इंडेक्स को पास करता है और रीडायरेक्ट करता है, अगर मैं रिक्त नाम छोड़ देता हूं तो यह संपादन पृष्ठ को सही तरीके से संभाल नहीं सकता है, या मुझे नहीं पता, कुछ सही नहीं है .. मुझे लगता है क्योंकि यह पृष्ठ है पोस्ट सरणी का उपयोग करके पुनः लोड किया जा रहा है, और $ संपादित नहीं किया गया जैसे मैंने फ़ंक्शन एडिट() में किया था।

प्रपत्र पेज, जहां यह validation_errors प्रदर्शित होना चाहिए वापस, अपने प्रदर्शन से:

नाम फ़ील्ड आवश्यक है।

यह सही है, है, तथापि, क्षेत्रों है कि पहले से भरा जाना चाहिए के बाकी के लिए अपने प्रदर्शन के पीएचपी त्रुटि:)

A PHP Error was encountered 

Severity: Notice 

Message: Undefined variable: userUserName 

Filename: pages/users_edit.php 

Line Number: 50 
+0

हाँ, इस के साथ प्रपत्र पृष्ठ लोड करना = "नाम"> – Mark

+0

कृपया सुनिश्चित करें कि आपने "serUserName" चर परिभाषित किया है? – Suleman

+0

'$ data_user' में, यदि आप एक उपयोगकर्ता के लिए डेटा प्राप्त करते हैं, तो उस पर लूप न करें। –

उत्तर

0
$this->load->view('pages/users_edit'); 

अपने कार्य अद्यतन (अंदर, आपके सत्यापन के बाद आप लोड व्यू लेकिन आप इसे किसी भी डेटा चर को पास नहीं करते हैं। तो अगर आप किसी भी चर आप अपना दृश्य फ़ाइल पहुंच सकते हैं ..

आप अपने चर अपने कार्य संपादित करें() के रूप में एक ही तरह से स्थापित करने के लिए नहीं है:

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

इस समय वहाँ नहीं है परिवर्तनीय $ data_user सेट करें ताकि आप इसे लूप नहीं कर सकें और इसका उपयोग कर सकें ..

+0

मुझे समझ में नहीं आता है, वीडियो ट्यूटोरियल में और उपयोगकर्ता मार्गदर्शिका में: http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html वे पृष्ठ को पुनः लोड नहीं कर रहे हैं और इसमें कोई डेटा पास नहीं कर रहे हैं वीडियो वे कहते हैं कि कोडिनेटर आपके लिए इसका ख्याल रखता है .. ?? इसका मतलब है कि फॉर्म को फिर से लोड करने से पहले पोस्ट डेटा के साथ $ डेटा ['data_user'] और $ डेटा ['data_user_password'] arrays को पुनर्निर्माण करने की आवश्यकता होगी, सही? – Mark

+0

जब आप पृष्ठ संपादित करने के लिए जाते हैं तो आप अपने उपयोगकर्ता डेटा के साथ नियंत्रक -> EDIT() फ़ंक्शन लोड करते हैं .. जब आप अपना फॉर्म जमा करते हैं तो आप नियंत्रक -> अद्यतन() फ़ंक्शन पर भेजते हैं जहां वह उपयोगकर्ता डेटा सेट नहीं होता है .. ताकि आप कर सकें इसे एक्सेस नहीं करें :) .. – Svetoslav

1

आप अपडेट फ़ंक्शन के बजाय अपने संपादन फ़ंक्शन के अंदर अपना सत्यापन कर सकते हैं, इस तरह, आपका डेटा अभी भी आपके दृश्य के लिए उपलब्ध है और यदि सत्यापन में त्रुटियां हैं, कोडिनेटर आपके फ़ील्ड को दोबारा बदलने के लिए प्रभारी होंगे।

function edit() { 

    //load model 
    $this->load->model('users_model'); 

    //assign user data from DB 
    $data['data_user'] = $this->users_model->getUser($this->uri->segment(3)); 
    //get users Password, using username from above 
    $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName); 

    $data['page_content'] = 'pages/users_edit'; 
    $this->load->view('template/template', $data); 

    //is the form submitted 
    if(form submit){ 
     if ($this->form_validation->run() == TRUE) 
     { 
      $this->index(); 
     } 
     else 
     { 
     $this->load->view('pages/users_edit', $data); 
     } 
    } 
} 
संबंधित मुद्दे