У меня такая ситуация. Например,
Путь: localhost/intranet/
Если я введу этот URL:
localhost/intranet/usuarios/actualizar/richard
и оставьте все поля незаполненными и отправьте, проверка проходит нормально и показывает ошибку: «все эти поля обязательны для заполнения» Но, если я снова нажму кнопку «Отправить», он отправит меня по адресу:
localhost/intranet/usuarios/actualizar/
Подсказка: usuarios = USERS на английском языке, actualizar = UPDATE_INFO.
Итак, как вы можете видеть, аргумент, в данном случае richard
, является бесполезным. Я бегу 2.1 CodeIgniter. Почему это происходит? я не хочу, чтобы CodeIgniter пропустил аргумент, потому что он покажет много ошибок, связанных с тем, что CI не может найти аргумент для работы.
Это нормально? Может кто-нибудь может щелкнуть два раза, когда проверка не может увидеть, является ли то же самое поведение?
ОБНОВЛЕНИЕ # 1 Добавлен метод обновления данных
public function actualizar() {
// we check if the form was submited. If not, load register view.
if($_SERVER['REQUEST_METHOD'] == "POST") {
// translation for errors.
$required_msg = "<strong>%s</strong> es un campo obligatorio.";
$exact_length_msg = "<strong>%s</strong> debe contener 10 dígitos exactamente.";
$numeric_msg = "<strong>%s</strong> debe contener solamente dígitos.";
$email_msg = "<strong>%s</strong> debe ser una dirección válida.";
$unique_msg = "<strong>%s</strong> ya está registrado en el sistema. Seleccione uno distinto.";
// set the messages with translations.
$this->form_validation->set_message('required', $required_msg);
$this->form_validation->set_message('exact_length', $exact_length_msg);
$this->form_validation->set_message('numeric', $numeric_msg);
$this->form_validation->set_message('valid_email', $email_msg);
$this->form_validation->set_message('is_unique', $unique_msg);
// set the rules for each input field
$this->form_validation->set_rules('userName', 'Nombre', 'trim|required');
$this->form_validation->set_rules('userLastName', 'Apellido', 'trim|required');
$this->form_validation->set_rules('userUsername', 'Nombre de Usuario', 'trim|required|is_unique[usuarios.userUsername]');
$this->form_validation->set_rules('userCellphone', 'Teléfono', 'trim|numeric|exact_length[10]');
$this->form_validation->set_rules('userEmail', 'Correo Electrónico', 'trim|required|valid_email||is_unique[usuarios.userEmail]');
$this->form_validation->set_rules('userAddress', 'Dirección', 'trim|required');
// set the custom delimiters for each error msg
$this->form_validation->set_error_delimiters('<li>', '</li>');
// we check if the validation pass the rules. If not, show the view again with errors msgs.
if($this->form_validation->run() == FALSE) {
$data['title'] = "Registrar Usuario";
$data['page_title'] = "Panel de Control";
$data['header'] = "header";
$data['scripts'] = array('alert-dismiss');
$data['body'] = "usuarios-actualizar";
$this->load->view('template', $data);
} else {
// if validation went ok, we capture the form data.
$fields = array(
'userName' => $this->input->post('userName'),
'userLastName' => $this->input->post('userLastName'),
'userUsername' => $this->input->post('userUsername'),
'userEmail' => $this->input->post('userEmail'),
'userAddress' => $this->input->post('userAddress'),
'userCellphone' => $this->input->post('userCellphone'),
'userIn' => $this->input->post('userIn'),
'userOut' => $this->input->post('userOut'),
'userLastLogin' => '',
'userRole' => $this->input->post('userRole')
);
$userName = $this->input->post('userName');
$userLastName = $this->input->post('userLastName');
$userEmail = $this->input->post('userEmail');
$userID = $this->input->post('userID');
$userUsername = $this->input->post('userUsername');
// send the $data to the model
if($this->Data_model->update_entry($userID, $fields) == TRUE) {
$this->session->set_flashdata('alert', 'El perfil ha sido actualizado con éxito.');
$this->session->set_flashdata('style', 'success');
redirect('usuarios/perfil/' . $userUsername);
} else {
$this->session->set_flashdata('alert', 'Hubo un error actualizando el perfil. Inténtelo de nuevo.');
$this->session->set_flashdata('style', 'error');
redirect('usuarios/perfil/' . $userUsername);
}
}
// If the request method is not POST, it means that form was not submitted.
} else {
$data['title'] = "Actualizar Datos";
$data['page_title'] = "Actualizar Datos";
$data['header'] = "header";
$data['scripts'] = array('alert-dismiss');
$data['body'] = "usuarios-actualizar";
$data['user'] = $this->Data_model->get_profile_for_update($userUsername);
$this->load->view('template', $data);
}
}
<?=form_close?>
Я только что сказал CI загружать представление, а не перенаправлять и терять URL. Я повторяю: в первый раз, это работает круто. Но если я ничего не меняю и просто нажимаю SEND еще раз, это не получается :( Просто заметил это сегодня вечером. Просто из любопытства снова нажал кнопку отправить, и он пошел в ад.
Надеюсь, кто-нибудь может дать мне некоторое представление о том, что происходит. Спасибо.
P.S. Может быть, у этого парня такая же проблема. Не совсем уверен ...
CodeIgniter Set URL перенаправления проверки формы
ОБНОВЛЕНИЕ # 2 Добавлен код просмотра
<?=form_open('usuarios/actualizar')?>
<?php
$config = array(
'type' => 'submit',
'content' => '<i class="icon-ok icon-white"></i> Guardar Usuario',
'class' => 'btn btn-primary'
);
?>
<div class="row">
<h2 class="section-title span10">Actualizar Usuario</h2>
<div class="span2">
<?=form_button($config)?>
</div>
</div>
<?php if (validation_errors() != null) : ?>
<div class="alert alert-warning fade in">
<a class="close" data-dismiss="alert">×</a>
<ul class="unstyled">
<?=validation_errors()?>
</ul>
</div>
<?php endif;?>
<div class="span5">
<h3 class="box-title">Datos Personales</h3>
<input type="hidden" name="userID" value="<?=$user->userID ?>">
<label>Nombre<span class="required">*</span></label>
<input type="text" class="span4" name="userName" value="<?=set_value('username', $user->userName)?>">
<label>Apellido<span class="required">*</span></label>
<input type="text" class="span4" name="userLastName" value="<?=set_value('userLastName', $user->userLastName)?>">
<label>Teléfono</label>
<input type="text" class="span4" name="userCellphone" value="<?=set_value('userCellphone', $user->userCellphone)?>">
<label>Correo Electrónico<span class="required">*</span></label>
<input type="text" class="span4" name="userEmail" value="<?=set_value('userEmail', $user->userEmail)?>">
<label>Dirección<span class="required">*</span></label>
<textarea class="span4" name="userAddress"><?=set_value('userAddress', $user->userAddress)?></textarea>
</div>
Это не работает, потому что не может найти аргумент, поэтому объект $ user не может быть создан.
Это приводит к огромному количеству ошибок.
РЕШЕНИЕ:
У меня не так много представителей, поэтому я не могу ответить сам, но вот решение:
Боже мой. Может быть, я засыпаю.
Как Madmartigan заявляет, я не использовал "аргумент". Итак, я добавил это:
$data['user'] = $this->Data_model->get_profile_for_update($this->uri->segment(3));
Ооо, мне не важно, если он "потеряет" аргумент в URL, он работает, потому что перед загрузкой представления вызовите $ data ['user'] stuff:)
Спасибо за вашу помощь, ребята, вы лучшие.