#php #codeigniter
#php #codeigniter
Вопрос:
Я создаю приложение с использованием codeigniter, у этого приложения есть страница профиля, где вся отображаемая информация зависит от пользователя, вошедшего в систему в данный момент. На странице профиля я пытаюсь настроить поле биографии, чтобы каждый пользователь мог написать свою собственную уникальную биографию, которая будет сохранена в базе данных. Написанный мной в данный момент код отображает результат на странице, но это не тот результат, на который я надеялся. Ниже приведен написанный мной код, относящийся к проблеме.
В модели:
public function get_profile_information() {
$query = $this->db->query("SELECT profileText from users WHERE
idNumber = ?", $this->session->userdata('username'));
return $query->result_array();
}
В контроллере:
public function loginprocess() {
$username = $this->input->post('idNumber');
$password = $this->input->post('passWd');
$query = $this->db->query("select * from users where idNumber='".$username."' and passWd='$password'");
$row = $query->num_rows();
if ($row) {
$this->session->set_userdata(array('username' => $username));
$sessionID = $this->session->userdata('username');
$data['title'] = 'Profile';
$data['profiletext'] = $this->news_model >get_profile_information();
$data['sessionID'] = $this->session->userdata('username');
$this->load->view('templates/header', $data);
$this->load->view('news/profile', $data);
$this->load->view('templates/footer');
} else {
$data['error'] = 'Invalid Login Details';
$data['title'] = 'Login';
$this->load->view('templates/header', $data);
$this->load->view('news/login', $data);
$this->load->view('templates/footer');
}
}
В представлении:
<head>
<style type="text/css">
</style>
</head>
Welcome to the <?php echo $title; ?> page, <?php echo $sessionID; ?>
<?php var_dump($profiletext); ?>
<?php echo anchor('login/logout', 'logout'); ?>
На веб-странице запрос на получение текста профиля из базы данных на основе зарегистрированного пользователя выдает этот результат
array(1) { [0]=> array(1) { ["profileText"]=> string(17) "Test Profile Text" } }
Я надеялся просто отобразить «Текст тестового профиля». Я не смог разобраться, что не так, я довольно новичок в codeigniter и php, поэтому у меня нет знаний, чтобы исправить эту проблему.
Комментарии:
1. Вы должны параметризовать свой второй запрос так же, как вы сделали с первым. Вы должны хранить свои пароли в виде хэшей, а не обычного текста.
var_dump
предназначен для отладки. У вас есть массив, используйте его как таковой,echo $profiletext['profileText'];
2. если вы серьезно относитесь к написанию приложения, открытого для общественности, с различными пользователями, получающими доступ к разным частям вашего приложения / базы данных: пожалуйста, взгляните на это: github.com/benedmunds/CodeIgniter-Ion-Auth
Ответ №1:
Контроллер:
Внесите небольшое изменение в строку ниже
//$data['profiletext'] = $this->news_model >get_profile_information();//old line
$data['profiletext'] = $this->news_model->get_profile_information();//changes
Модель:
Чтобы получить только «Текст тестового профиля», без каких-либо изменений в вашем представлении
public function get_profile_information() {
$query = $this->db->query("SELECT profileText from users WHERE idNumber = ".$this->session->userdata('username'));
return $query->row('profileText');//changes
}
Ответ №2:
Вам следует использовать echo
вместо var_dump()
Описание:
var_dump ( mixed $expression [, mixed $… ] ) : void Эта функция отображает структурированную информацию об одном или нескольких выражениях, которая включает его тип и значение. Массивы и объекты исследуются рекурсивно со значениями с отступом, чтобы показать структуру.
Все общедоступные, частные и защищенные свойства объектов будут возвращены в выходных данных, если объект не реализует метод __debugInfo() (реализован в PHP 5.6.0).
Заменить
<?php var_dump($profiletext); ?>
Автор:
<?php echo $profiletext[0]['profileText]; ?>
echo
печатает переменную (ы) напрямую, как мы требуем на наших сайтах.