10/10/2018, 10:25

box select thành phố - quận huyện [php + mysql]

db mình gồm có 2 bảng là thongtin và noidung, trong đó các cột trong bảng:
thongtin: id, thanhpho, quan.
noidung : idtp, idq, noidung.
khi mình tạo form nhập liệu thì có phần select thành phố và quận/huyện tương ứng, bằng cách sử dụng javascript sau:
Code:
<script type="text/javascript">
var states = new Array();

states['1'] = new Array('Quận 1','Quận 2','Quận 3');
states['2'] = new Array('Quận 4','Quận 5','Quận 6');

function setStates() {
  cntrySel = document.getElementById('country');
  stateList = states[cntrySel.value];
  changeSelect('state', stateList, stateList);
  setCities();
}


function changeSelect(fieldID, newOptions, newValues) {
  selectField = document.getElementById(fieldID);
  selectField.options.length = 0;
  for (i=0; i<newOptions.length; i++) {
    selectField.options[selectField.length] = new Option(newOptions[i], newValues[i]);
  }
}


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(function() {
  setStates();
});
</script>
với ý tưởng dùng $_POST để lấy id của thanhpho và quan từ bảng thongtin để ghi vào bảng noidung, mình code:
Code:
					<select name="country" id="country" onchange="setStates();">
<?php
$query_thongtin=mysql_query('select * from thongtin') or die (mysql_error());
while($row_thongtin=mysql_fetch_array($query_thongtin))
{
echo '<option value="'.$row_thongtin['id'].'">'.$row_thongtin['thanhpho'].'</option>';
}
?>
					</select>

					<select name="state" id="state">
						<option value="1">Quận 1</option>
						<option value="2">Quận 2</option>
						<option value="3">Quận 3</option>
					</select>
xem như việc lấy id của thành phố đã xong, nhưng công việc lấy id của quận/huyện thì mình bế tắc hoàn toàn. mong các bác cho ý kiến! thanks!
hoặc có thể có cách khác giải quyết vấn đề mong mọi người chỉ dùm.
fotech_nd viết 12:34 ngày 10/10/2018
Nên dùng ajax để retrieve quận huyện khi select box thành phố có onchange. Kách làm chắc bác biết rùi.
KuJangSung viết 12:30 ngày 10/10/2018
e mới làm wen thôi! mong bác nói rõ hơn đc ko? hay ví dụ cụ thể, cám ơn nhiều
s.code viết 12:34 ngày 10/10/2018
http://sangiaodich.vn/ => đây là trang web đầu đời của mình cách đây 4 năm.

Nó có sử lý chức năng như bạn cần. Chịu khó đọc code đi nhé.
KuJangSung viết 12:30 ngày 10/10/2018
để tìm kiếm tin theo tp, quận huyện như của bác thì chắc bác cũng phải gán id tp, quận huyện cho tin rao vặt rồi?
nhưng e vẫn ko biết cách trong lúc post tin ta có thể gán id quận/huyện cho tin đc?
s.code viết 12:31 ngày 10/10/2018
Thực tế trên đây là mình làm leo dạnh menu đa cấp. Cho họ chọn tỉnh/thành => quận huyện => có thể đến xã/phường

Thì cuối cùng chỉ lưu 1 cái ID của thằng cuối cùng. ví dụ ID của xã phường. Và lưu như 1 ID category bình thường.

Sau này dựa vào ID này ta sẽ biết được cả quận huyện và tỉnh thành.
thuyduongcd viết 12:38 ngày 10/10/2018
Muốn lưu luôn cả nhánh TP -> quận -> phường cũng không khó

Ví dụ, TP có id XX, quận của TP này có id là YY, phường là ZZ
Khi đó ta lưu vào DB id là XXYYZZ. Khi muốn tìm sản phầm của quận này ta tìm những sp có id = XXYY*, còn muốn tìm sp trong TP này ta tìm sp có id=XX*
Cách này có lợi thế là khoanh vùng chi tiết theo từng cấp độ
s.code viết 12:35 ngày 10/10/2018
Hơi thừa và dễ mất toàn vẹn dữ liệu. Chỉ cần ID của phường ta sẽ biết ID quận/huyện và biết ID quận huyện ta sẽ biết ID tỉnh/thành.
KuJangSung viết 12:27 ngày 10/10/2018
thế db của bác thiết kế như thế nào? dựa vào db chắc sẽ dễ hình dung hơn nữa.
mà bác làm sao để lấy id của cấp 2 (quận/huyện)?
như javascript e đang dùng thì khi cấp 1 (tỉnh/tp) thay đổi thì cấp 2 (quận/huyện) thay đổi theo, khi đó giá trị của nó lấy từ biến $_POST chì là chuỗi tương tự như quận 1, quận 2, quận ... mà không thể lấy theo số thứ tự?
cám ơn bác nhiều!
s.code viết 12:39 ngày 10/10/2018
Nếu thiết kế đúng theo mô hình E/R thì cần 3 table như sau:

bảng 1:

+ MaTinh
+ TenTinh

Bang 2:

+ MaHuyen
+ TenHuyen
+ MaTinh

Bang 3:

+ MaPhuong
+ TenPhuong
+ MaHuyen

Bảng 1 quan hệ 1->nhiều với bảng 2 và bảng 2 quan hệ 1 nhiều với bảng 3

Nhưng tôi làm thì gộp chung vào 1 bảng dạng category

+ ID
+ Name
+ parentID

Trường hợp 1 như vậy thì fix cứng chỉ có 3 loại. Còn trường hợp 2 có thể n cấp. Khi viết code hơi trừu tượng chút nhưng được cái rút ngắn code.
An viết 10:30 ngày 26/07/2022

bạn s.code ơi nếu làm theo cách 2 thì phải viết theo mấy cái api ạ

 

Bài liên quan
0