10/10/2018, 10:23

xây dựng trang tìm kiếm

Em đang làm form tìm kiếm của trang web bán vé máy bay.
Cho em hỏi câu lệnh này của em có j sai ko ạ? :|

$query_lichbay = "SELECT lichbay.mahanghk, lichbay.madddi, lichbay.maddden, lichbay.ngaydi FROM lichbay WHERE lichbay.mahanghk = {$_POST['hanghk']} AND lichbay.madddi = {$_POST['noidi']} AND lichbay.maddden = {$_POST['noiden']} AND lichbay.ngaydi = $date";

Câu lệnh trên là ở trang kết quả tìm kiếm.
Nó cứ báo lỗi này là sao?

MySQL Error#: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '['hanghk']} AND lichbay.madddi = {$_POST['noidi']} AND lichbay.maddden = {$_POS' at line 1

Các bác xem giúp em nhá! Thanks các bác!!!
nnanh01 viết 12:31 ngày 10/10/2018
Được gửi bởi jecssica
Em đang làm form tìm kiếm của trang web bán vé máy bay.
Cho em hỏi câu lệnh này của em có j sai ko ạ? :|

$query_lichbay = "SELECT lichbay.mahanghk, lichbay.madddi, lichbay.maddden, lichbay.ngaydi FROM lichbay WHERE lichbay.mahanghk = {$_POST['hanghk']} AND lichbay.madddi = {$_POST['noidi']} AND lichbay.maddden = {$_POST['noiden']} AND lichbay.ngaydi = $date";
Bạn nên bỏ dấu ' và ' trong biến $_POST đi, nếu không thì bạn nên nối chuỗi như sau:
Code:
"SELECT lichbay.mahanghk, lichbay.madddi, lichbay.maddden, lichbay.ngaydi FROM lichbay WHERE lichbay.mahanghk = ".$_POST['hanghk']." AND  lichbay.madddi = ".$_POST['noidi']." AND lichbay.maddden = ".$_POST['noiden']." AND lichbay.ngaydi = $date"
Mình không hiểu là bạn để dấu { và } để làm gì.

Chú ý: nếu so sánh là chuỗi thì chuỗi của bạn phải nằm trong dấu ' và ' (trong tr][ngf hợp của bạn).

Hơn nữa ngày của bạn định dạng ra sao (ngày nhập vào và ngày trong CSDL định dạng có giống nhau không).

bạn nên xử lý dữ liệu nhập vào trước khi đưa vào câu sql, không nên đem ngay dữ liệu post lên vào đó.

Thân!
jecssica viết 12:29 ngày 10/10/2018
Ngày trong CSDL của mình định dạng Y/m/d. Ngày từ form nhập vào của mình là 3 combo box: tháng, ngày, năm. Mình đã xử lý ngày bằng câu lệnh:

$date = $_POST['year'].'-'.$_POST['month'].'-'.$_POST['day'];

Mình cũng sửa câu SQL như của bạn rồi, giờ thì nó báo lỗi:

MySQL Error#: 1054
Unknown column '$date' in 'where clause'.

Mình nghĩ câu lệnh xử lý ngày của mình đúng rồi mà. Hix

[=========> Bổ sung bài viết <=========]

hihi, mình vừa sửa đc rồi, ngố thật, Thanks bạn nha!!!
nnanh01 viết 12:30 ngày 10/10/2018
Được gửi bởi jecssica
hihi, mình vừa sửa đc rồi, ngố thật, Thanks bạn nha!!!
Ngố là chuyện thường của dân lập trình mà :p
jecssica viết 12:33 ngày 10/10/2018
Hix, bạn gì ơi, ko hiểu sao câu lệnh thì đúng rồi mà nó cứ báo:

Unknown column 'VNA' in 'where clause'.

mà rõ ràng là trong CSDL có hẳn hoi. VNA là mã hãng hàng không trong bảng lịch bay. Các biến, tên đều đúng mà...
thuyduongcd viết 12:37 ngày 10/10/2018
Cột hãng hàng không có kiểu chuỗi, nên bao nó lại bằng dấu '', nếu không nó sẽ hiểu VNA là tên field chứ không phải chuỗi VNA
Code:
"SELECT lichbay.mahanghk, lichbay.madddi, lichbay.maddden, lichbay.ngaydi FROM lichbay WHERE lichbay.mahanghk = '".$_POST['hanghk']."' AND  lichbay.madddi = ".$_POST['noidi']." AND lichbay.maddden = ".$_POST['noiden']." AND lichbay.ngaydi = $date"
Thử echo cáo câu sql của bạn sẽ là ... WHERE lichbay.mahanghk=VNA AND ...
=> điều kiện cột mahanghk= cột VNA

Đúng ra phải là ... WHERE lichbay.mahanghk='VNA' AND ...
jecssica viết 12:32 ngày 10/10/2018
ah, ra vậy...hix...mấy cái dấu '' với "" nhiều lúc mình không biết dùng sao cho đúng. .
thuyduongcd viết 12:32 ngày 10/10/2018
Thông thường khi gặp những lỗi này, bạn hãy echo cái câu query ra mà xem
jecssica viết 12:32 ngày 10/10/2018
ok thanks bác nhiều!! ^^
1024KB viết 12:35 ngày 10/10/2018
Nên đặt biến cho giá trị $_POST. VD như:
PHP Code:
$hanghk $_POST***91;'hanghk'***93;;
//sau đó mới cho vào lệnh sql
$sql "SELECT * FROM lichbay WHERE lichbay.mahanghk = '".$hanghk."'";
//thực hiện như bình thường 
Đặt như bạn dễ bị các dấu '', "" trong SQL.
Bài liên quan
0