सबमिट करने के बाद असफल सत्यापन पर फिर से पॉप्युलेटिंग फ़ॉर्म मेरे पास एक ऐसा फॉर्म है जिसके लिए उपयोगकर्ता को कुछ जानकारी दर्ज करने की आवश्यकता है। यदि वे आवश्यक फ़ील्ड को पूरा करने में असफल होते हैं तो उन्हें फॉर्म के साथ फिर से प्रस्तुत किया जाता है; पृष्ठ के शीर्ष को सूचित करते हुए कि किन फ़ील्ड आवश्यक हैं और मैंने चिपचिपा रूपों (set_value()) को सक्षम किया है, इसलिए उनका इनपुट खो नहीं गया है।कोडिनेटर -
मैं उपयोगकर्ता को संदेश प्रदर्शित करने के लिए फ्लैशडाटा का उपयोग कर रहा हूं (यानी, यदि वे डेटाबेस में पहले से मौजूद हैं जो पहले से मौजूद हैं)।
मेरा फॉर्म मेरे नियंत्रक की अनुक्रमणिका विधि में है। सबमिट करते समय मेरे दृश्य से क्लिक किया जाता है, यह मेरे नियंत्रक में add() विधि को कॉल करता है। ऐड() विधि सत्यापन करता है और परिणामों के आधार पर डेटाबेस को सबमिट करता है या अधिक डेटा प्राप्त करने के लिए उपयोगकर्ता को वापस लाता है।
मेरे पास इस तरह से कई समस्याएं हैं जिनसे मैंने यह किया है। 1. यदि सत्यापन विफल रहता है तो मैं अपने फॉर्म पर वापस जाने और सत्यापन त्रुटियों को प्रदर्शित करने के लिए $-> अनुक्रमणिका() का उपयोग कर रहा हूं। अगर मैं रीडायरेक्ट का उपयोग करने का प्रयास करता हूं, तो मैं अपनी सत्यापन त्रुटियों और मेरे $ _POST [] डेटा को खो देता हूं, इसलिए मेरे चिपचिपा रूप खाली हो जाते हैं। 2. $-> इंडेक्स() का उपयोग करके मेरे यूआरएल के अंत में 'एड' जोड़ता है 3. $-> अनुक्रमणिका() का उपयोग फ्लैशडाटा के साथ समस्याएं उत्पन्न करता है। यादृच्छिक परिणाम।
कोई भी विचार?
<?php
class Restaurant extends Controller {
function Restaurant() {
parent::Controller();
}
function index() {
// Load libraries and models
$this->load->model('/restaurant/mRestaurantTypes');
$this->load->model('/restaurant/mRestaurant');
$this->load->model('/utilities/mUtilities');
// Get states
$stateSelect = array();
$getStates = $this->mUtilities->getStates();
if($getStates->num_rows() > 0) {
foreach($getStates->result() as $row) {
$stateSelect[$row->abbr] = $row->name;
}
}
// Get restaurant types
$restaurantTypes = array();
$getRestaurantTypes = $this->mRestaurantTypes->getRestaurantTypes();
if($getRestaurantTypes->num_rows() > 0) {
foreach($getRestaurantTypes->result() as $row) {
$restaurantTypes[$row->restaurant_types_id] = $row->type;
}
}
// Create form elements
$data['name'] = array(
'name' => 'name',
'id' => 'name',
'value' => set_value('name'),
'maxlength' => '200',
'size' => '50'
);
$data['address'] = array(
'name' => 'address',
'id' => 'address',
'value' => set_value('address'),
'maxlength' => '200',
'size' => '50'
);
$data['city'] = array(
'name' => 'city',
'id' => 'city',
'value' => set_value('city'),
'maxlength' => '50',
'size' => '25'
);
$data['state'] = $stateSelect;
$data['zip'] = array(
'name' => 'zip',
'id' => 'zip',
'value' => set_value('zip'),
'maxlength' => '10',
'size' => '10'
);
$data['phone'] = array(
'name' => 'phone',
'id' => 'phone',
'value' => set_value('phone'),
'maxlength' => '15',
'size' => '15'
);
$data['url'] = array(
'name' => 'url',
'id' => 'url',
'value' => set_value('url'),
'maxlength' => '255',
'size' => '50'
);
$data['type'] = $restaurantTypes;
$data['tags'] = array(
'name' => 'tags',
'id' => 'tags',
'value' => set_value('tags'),
'maxlength' => '255',
'size' => '50'
);
$data['active'] = array(
'name' => 'active',
'id' => 'active',
'value' => 'Y',
'maxlength' => '1',
'size' => '2'
);
// Set page variables
$data_h['title'] = "Add new restaurant";
// Load views
$this->load->view('/template/header', $data_h);
$this->load->view('/restaurant/index', $data);
$this->load->view('/template/footer');
}
/**
* Add the the new restaurant to the database.
*/
function add() {
// Load libraries and models
$this->load->library('form_validation');
$this->load->model('/restaurant/mRestaurant');
// Define validation rules
$this->form_validation->set_rules('name', 'Name', 'trim|required|max_length[255]|xss_clean');
$this->form_validation->set_rules('address', 'Address', 'trim|required|max_length[100]|xss_clean');
$this->form_validation->set_rules('city', 'City', 'trim|required|max_length[128]|xss_clean');
//$this->form_validation->set_rules('state', 'State', 'trim|required');
$this->form_validation->set_rules('zip', 'Zip', 'trim|required|max_length[128]|xss_clean');
$this->form_validation->set_rules('phone', 'Phone', 'trim|required|max_length[10]|xss_clean');
$this->form_validation->set_rules('url', 'URL', 'trim|required|max_length[255]|xss_clean');
$this->form_validation->set_rules('tags', 'Tags', 'trim|xss_clean');
// Form validation
if ($this->form_validation->run() == FALSE) {
// On failure
$this->index();
} else {
// On success, prepare the data
$data = array(
'name' => $_POST['name'],
'address' => $_POST['address'],
'city' => $_POST['city'],
'state' => $_POST['state'],
'zip' => $_POST['zip'],
'phone' => $_POST['phone'],
'url' => $_POST['url'],
'type' => $_POST['type'],
'tags' => $_POST['tags'],
'active' => $_POST['active'],
);
// Check if the restaurant already exists
$check = $this->mRestaurant->getRestaurant($data['name'], $data['zip']);
// If no records were returned add the new restaurant
if($check->num_rows() == 0) {
$query = $this->mRestaurant->addRestaurant($data);
if ($query) {
// On success
$this->session->set_flashdata('status', '<div class="success">Added New Restaurant!</div>');
} else {
// On failure
$this->session->set_flashdata('status', '<div class="error">Could not add a new restaurant.</div>');
}
redirect('restaurant/confirm', 'refresh');
} else {
// Notify the user that the restaurant already exists in the database
$this->session->set_flashdata('status', '<div class="notice">This restaurant already exists in the database.</div>');
redirect('restaurant/index');
}
}
}
function confirm() {
$data['title'] = "Confirm";
$this->load->view('/template/header');
$this->load->view('/restaurant/confirm', $data);
$this->load->view('/template/footer');
}
}
?>
मैंने सभी कोड को() विधि से इंडेक्स() में स्थानांतरित कर दिया है, तो मैंने यह सत्यापित करने का प्रयास किया कि से सबमिट किया गया है या नहीं: अगर (जारी ($ _ POST ['add']) {~~} यह पहली बार काम करता है जब फॉर्म प्रस्तुत किया जाता है; हालांकि, क्योंकि $ _POST ['add'] सेट है, अगली बार जब उपयोगकर्ता जोड़ता है और सत्यापन नियम अभी भी पूरा नहीं हुए हैं तो यह लूप होगा। मैं अभी भी इंडेक्स में सभी कोड लंपने के बजाय ऐड() विधि का उपयोग करना चाहता हूं। – mazer
मुझे लगता है कि आप इसे लूप करना चाहते हैं जब तक सत्यापन नियम सभी पास न हों, है ना? और आप अपने सभी सत्यापन को स्थानांतरित कर सकते हैं और निजी विधियों या लाइब्रेरी विधियों में कोड जोड़ सकते हैं और फिर वांछित होने पर उन्हें इंडेक्स विधि से कॉल कर सकते हैं। – Coomer