#php #codeigniter #model
#php #codeigniter #Модель
Вопрос:
я хочу знать, как я могу передать параметр (Get) моей модели для поиска в моей базе данных и возврата результатов?
Я создаю исследовательскую функцию для всех products
в моей базе данных
Вот мой код :
Контроллер :
function recherche2($search){
$this->load->model('ordiDepotModele');
$resultat = $this->ordiDepotModele->rechercher($search);
$i=0;
foreach ($resultat->result() as $row){
$item = array();
$item['num'] = $row->idProduit;
$item['nomProduit'] = $row->nomProduit;
$item['prix'] = $row->prixVente;
$listeitems[$i] = $item;
$i ;
}
$data['item'] = $listeitems;
}
Модель:
function rechercher($search){
$query = $this->db->query("SELECT * FROM produit WHERE nomProduit LIKE '%".$search."%'");
return $query;
}
Вид:
if(isset($item)){
for($i = 0; $i<count($item);$i ){?>
<div class = "res_item">
<div class = "res_img">
<img src = "<?php echo $image; ?>/computer2.png"/>
</div>
<div class = "res_info">
<div class "res_num">
<label class = "titre_prod">
Numéro :
</label>
<span class = "info_prod"> <?php echo $item[$i]['num']?> </span>
</div>
<div class "res_name">
<label class = "titre_prod">
Nom :
</label>
<span class = "info_prod"> <?php echo $item[$i]['nomProduit']?> </span>
</div>
<div class "res_prix">
<label class = "titre_prod">
Prix :
</label>
<span class = "info_prod"> <?php echo $item[$i]['prix']?> $ </span>
</div>
<div class "res_cat">
<label class = "titre_prod">
Catégorie :
</label>
<span class = "info_prod"> Test </span>
</div>
</div>
</div>
<?php
}
}
else
echo 'Aucun résultat obtenu';
Спасибо всем
Комментарии:
1. Имя моей строки ввода текста
search
Ответ №1:
Вам необходимо включить querystrings в вашем application/config/config.php
$config['enable_query_strings'] = TRUE;
НО на данный момент вам это не нужно. вы должны просто передать его как сегмент URL.
function recherche2($keyword) {
$this->load->model('ordiDepotModele');
$resultat = $this->ordiDepotModele->rechercher($keyword);
$data['nom'] = $keyword;
...
ТАКЖЕ я думаю, что ваша проблема в том, что вы передаете значение своей модели следующим образом:
$resultat = $this->ordiDepotModele->rechercher($data['nom']);
который извлекает значение «nom» из массива в виде одного значения .. (при условии, что у вас есть только одно окно поиска)
затем в своем оповещении вы делаете это:
function rechercher($data){
echo "<script>alert('".$data['nom']."');</script>";
Который считывает значение из ассоциативного массива, но на данный момент $data
не является массивом, это локальная переменная, которая содержит строку.
Вы могли бы просмотреть его, если бы сделали
echo $data;
// РЕДАКТИРОВАТЬ
извините, я не могу опубликовать форматированный код в комментарии.
попробуйте это:
public function test() {
echo '['.$this->input->get('search').']';
echo '<form method="GET">';
echo '<input type="input" name="search" /><input type="submit" />';
echo '</form>';
}
Комментарии:
1. Спасибо за предложение —> теперь это работает (за предупреждение) Кроме того, как я уже сказал, я хочу передавать текст моего типа ввода в представлении, а не напрямую по URL
2. Я в замешательстве. Если вы установите для своего метода form значение
GET
, то он просто отправит сообщение вhttp://yoursite/controller/method?search={value}
. но вы должны включить querystrings, чтобы это было доступно для чтения в вашем контроллере. Если вы не хотите использовать URL .. тогда вам нужно сделать POST .3. я ввел строки запроса как True
4. но это тоже не сработает .. я пробую $this->input-> get(‘search’, true), но это не работает
5. гм .. как выглядит ваша форма? я только что попробовал это, и это работает: общедоступная функция test() { echo ‘[‘.$this->input->get(‘search’).’]’; echo ‘<метод формы=»GET»>’; echo ‘<тип ввода=»input» name=»search» /><тип ввода = «submit» />’; echo ‘</form>’; }
Ответ №2:
В codeigniter параметры часто передаются в сегментах URL, что делает URL-адреса намного приятнее.
URL-адрес будет выглядеть следующим образом example.org/recherche2/KEYWORD
. Этот метод имеет некоторые недостатки, поскольку не все символы разрешены в URL.
Вы можете установить разрешенные символы в файлах конфигурации.
В случае, если вы будете использовать способ, основанный на сегменте URL, контроллер будет выглядеть следующим образом:
function recherche2($search) {
$data['nom'] = $search;
$this->load->model('ordiDepotModele');
$resultat = $this->ordiDepotModele->rechercher($data['nom']);
$i=0;
foreach ($resultat->result() as $row){
$item = array();
$item['num'] = $row->idProduit;
$item['nomProduit'] = $row->nomProduit;
$item['prix'] = $row->prixVente;
$listeitems[$i] = $item;
$i ;
}
$data['item'] = $listeitems;
}
Кстати, по какой причине вы не используете post?
Комментарии:
1. поскольку это исследовательская функция, естественно, входные данные должны быть в URL, нет?
2. Хорошо, это, вероятно, просто настройки 🙂 Попробуйте предложенное решение.
3. как я могу установить мою переменную $ search таким образом?
4. он выдает мне серьезность ошибки: Предупреждающее сообщение: отсутствует аргумент 1 для ordiDepot::recherche2() Имя файла: controllers/ordiDepot.php Номер строки: 281 Обнаружена ошибка PHP Серьезность: Сообщение об уведомлении: Неопределенная переменная: имя файла поиска: controllers/ordiDepot.php Номер строки: 282
5. Я не эксперт, но… Я думаю, HTTP предполагает, что GET используется для таких вещей, как поиск (данные не изменяются на стороне сервера), а POST предназначен для вещей, которые вызывают изменения (и не должны повторяться, отсюда и все предупреждения браузера при обновлении.) Возможно, эта идея немного устарела. Я знаю, что когда я смотрю на другие поисковые системы, это основано на запросах в URL. Не уверен, что это очевидно, но если вы хотите использовать CI и GET для этого, можете ли вы убедиться, что URL-адрес закодирован так, чтобы разрешались все символы? (В данный момент я изучаю CI.)