Здравствуйте: Всю голову себе сломал, подскажите куда копать: Есть такая строка в коде: PHP: $id =0; $id = $this->ion_auth->register($identity, $password, $email, $additional_data,$group); var_dump($id); var_dump пишет bool(false) Попадая внутрь функции в конце видим: PHP: if (isset($id)) { var_dump($id); return $id; } else { return FALSE; } var_dump пишет int (199) PHP Version 7.4.10 Так тоже делал: PHP: public function register($identity, $password, $email, $additional_data = array(), $groups = array(), $registered_by=''): int { Подскажите, где может теряться переменная?
Корень проблемы - нехватка знаний. Почитайте про "области видимости в функциях и классах", найти легко.
С удовольствием почитаю. Спасибо. Но если мне сейчас нужно это пофиксить, что я могу сделать со своим объёмом знаний. Этот код не я придумал. Это было в продаваемом скрипте.
По-сути, вам из метода register отдаётся либо целое число, либо false. Зачем тогда заморачиваться? PHP: <?php if( $id = $this->ion_auth->register($identity, $password, $email, $additional_data,$group) ) { // пользователь зареган echo "User id: {$id}"; } else { // пользователь не зареган }
Это да, но у меня всегда $id = false. Даже если в return у меня целое число. Этоя проверял. Я так понял, что переменная недоступна из того места где вызывается функция register? То есть после return она перестает существовать? --- Добавлено --- У меня $id это указатель на ID записи БД после операции инсерт.
Совершенно верно. Конкретно в вашем случае (в области функции) - да. Я бы проверил подключение к бд, наличие таблиц. Если всё ок, я бы глянул что вообще происходит в этой функции..
Я так понимаю если в PHP: var_dump($id); //int (199) здесь число всегда return $id; var_dump выводит на страницу int (199). Затем идет return а потом в функции из которой вызывали PHP: $id = $this->ion_auth->register после этой строки var_dump выдает bool(false) значит что-то происходит между двумя var_dump
PHP: public function register($identity, $password, $email, $additional_data = array(), $groups = array(), $registered_by=''): int { $this->trigger_events('pre_register'); $id=0; $manual_activation = $this->config->item('manual_activation', 'ion_auth'); if ($this->identity_check($identity)) { $this->set_error('account_creation_duplicate_identity'); return FALSE; } elseif ( !$this->config->item('default_group', 'ion_auth') && empty($groups) ) { $this->set_error('account_creation_missing_default_group'); return FALSE; } // check if the default set in config exists in database $query = $this->db->get_where($this->tables['groups'],array('name' => $this->config->item('default_group', 'ion_auth')),1)->row(); if( !isset($query->id) && empty($groups) ) { $this->set_error('account_creation_invalid_default_group'); return FALSE; } // capture default group details $default_group = $query; // IP Address $ip_address = $this->_prepare_ip($this->input->ip_address()); $salt = $this->store_salt ? $this->salt() : FALSE; $password = $this->hash_password($password, $salt); $actv=0; if($registered_by=="googleplus" || $registered_by=="facebook") $actv=1; // Users table. $data = array( $this->identity_column => $identity, 'password' => $password, 'email' => $email, 'ip_address' => $ip_address, 'created_on' => time(), 'phone_code' => $additional_data['phone_code'], 'active' => $actv //(($manual_activation === false) ? 1 : 0) ); if ($this->store_salt) { $data['salt'] = $salt; } // filter out any data passed that doesnt have a matching column in the users table // and merge the set user data and the additional data $user_data = array_merge($this->_filter_data($this->tables['users'], $additional_data), $data); $this->trigger_events('extra_set'); $this->db->insert($this->tables['users'], $user_data); $id = $this->db->insert_id(); // add in groups array if it doesn't exits and stop adding into default group if default group ids are set if( isset($default_group->id) && empty($groups) ) { $groups[] = $default_group->id; } if (!empty($groups)) { // add to groups foreach ($groups as $group) { $this->add_to_group($group, $id); } } $this->trigger_events('post_register'); if (isset($id)) { var_dump($id); //int(199) return $id; } else { return FALSE; } }
1. У вас $id существует всегда, даже когда вставка в бд не происходит, так как объявлена и равняется нулю 2. Непонятно, зачем если объявляете функцию типом int возвращать в ряде случаев false? --- Добавлено --- Ну и посмотрите каков синтаксис определения выходного типа... Может в этом дело? https://webformyself.com/php-7-obyavlenie-vozvrashhaemogo-tipa/
PHP: public function register($identity, $password, $email, $additional_data = array(), $groups = array(), $registered_by=''): int { Писал просто return $id; не помогает, все равно оно превращается в bool
а нет ли функций с одинаковыми именами? PHP: $this->ion_auth->register(...) и PHP: $this->register(...) попробуйте вставить перед return - debug_print_backtrace();
Код (Text): #0 Ion_auth_model->register(filippomazzamuto@yahoo.cvv, ###########, filippomazzamuto@yahoo.cvv, Array ([username] => User Name,[slug] => --1,[first_name] => User,[last_name] => Name,[pin_code] => ,[phone_code] => 93,[phone] => +799999999,[age] => 25,[tutor_price] => 4,[photo] => ,[user_belongs_group] => 3), Array ([0] => 3), ) called at [/home/application/libraries/Ion_auth.php:355] #1 Ion_auth->register(filippomazzamuto@yahoo.cvv, PASS, filippomazzamuto@yahoo.cvv, Array ([username] => User Name,[slug] => --1,[first_name] => USER,[last_name] => NAME,[pin_code] => ,[phone_code] => 93,[phone] => +799999999,[age] => 25,[tutor_price] => 4,[photo] => ,[user_belongs_group] => 3), Array ([0] => 3)) called at [/web/htdocs/www.unconventionalteaching.it/home/application/modules/auth/controllers/Auth.php:943] #2 Auth->login() called at [/web/htdocs/www.unconventionalteaching.it/home/system/core/CodeIgniter.php:514] #3 require_once(/web/htdocs/www.unconventionalteaching.it/home/system/core/CodeIgniter.php) called at [/web/htdocs/www.unconventionalteaching.it/home/index.php:312] Но запись в БД нормально создается