2009-04-04 37 views
6

Tôi có một hộp văn bản trên trang web của mình và tôi cần lưu trữ bất cứ điều gì người dùng nhập vào cơ sở dữ liệu của tôi và truy xuất nó sau. Tôi cần lưu trữ chính xác như người dùng đã nhập, bao gồm các ký tự đặc biệt, trả về vận chuyển, v.v.PHP - Lưu trữ văn bản trong cơ sở dữ liệu MySQL

Tôi nên sử dụng quy trình nào trong PHP để lưu trữ trong trường cơ sở dữ liệu của tôi (trường 'văn bản')? Tôi có nên sử dụng html_encode của PHP hay bất cứ thứ gì như thế không?

Thankyou.

Chỉnh sửa: Tôi cũng cần lưu trữ định dạng đúng các tab và nhiều không gian.

Trả lời

4

Bạn không nên mã hóa html dữ liệu khi ghi dữ liệu vào kho dữ liệu - theo cách đó, bạn có thể sử dụng dữ liệu của mình cho một thứ khác (ví dụ: email, tài liệu PDF, v.v.). Như Assaf đã nói: bắt buộc phải tránh việc tiêm SQL bằng cách thoát khỏi đầu vào hoặc sử dụng các truy vấn chèn tham số.

Bạn nên, không, giả sử, phải tuy nhiên mã hóa html dữ liệu của bạn khi hiển thị nó trên trang HTML! Điều đó sẽ làm cho mã HTML hoặc Javascript nguy hiểm vô dụng khi các thẻ HTML có trong dữ liệu sẽ không được trình duyệt nhận dạng dưới dạng thẻ HTML nữa.

Quá trình này phức tạp hơn một chút khi bạn cho phép người dùng đăng dữ liệu bằng thẻ HTML bên trong. Sau đó bạn phải bỏ qua các mã hóa đầu ra có lợi cho một đầu vào-sanitizing mà có thể được tùy ý phức tạp tùy thuộc vào nhu cầu của bạn (cho phép các thẻ ví dụ).

3

Bạn không để mã hóa để lưu trữ trong mysql.

Đảm bảo bạn sử dụng lệnh chèn tham số, để tránh chèn SQL.

+0

ý tưởng tuyệt vời .. cảm ơn bạn rất nhiều .. –

3

Sau đây nên làm việc:

if (get_magic_quotes_gpc()) { 
    $content = stripslashes($content); 
} 
$content = mysql_real_escape_string($content); 

Nếu cột của bạn là utf8, bạn không nên có vấn đề với các nhân vật đặc biệt. Một khi bạn đã định dạng nội dung một cách chính xác, bạn có thể nạp nó vào mysql bằng cách sử dụng các phương thức chèn tiêu chuẩn của bạn.

5

Sử dụng mysql_real_escape_string():

$safetext = mysql_real_escape_string($_POST['text']); 
$query = "INSERT INTO my_table (`my_field`) VALUES ('$safetext')"; 
mysql_query($query); 

Điều đó sẽ làm việc.

1

Để lưu trữ chính xác văn bản người dùng ngoài định dạng, tất cả những gì bạn phải làm là chuyển đổi tất cả các dòng mới thành ngắt bằng cách sử dụng nl2br($inputtext). Làm điều này sau khi lọc đầu vào.

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