2017-11-29 1 views
-1

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> 
+0

als Randnotiz sein: nicht verwenden

mehr, veraltet, siehe: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/center – Vickel

Antwort

0

Ist es nicht callback_code statt callback_scode auf Ihrem Telefon Regeln

+0

I n controller function scode -> $ this-> support> code ($ phone) –

+0

Der Name der Callback-Methode lautet 'code' not' scode' –

+0

@S.Grig Nun, versuchen wir es mit einem anderen Ansatz - Sie haben callback__scode - Also, wo ist die Methode namens _scode()? Hinweis: Sie haben zwei Unterstriche anstelle von 1. – TimBrownlaw