2011-12-25 38 views
17

tôi muốn viết lại quy tắc cho sản phẩm của mình.viết lại url cho tên sản phẩm

tôi muốn sử dụng id và tên trong url cách nhau bởi một dấu gạch ngang như thế này:

123-tên có nghĩa là sản phẩm id = 123 và name = tên

như vậy trong php của tôi tôi có thể nhận được $ _GET [id] rồi truy vấn cơ sở dữ liệu của mình bằng id này như thế này:

$sql = "SELECT * from Products Where productid = " . $_GET[id]; 

đây những gì tôi có:

0.123.
RewriteEngine On 
RewriteRule ^products/([0-9+])\-([a-z]+)/?$ products.php?id=$2 [NC,L] 

nhưng khi tôi đặt url này làm url, tôi nhận được 404

tại sao?

Trả lời

17

Đầu tiên: bạn có lỗi cú pháp. [0-9+] là một lớp nhân vật có thể khớp với (i) các chữ số trong phạm vi 0 đến 9 hoặc (ii) một dấu hiệu +. Để sử dụng + làm công cụ định lượng (như dự định), hãy di chuyển + sau ], như sau: ([0-9]+).

Thứ hai: Bạn đang sử dụng $2 trong mặt hàng của bạn là tên sản phẩm. Nếu bạn muốn sử dụng ID, bạn phải sử dụng $1.

Đây là những gì bạn cần sử dụng:

RewriteEngine On 
RewriteRule ^products/([0-9]+)\-([a-z0-9_\-]+)/?$ products.php?product_id=$1 [NC,L,QSA] 

tôi thêm vào trong số sản phẩm, dấu gạch ngang và gạch chân trong trường hợp bạn cần đến nó một ngày nào đó.

Thứ ba: Bạn cần phải nhận thức sql injections, kịch bản của bạn là không an toàn. Bạn có thể sửa lỗi này bằng cách sử dụng mysql_real_escape_string.

+0

cảm ơn bạn rất nhiều vì thông tin này. – natalia

+0

bạn rất hoan nghênh –

0

Tôi nghĩ bạn nên sử dụng products.php? Id = $ 1 vì đối số đầu tiên phù hợp là id sản phẩm.

Các vấn đề liên quan