• 22-03-2023, 18:22:42
    #1
    Merhaba Arkadaşlar,
    PHP diliyle geliştirmeye çalıştığım depo web sitemde müşteri filtrele diye sistem yazdım

    bu sistemde müşteri ismini girdiğim zaman filtreleme yaparak verilen müşterinin adının tamamını girince filtreleme yap dediğimde çalışıyor. Fakat Müşteri veya ID girin adlı bölüme yazı yazdığımda otomatik tamamlama yapmasını istiyorum.
    Biraz uğraştım kaynak kodları aşağıda ki gibi
    <?php
    $page_title = 'Bütün Satışları Ara';
    require_once('includes/load.php');
    // Checkin What level user has permission to view this page
    page_require_level(3);
    
    // Filtreleme için müşteri adı veya ID alınması
    if(isset($_POST['submit'])) {
      $must = $_POST['must'];
      $sales = find_sale_by_must($must); // ilgili müşteriye ait satışları getirir
    } else {
      $sales = find_all_sale(); // tüm satışları getirir
    }
    ?>
    
    <?php include_once('layouts/header.php'); ?>
    
    <div class="row">
      <div class="col-md-6">
        <?php echo display_msg($msg); ?>
      </div>
    </div>
    
    <div class="row">
      <div class="col-md-12">
        <div class="panel panel-default">
    <div class="panel-heading clearfix">
      <strong>
        <span class="glyphicon glyphicon-th"></span>
        <span>Müşteriye Verilen Ürünleri Ara</span>
      </strong>
      <div class="pull-right">
     <form action="" method="post">
      <div class="input-group">
    <input type="text" class="form-control" action='find_customer.php' name="must" id="must" placeholder="Müşteri Adı veya ID Girin">
        <span class="input-group-btn">
          <button class="btn btn-primary" type="submit" name="submit"><i class="glyphicon glyphicon-search"></i> Filtrele</button>
        </span>
      </div>
    </form>
      </div>
    </div>
          <div class="panel-body">
            <table class="table table-bordered table-striped">
              <thead>
                <tr>
                  <th class="text-center" style="width: 30px;">#</th>
                  <th> Ürün Adı </th>
                  <th> Müşteri Adı </th>
                  <th class="text-center" style="width: 15%;"> Adeti</th>
                  <th class="text-center" style="width: 15%;"> Tarih </th>
                  <th class="text-center" style="width: 100px;"> Aksiyon </th>
                </tr>
              </thead>
              <tbody>
                <?php foreach ($sales as $sale):?>
                  <tr>
                    <td class="text-center"><?php echo count_id();?></td>
                    <td><?php echo remove_junk($sale['name']); ?></td>
                    <td><?php echo remove_junk($sale['must'] ? $sale['must'] : '~'); ?></td>
                    <td class="text-center"><?php echo (int)$sale['qty']; ?></td>
                    <td class="text-center"><?php echo $sale['date']; ?></td>
                    <td class="text-center">
                      <div class="btn-group">
                        <a href="edit_sale.php?id=<?php echo (int)$sale['id'];?>" class="btn btn-warning btn-xs"  title="Edit" data-toggle="tooltip">
                          <span class="glyphicon glyphicon-edit"></span>
                        </a>
                        <a href="delete_sale.php?id=<?php echo (int)$sale['id'];?>" class="btn btn-danger btn-xs"  title="Delete" data-toggle="tooltip">
                          <span class="glyphicon glyphicon-trash"></span>
                        </a>
                         <a href="gorsale.php?id=<?php echo (int)$sale['id'];?>" class="btn btn-info btn-xs"  title="Raporla" data-toggle="tooltip">
                          <span class="glyphicon glyphicon-print"></span>
                        </a>
                      </div>
                    </td>
                  </tr>
                <?php endforeach;?>
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </div>
    
    <?php include_once('layouts/footer.php'); ?>
    Footer. php dosyasına jquery kodlarını ekledim
    <script>
    $(document).ready(function(){
        $('#must').autocomplete({
            source: "find_customer.php",
            minLength: 1
        });
    });
    </script>
    
    
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.13.1/themes/smoothness/jquery-ui.css">
    <script src="https://code.jquery.com/ui/1.13.1/jquery-ui.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
      <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/js/bootstrap-datepicker.min.js"></script>
      <script type="text/javascript" src="libs/js/functions.js"></script>
    
    <?php
    if (isset($db)) {
      $db->db_disconnect();
    }
    ?>
    son olarakta find_customer adlı dosyayı yazdım
    <?php
    // Veritabanı bağlantısını yapılandırma
    require_once('includes/load.php');
    
    // Otomatik tamamlama için müşteri adı veya ID'sine göre arama yapın
    if (isset($_GET['term'])) {
        $query = $_GET['term'];
        $sql = "SELECT id, must FROM sales WHERE must LIKE '%".$query."%' OR id LIKE '%".$query."%'";
        $result = $db->query($sql);
    
        // Sonuçları JSON formatında döndürme
        $data = array();
        if ($result && $db->num_rows($result) > 0) {
            while ($row = $db->fetch_assoc($result)) {
                $data[] = array(
                    'id' => $row['id'],
                    'value' => $row['must']
                );
            }
        }
        echo json_encode($data);
    }
    ?>
    fakat hala otomatik doldurmuyor lütfen yardım edin.
  • 22-03-2023, 18:43:36
    #2
    Autocomplete olarak arastirin. Javascript ile yapabilirsiniz.

    ornek
    https://jqueryui.com/autocomplete/
  • 23-03-2023, 08:20:12
    #3
    zaten jquery ile yapılmış kodu inceleseydiniz
  • 23-03-2023, 14:04:49
    #4
    find_customer.php den tüm listesini vermeniz lazım
    https://api.jqueryui.com/autocomplete/#option-source
  • 23-03-2023, 17:45:16
    #5
    1# yol:
    3 karakterden fazla bir giriş olduğunda javascript ile bir php dosyasını tetikleyebilir ve SQL Search ile girilen karakterleri aratarak eşleşen sonuçları listeletebilirsiniz.

    Ancak yoğun kullanımda sorun yaşatabilir, çok sık arama yapılmaması gerektiğine dair bir kısıtlamaya gidilebilir.

    2# yol:
    Eğer ki müşterilerinize 200-300 civarı veri listeletiyorsanız Bootstrap datatables gibi framework kullanarak tüm veriyi listeletebilir ve offline search yaptırabilirsiniz.
    Ancak birden binlerce sütunda okuma yaparsanız bu da veritabanını üzecektir.
  • 25-03-2023, 08:48:59
    #6
    cevap veren arkadaşlara çok teşekkür ederim.