SQL select из запроса возвращает неверную информацию, codeigniter

#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 печатает переменную (ы) напрямую, как мы требуем на наших сайтах.