Posts Tagged ‘soạn thảo văn bản’

Magic quotes: gây lỗi nhập dữ liệu vào database


Đôi khi lập trình, một lúc nào đó có thể bạn sẽ gặp phải những lỗi điên người này, có thể một số bạn không biết làm thế nào có thể khắc phục được.
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ảng 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ì trong câu lệnh trên, chúng ta dùng nháy đơn). 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

Mở file php.ini, tìm đến dòng

magic_quotes_gpc = Off

và sửa lại 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

<?php
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ẽ phải dùng cách cuối cùng đó là thay thế nháy đơn thành \’ cho trường hợp trên:

$content = str_replace("'","\'",$content);
insert into news(title, content) values('$title', '$content');