Запрос параметра PHP CodeIgniter

#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.)