Magic_quotes_gpc là 1 giá trị tùy chọn bật chế độ tự động thêm ký
tự escape vào trước các ký tự đặc biệt như: nháy đơn ('), nháy kép ("),
dấu backslash (\) khi nó đc POST hoặc GET từ client lên, mục đích là để
tránh bị lỗi SQL Injection. Nó hoạt động tương tự như hàm addslashes().
Ví dụ:
Khi ta truy vấn câu lệnh SELECT
Nếu như $id có chứa dấu nháy đơn, nháy kép hay dấu (\), thì kết quả sẽ là:
Tuy nhiên, nó cũng gây không ít phiền phức cho người dùng
Thường khi insert một mẩu tin vào database, chúng ta dùng câu lệnh sau:
Nếu host của bạn có bật Magic quotes lên thì vấn đề đã được giải quyết, magic quotes sẽ tự tìm đến những dẫu nháy đơn/kép để vô hiệu hóa chúng.
Nhưng nếu host không bật Magic quotes, lúc này có thể bạn sẽ không biết xác định lỗi do mình code sai hay do server không hỗ trợ …
Nếu trên Localhost, chúng ta có thể khắc phục bằng cách: vào thư mục chứa webserver của bạn, tìm đến thư mục php chứa file php.ini
Nếu dùng xampp thì đường dẫn file php.ini là: xampp\php\php.ini
Nếu dùng AppSer thì vào Start->AppSer->Configuration Server->PHP Edit the php.ini Configuration File
Mở file php.ini, tìm đến dòng:
Nhưng nếu trên host server dịch vụ, bạn không thể chỉnh sửa được file này thì sao?
Chúng ta có thể dùng câu lệnh sau để kiểm tra tình trạng của Magic quotes trên host server
Như vậy, trước khi nhập vào database, chúng ta nên kiểm tra xem magic quotes đã được bật hay chưa? Nếu chưa bật thì chúng ta sẽ dùng hàm addslashes hoặc thay thế nháy đơn(') thành (\’) cho trường hợp trên:
Chú ý: Chức năng này bị remove từ phiên bản PHP 5.4.0
Ví dụ:
Khi ta truy vấn câu lệnh SELECT
$select = " SELECT * FROM tin WHERE idTin = '".$id."'"; $qr = mysql_query($select);
Nếu như $id có chứa dấu nháy đơn, nháy kép hay dấu (\), thì kết quả sẽ là:
SELECT * FROM tin WHERE idLT= '1\'' // $id = 1' nháy đơn SELECT * FROM tin WHERE idLT= '1\"' // $id = 1" nháy kép SELECT * FROM tin WHERE idLT= '1\\' // $id = 1\ dấu backslash
Tuy nhiên, nó cũng gây không ít phiền phức cho người dùng
Thường khi insert một mẩu tin vào database, chúng ta dùng câu lệnh sau:
insert into news(title, content) values('$title', '$content')Và sử dụng một số trình soạn thảo văn bản cho web như: Ckeditor, Wysiwyg, TinyMCE, … Nhưng vì là một bản tin tức nên nội dung của nó có thể sẽ chứa nhiều ký tự, đặc biệt là những ký tự có dấu nháy đơn ' (và vì trong câu lệnh trên, chúng ta cũng dùng nháy đơn). Và như thế, code của chúng ta bị lỗi và không thể nhập dữ liệu vào database được!
Nếu host của bạn có bật Magic quotes lên thì vấn đề đã được giải quyết, magic quotes sẽ tự tìm đến những dẫu nháy đơn/kép để vô hiệu hóa chúng.
Nhưng nếu host không bật Magic quotes, lúc này có thể bạn sẽ không biết xác định lỗi do mình code sai hay do server không hỗ trợ …
Nếu trên Localhost, chúng ta có thể khắc phục bằng cách: vào thư mục chứa webserver của bạn, tìm đến thư mục php chứa file php.ini
Nếu dùng xampp thì đường dẫn file php.ini là: xampp\php\php.ini
Nếu dùng AppSer thì vào Start->AppSer->Configuration Server->PHP Edit the php.ini Configuration File
Mở file php.ini, tìm đến dòng:
magic_quotes_gpc = Offvà sửa thành
magic_quotes_gpc = On
Nhưng nếu trên host server dịch vụ, bạn không thể chỉnh sửa được file này thì sao?
Chúng ta có thể dùng câu lệnh sau để kiểm tra tình trạng của Magic quotes trên host server
echo "Magic quotes is "; if (get_magic_quotes_gpc()) { echo "enabled."; } else { echo "disabled"; }
Như vậy, trước khi nhập vào database, chúng ta nên kiểm tra xem magic quotes đã được bật hay chưa? Nếu chưa bật thì chúng ta sẽ dùng hàm addslashes hoặc thay thế nháy đơn(') thành (\’) cho trường hợp trên:
$content = addslashes($content); hoặc $content= str_replace("'","\'",$content);
Chú ý: Chức năng này bị remove từ phiên bản PHP 5.4.0
Nguồn: http://www.zend.vn
Không có nhận xét nào:
Đăng nhận xét