Das CodeIgniter-Framework erzeugt ständig einen Fehler, der bei der Validierung erforderlich ist, auch wenn das Feld benötigt wird (in der Methode "form_phone_data"). Wert im Feld "user_id", das mit AJAX geladen wurde.Codeigniter erforderlicher Fehler
Nach dem Klicken auf die Schaltfläche "Senden" wird eine Nachricht angezeigt, dass das Feld "Telefon" nicht ausgefüllt ist. Wenn Sie das "Erforderlich" aus den Validierungsparametern entfernen, wird eine unendliche Seitenladung angezeigt (Senden des Formulars).
Code:
<?php
defined("BASEPATH") OR exit("Access denied.");
class Sup extends CI_Model {
function __construct()
{
parent::__construct();
if($this->app->user != FALSE){
echo $this->app->tpl('Ошибка доступа','access_denied');
exit;
}
}
function signup_form()
{
$phone_signup = $this->security->xss_clean($this->session->userdata("phone_signup"));
$this->app->header_file = 'signup';
if(!empty($phone_signup)){
$user = $this->app->get_user($phone_signup, 'phone');
if($user && $user['firstname'] == 'none'){
$this->form_user_data();
}else{
$this->session->set_userdata("phone_signup", NULL);
echo "sss";
exit;
}
}else{
$this->form_phone_data();
}
}
function form_phone_data()
{
$this->fv->set_error_delimiters('<div class="error">','</div>');
$this->fv->set_rules('phone','Номер телефона','trim|required|numeric|min_length[10]|max_length[10]|xss_clean|callback__scode');
$this->fv->set_rules('verify_code','Код подтверждения','trim|required|numeric|min_length[6]|max_length[6]|xss_clean');
$this->fv->set_rules('user_id','Системное поле','trim|required|numeric|xss_clean');
if($this->fv->run() == FALSE){
echo $this->app->tpl('Регистрация','signup/phone');
}else{
header("Location: ".URI."signup");
exit;
}
}
function send_phone_sms($phone)
{
$phone = $this->security->xss_clean($phone);
if(!preg_match("/^[0-9]{10,10}+$/", $phone)){
echo '<div class="error">Номер телефона должен быть в 10-значном формате, например 9098087766</div>';
}else{
$phone = "8".$phone;
$sql = $this->app->get_user($phone, 'phone');
if($sql){
if($sql['firstname'] == 'none'){
?>
<script>
$(".next").hide();
$("input[name=verify_code]").css("display","block");
$("input[name=user_id]").val(<?=$sql['id'];?>);
</script>
<?php
echo '<div class="inform">Код для подтверждения номера был отправлен Вам ранее. Пожалуйста, введите тот код, который мы Вам отправляли.</div><input type="submit" class="submit" value="Продолжить"/>';
}else{
echo '<div class="error">На данный номер телефона уже регистрировались ранее. Введите другой номер и нажмите <b>Далее</b></div>';
}
}else{
$phone_code = rand(100000,999999);
$data = array('firstname'=>'none','lastname'=>'none','last_online'=>SERVER_TIME,'signup_date'=>SERVER_TIME,'photo_cover'=>'none','password'=>'none','phone'=>$phone,'verify_code'=>$phone_code);
$this->db->insert('users', $data);
$user_id = $this->db->insert_id();
?>
<script>
$(".next").hide();
$(".next").hide();
$("input[name=verify_code]").css("display","block");
$("input[name=user_id]").val(<?=$insert_id;?>);
</script>
<?php
// тут отправляем смс с кодом
echo '<input type="submit" class="submit" value="Продолжить"/>';
}
}
}
function code($phone)
{
$phone = $this->security->xss_clean($phone);
$code = $this->security->xss_clean(set_value('verify_code'));
$user_id = $this->security->xss_clean(set_value('user_id'));
$phone = "8".$phone;
$sql = $this->app->get_user(array('id'=>$user_id, 'phone'=>$phone, 'verify_code'=>$code));
if(!$sql){
$this->fv->set_message('_scode','Неверный код подтверждения: '.$code.'');
return FALSE;
}else{
exit;
$this->session->set_userdata("phone_signup", $sql['phone']);
return TRUE;
}
}
function form_user_data()
{
$user = $this->app->get_user($this->session->userdata("phone_signup"));
$this->fv->set_error_delimiters('<div class="error">','</div>');
$this->fv->set_rules('firstname','Имя','trim|required|max_length[20]|xss_clean');
$this->fv->set_rules('lastname','Фамилия','trim|required|max_length[20]|xss_clean');
$this->fv->set_rules('password','Пароль от профиля','trim|required|alpha_numeric|min_length[6]|max_length[36]|xss_clean');
if($this->fv->run() == FALSE){
echo $this->app->tpl('Завершение регистрации','signup/data', array('step'=>1));
}else{
$this->update_user_data($user['id']);
echo $this->app->tpl('Завершение регистрации','signup/data', array('step'=>2));
}
}
function update_user_data($user_id)
{
$data = $this->app->get_form(array('firstname','lastname','password'));
$data['is_active'] = 1;
$this->db->where('id', $user_id)->update('users', $data);
}
}
Vorlage:
<script>
function phone_sms()
{
var phone = $("input[name=phone]").val();
$.ajax({
url: "/index.php/signup/send_sms/"+phone,
success: function(html){
$("#phone_step").html(html);
}
});
return false;
}
</script>
<div class="padding">
<center>
<?=validation_errors();?>
<form action="" method="POST">
<input type="number" name="phone" placeholder="Номер телефона"/>
<a class="submit next" onclick="phone_sms();" id="ignore_dynamic">Продолжить</a>
<input type="hidden" name="user_id"/>
<input type="number" name="verify_code" placeholder="Код подтверждения" style="display: none;"/>
<div id="phone_step">
</div>
</form>
</center>
</div>
als Randnotiz sein: nicht verwenden