ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้

สำหรับผู้ที่ เริ่มต้น Programming - PHP มีอะไร แนะนำ หรือข้อสงสัยต้องบอร์ด นี้ คนที่มีความรู้ แบ่งปันคนอื่นบ้างนะ ปัญหาการเขียนโปรแกรม แบบ OOP Session Cookies php network

Moderators: mindphp, ผู้ดูแลกระดาน

makup
PHP Super Member
PHP Super Member
Posts: 397
Joined: 05/10/2020 10:02 am

ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้

Post by makup »

ก่อนหน้านั้น ได้มีการเพิ่ม listbox เพื่อไว้แสดงข้อมูลออกมาเป็น list , และมีการเพิ่มปุ่มค้นหา ตรงมุมขวาบนของ Colums ท้ายสุด , หลังจากนั้นได้ลองทำการเลือก ข้อมูล สนามบินดอนเมือง ใน listbox ตรงหัว Colums ตรง ชื่อที่ตั้งสนามบิน , แล้วทำการกดปุ่มค้นหาไป
109.jpg

ตัวอย่าง Code จาก File showAirflight.blade.php

Code: Select all

<form class="" method="get" action="/searchAirflight/search">
        <tr>
          <th scope="col">

            <br><br>ลำดับ</br></br></th>
          <th scope="col">
 
    <select name="name" id="name">
      <option selected="selected">---- เลือกทั้งหมด ----</option> 
      @foreach($flight as $flights)
      <option value="{{$flights->id_airport}}" >{{$flights->airport['name']}}</option>
      @endforeach
    </select>

            <br><br>ชื่อที่ตั้งสนามบิน</br></br></th>
          <th scope="col">

            
    <select  name="name_airline" id="name_airline">
      <option selected="selected">---- เลือกทั้งหมด ----</option>
      @foreach($flight as $flights)
      <option value="{{$flights->airline['name_airline']}}">{{$flights->airline['name_airline']}}</option>
      @endforeach
    </select>

          <br><br>ชื่อสายการบิน</br></br></th>
          <th scope="col">

    <select name="path" id="path">
      <option selected="selected">---- เลือกทั้งหมด ----</option>
      @foreach($flight as $flights)
      <option value="{{$flights->path}}" >{{$flights->path}}</option>
      @endforeach
    </select>

            <br><br>เส้นทางการบิน</br></br></th>
          <th scope="col">

          <select name="date" id="date">
            <option selected="selected">---- เลือกทั้งหมด ----</option>
      @foreach($flight as $flights)
      <option value="{{$flights->date}}" >{{$flights->date}}</option>
      @endforeach
    </select>
            <br><br>วันที่</br></br></th>
          <th scope="col">

    <select name="timeout" id="timeout">
            <option selected="selected">---- เลือกทั้งหมด ----</option>
      @foreach($flight as $flights)
      <option value="{{$flights->timeout}}" >{{$flights->timeout}}</option>
      @endforeach
      </select>

          <br><br>เวลาออกเดินทาง</br></br></th>
          <th scope="col">

    <select name="price" id="price">
      <option selected="selected">---- เลือกทั้งหมด ----</option>
      @foreach($flight as $flights)
      <option value="{{$flights->price}}" >{{$flights->price}}</option>
      @endforeach
      </select>

            <br><br>ราคา</br></br></th>
          <th scope="col">

    <select name="model_aircraft" id="model_aircraft">
      <option selected="selected">---- เลือกทั้งหมด ----</option>
      @foreach($flight as $flights)
      <option value="{{$flights->model_aircraft}}" >{{$flights->model_aircraft}}</option>
      @endforeach
      </select>
            <br><br>รุ่นเครื่องบิน</br></br></th>
          <th scope="col">

         
                
            <button type="submit" name="submit" class="btn btn-primary" name="submit">ค้นหา</button>
       
         
            <br><br>แก้ไข</br></br></th>
          <th scope="col">
            <br><br>ลบ</br></br></th>
        </tr>
      </form>
ส่วนตรงนี้คือ Code ของ Controller_show_airfight.php คือ ส่วนของ Backend , เมื่อมีการส่งข้อมูลมาก Form showAirflight.blade.php มันจะส่งค่าไปที่ Function search , เพื่อที่จะทำการค้นหาข้อมูลใน Database

Code: Select all

public function search(Request $request)
    {
          $name = $request->name;                               //รับค่าจาก $request มา , ส่วน 'name' มาจาก ....
                                                                //... Folders resources/views/showAirflight.blade.php ก็คือ ชื่อที่ตั้งสนามบิน

        $flight = Airflight::where('id_airport',"LIKE","%{$name}%")->paginate(2);         //Query ข้อมูลแบบมีเงื่อนไข ใช้ Where , ส่วน 'name' ...
                                                                                    //... คือ colums name จาก ตาราง database , ส่วน "LIKE" ...
                                                                                    //... ถ้าเป็น String(ข้อความ) ให้ระบุเป็น Keyword  ....
                                                                                    //... ส่วน % ให้ค้น ชื่อที่ตั้งสนามบินทั้งหมด ทั้งข้างหน้า และ ข้างหลัง
        return view("showAirflight")
        ->with('flight',$flight)
        ->with('airport',Airport::paginate(2))
        ->with('airline',Airline::paginate(2))
        ;                                               
        
    }
จะมีการแสดงข้อมูลสนามบินดอนเมืองมา เมื่อกดปุ่มค้นหาไปแล้ว , แต่ ติดปัญหาตรงที่ ข้อมูลจะไม่ค้างโชว์แสดงใน listbox หลังจากที่กดปุ่มค้นหาไปแล้ว
110.jpg
เมื่อเราลองดูตรง listbox ปรากฎว่า มันแสดงข้อมูลแค่ค่าเดียว , แต่เราต้องการให้แสดงข้อมูลใน lisbox หลายๆค่า, เพื่อที่จะอยากค้นหาข้อมูลอีกครั้ง
111.jpg
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25892
Joined: 22/09/2008 6:18 pm
Contact:

Re: ติดปัญหาการค้นหาข้อมูล Listbox

Post by mindphp »

ข้อมูลใน List box กับค่าที่ เลือก
แยกส่วนกัน ค่าใน List box ดึงจาก ตาราง ที่เก็บค่านั้นไว้ ส่วนค่าที่เลือก รับมาจาก url หรือ ค่าที่เรา submit จาก form แล้วมาประกอบกัน

ตัวอย่าง การ ทำให้ List box เลือกค่าเดิม ไว้

Code: Select all

<select name="myselect">
@foreach ($options as $key => $value)
    <option value="{{ $key }}"
    @if ($key == old('myselect', $model->option))
        selected="selected"
    @endif
    >{{ $value }}</option>
@endforeach
</select>
โดย ฟังก์ชั่น old() คือค่าจากฟอร์มเก่าที่เราส่งค่ามาหน้านี้
โดย $options คือค่า ที่เราดึงมาจากตาราง ประกอบด้วย ($key) ค่า และ ($value) ชื่อ

หรือใช้อีกรูปแบบ หนึ่ง

Code: Select all

  @foreach ($items as $item)
    <option value="{{ $item->id }}" {{ ( $item->id == $existingRecordId) ? 'selected' : '' }}> {{ $item->name }} </option>
  @endforeach 
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25892
Joined: 22/09/2008 6:18 pm
Contact:

Re: ติดปัญหาการค้นหาข้อมูล Listbox

Post by mindphp »

ส่วนการ ค้นหา

Code: Select all

search(Request $request) 
ไม่ต้องใช้ "LIKE","%{$name}%" เพราะ เราค้นแค่ ค่า id ที่ส่งเข้ามา
ใช้ = ได้เลย
ส่วนถ้าส่ง 0 เข้ามาก็ไม่ต้อง มีเงื่อนไขของ fields นั้นมาคิดในการค้นหา
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
makup
PHP Super Member
PHP Super Member
Posts: 397
Joined: 05/10/2020 10:02 am

Re: ติดปัญหาการค้นหาข้อมูล Listbox

Post by makup »

mindphp wrote: 22/10/2020 8:55 pm ข้อมูลใน List box กับค่าที่ เลือก
แยกส่วนกัน ค่าใน List box ดึงจาก ตาราง ที่เก็บค่านั้นไว้ ส่วนค่าที่เลือก รับมาจาก url หรือ ค่าที่เรา submit จาก form แล้วมาประกอบกัน

ตัวอย่าง การ ทำให้ List box เลือกค่าเดิม ไว้

Code: Select all

<select name="myselect">
@foreach ($options as $key => $value)
    <option value="{{ $key }}"
    @if ($key == old('myselect', $model->option))
        selected="selected"
    @endif
    >{{ $value }}</option>
@endforeach
</select>
โดย ฟังก์ชั่น old() คือค่าจากฟอร์มเก่าที่เราส่งค่ามาหน้านี้
โดย $options คือค่า ที่เราดึงมาจากตาราง ประกอบด้วย ($key) ค่า และ ($value) ชื่อ

หรือใช้อีกรูปแบบ หนึ่ง

Code: Select all

  @foreach ($items as $item)
    <option value="{{ $item->id }}" {{ ( $item->id == $existingRecordId) ? 'selected' : '' }}> {{ $item->name }} </option>
  @endforeach 



ลองวิธีแบบที่ 1 โดยใช้ Function old() , เมื่อทำการเลือก listbox สนามบินสุวรรณภูมิแล้ว , แล้วเลือกปุ่มค้นหา
136-1.jpg
ตัวอย่าง Code :

Code: Select all

 <select name="name" id="name">

      <option value="0" selected="selected">---- เลือกทั้งหมด ----</option>
      <?php $number = 1; ?>
     @foreach($flight as $key => $value)
                  <option value="{{$key}}"                                
                        @if($key == old('name' , $value->id_airport))          
                        selected                                                
                        @endif                                                  
                  >{{$number}}<?php echo ".";?>{{$value->airport['name']}}</option>
      <?php $number++; ?>  
      @endforeach
      
    </select>
ผลปรากฎว่า ไม่พบข้อมูล
136.JPG
ลองวิธีแบบที่ 2 โดยใช้ <option value="{{ $flights->id }}" {{ ( $flights->id == $flights->id_airport) ? 'selected' : '' }}> {{ $flights->airport['name'] }} </option>
เมื่อทำการเลือก listbox สนามบินสุวรรณภูมิแล้ว , แล้วเลือกปุ่มค้นหา
136-1.jpg
ตัวอย่าง Code :

Code: Select all

 <select name="name" id="name">

      <option value="0" selected="selected">---- เลือกทั้งหมด ----</option>
      <?php $number = 1; ?>
     @foreach($flight as $flights)
      <option value="{{ $flights->id }}" {{ ( $flights->id == $flights->id_airport) ? 'selected' : '' }}> {{ $flights->airport['name'] }} </option>

      <?php $number++; ?>  
      @endforeach
      
    </select>
ผลปรากฎว่า เจอข้อมูล ชื่อที่ตั้งสนามบินสุวรรณภูมิ ,แต่ข้อมูลเก่าที่เราเคยเลือกไว้ใน lisbox , มันจะไม่แสดงข้อมูลที่ค้างไว้
137.JPG
ตัวอย่าง Code Controller_show_airflight.php -> Function search()

Code: Select all

 public function search(Request $request , $id)
    {
          $name = $request->name;
          $name_airline = $request->name_airline;
          $path = $request->path;                                  
                                                               
        $flight = Airflight::find($id);
        $flight = Airflight::where('id' , '=' , "{$name}")
        ->orWhere('id' , '=' , "{$name_airline}")
        ->orWhere('id' , '=' , "{$path}")
        ->paginate(2);
      
      


        return view("showAirflight")
        ->with('flight',$flight)
        ->with('airport',Airport::all())
        ->with('airline',Airline::all())
        ;                                               
        
    }
โครงสร้างตาราง airflights
Programming - PHP-1.png
Programming - PHP-1.png (19.05 KiB) Viewed 189 times
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25892
Joined: 22/09/2008 6:18 pm
Contact:

Re: ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้

Post by mindphp »

ข้อมูลใน listbox ต้องเอามาจากตารางชื่อสนามบิน
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
makup
PHP Super Member
PHP Super Member
Posts: 397
Joined: 05/10/2020 10:02 am

Re: ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้

Post by makup »

mindphp wrote: 24/10/2020 7:19 pm ข้อมูลใน listbox ต้องเอามาจากตารางชื่อสนามบิน
ได้ทำการลองใส่ข้อมูลใน listbox ที่เอามาจากตาราง ชื่อสนามบินแล้ว
138.JPG
138.JPG (32.84 KiB) Viewed 172 times

Code: Select all

@foreach($flight as $flights)
<option value="{{$flights->id_airport}}" {{ ( $flights->id_airport == $airport->id ) ? 'selected' : '' }} > {{$airport->name}} </option>
 @endforeach
ผลปรากฎว่า
139.JPG
139.JPG (21.37 KiB) Viewed 172 times
makup
PHP Super Member
PHP Super Member
Posts: 397
Joined: 05/10/2020 10:02 am

Re: ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้

Post by makup »

ได้ลองทำการเปลี่ยน foreach เป็น airport แทน , แล้วลองทำการวนลูปแสดงผลในข้อมูล listbox ดู
140.JPG
140.JPG (31.46 KiB) Viewed 170 times
ตัวอย่าง Code :

Code: Select all

      
  @foreach($flight as $flights)
     <form class="" method="get" action="/searchAirflight/search">
  @endforeach
    
        <tr>
          <th scope="col">ลำดับ</th>
          <th scope="col">
             <select name="name" id="name">

      <option value="0" selected="selected">---- เลือกทั้งหมด ----</option>
      
      @foreach($airport as $airports)
      <option value="{{$flights->id_airport}}" {{ ( $flights->id_airport == $airports->id ) ? 'selected' : '' }}
      > {{$airports->name}} </option>
      @endforeach
     
    </select>
ผลปรากฎว่า ใน listbox มีการแสดงข้อมูล 2 ค่า ตรงตามตารางชื่อที่ตั้งสนามบิน , แล้วทำการเลือก listbox ข้อมูลสนามบินดอนเมือง , แล้วกดปุ่มค้นหาดู
141.jpg
ผลปรากฎว่า มันไปแสดงข้อมูล ชื่อที่ตั้งสนามบินสุวรรณภูมิ
142.jpg
142.jpg (49.69 KiB) Viewed 170 times
ก็เลยลองทำการเลือก listbox สนามบินดอนเมืองอีกรอบ , แล้วกดปุ่มค้นหาอีกครั้ง
142-1.JPG
ผลปรากฎว่า มันก็ยังแสดงข้อมูล สนามบินสุวรรณภูมิ ชื่อเดิมอีกครั้ง
143.JPG
143.JPG (44.51 KiB) Viewed 170 times
User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 25892
Joined: 22/09/2008 6:18 pm
Contact:

Re: ติดปัญหาการค้นหาข้อมูล Listbox ให้เลือกค่าเก่าค้างไว้

Post by mindphp »

List box แต่ละตัวต้อง ใช้ชื่อต่างๆ กัน

Code: Select all

<select name="name" id="name">  
tag สร้าง form ไม่ต้องวน loop
ส่วนของค้นหา ควรมี form เดียว และควรตั้งชื่อ form ด้วย

Code: Select all

      *** 
  @foreach($flight as $flights)
     <form class="" method="get" action="/searchAirflight/search">
  @endforeach

ค่าที่เอามาค้นหา ต้องเอามาจาก form ที่ส่งแบบ get เพื่อไปล้างค่า url ที่ถูกค้นไปก่อนหน้านั้น
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
Post Reply

Return to “Programming - PHP”

Who is online

Users browsing this forum: Google [Bot] and 16 guests