2010-06-20 41 views
6

Khi tôi sử dụng PHP để đặt giá trị của phần tử nhập biểu mẫu HTML, nó hoạt động tốt với điều kiện tôi không có bất kỳ dấu cách nào trong dữ liệu.Cách đặt thuộc tính giá trị HTML (có dấu cách)

<input type="text" name="username" 
<?php echo (isset($_POST['username'])) ? "value = ".$_POST["username"] : "value = \"\""; ?> /> 

Nếu tôi nhập "Jonathan" làm tên người dùng, nó được lặp lại với tôi như mong đợi. Tuy nhiên, nếu tôi nhập "Big Ted", tôi chỉ nhận được "Big" lặp lại khi tôi gửi biểu mẫu.

Lưu ý rằng biến số $_POST["Username"] là chính xác; khi tôi echo nó bằng cách sử dụng PHP, nó được thiết lập để "Big Ted".

Trả lời

17

Trích dẫn. Nếu không, không gian sẽ chỉ trở thành một dấu tách thuộc tính và mọi thứ sau khi dấu cách sẽ được xem như là các thuộc tính phần tử. Trang Rightclick trong trình duyệt web và nguồn xem. Nó không nên trông như thế này (xem thêm màu sắc nổi bật cú pháp):

<input value=Big Ted> 

mà là này

<input value="Big Ted"> 

Chưa kể rằng đây vẫn sẽ phá vỡ khi một người nào đó có một trích dẫn trong tên của mình (và của bạn do đó mã nhạy cảm với XSSattacks). Sử dụng htmlspecialchars().

Kickoff dụ:

<input value="<?php echo (isset($_POST['username']) ? htmlspecialchars($_POST['username']) : ''); ?>"> 
+1

XSS không có gì để làm ở đây. Mã hóa theo yêu cầu của tiêu chuẩn. Ngay cả khi bạn chỉnh sửa HTML đầy đủ trong miền quản trị, bạn phải nhập các giá trị htmlencode, bao gồm cả nội dung văn bản. –

+0

@Col: tôi đã nói rằng XSS liên quan đến vấn đề cụ thể ở đâu? :) – BalusC

+0

ah vâng tôi đã bỏ qua nó. Tập trung vào từ khóa, bạn biết :) –

1
<input type="text" name="username" 
<?php echo (isset($_POST['username'])) ? "value = '".$_POST["username"]' : "value = ''"; ?> /> 

Bạn phải bọc kết quả có dấu ngoặc kép để trình duyệt có thể biết nội dung của đầu vào là gì.

+0

thêm báo giá để tên của bạn và bạn sẽ kết thúc với cùng một vấn đề :) –

1
<input type="text" name="username" 
<?php echo (isset($_POST['username'])) ? ('value = "'.$_POST["username"].'"') : "value = \"\""; ?> /> 

Lưu ý cách sử dụng báo giá của bạn.

+0

thêm báo giá để tên và bạn của bạn' Sẽ kết thúc với cùng một vấn đề :) –

+0

@Col Shrapnel - Đây là một câu hỏi rất tầm thường và tôi quá quen với các khung làm công việc để tôi bận tâm tư vấn, nhưng chắc chắn ... –

+0

Tại sao không mang theo một ví dụ với việc sử dụng khung yêu thích của bạn sau đó? –

1

Như bạn thấy nó không PHP5 hoặc thậm chí PHP câu hỏi nào cả.
Kiến thức HTML cơ bản là bắt buộc đối với người muốn trở thành người dùng PHP.

Và với việc sử dụng các mẫu có vẻ cách gọn gàng hơn:

Đang tải mã phần dữ liệu:

$username = ""; 
if isset($_POST['username'])) $username = htmlspecialchars($_POST["username"]); 

Và mẫu mã:

<input type="text" name="username" value="<?=$username?>"> 

Nếu bạn chia mã của bạn để 2 phần nó trở thành cách dễ dàng hơn và có thể đọc được.

+2

Nó không phải là một thực hành tốt để sử dụng thẻ mở ngắn kể từ khi máy chủ có thể có họ bị vô hiệu hóa mặc dù, tôi sẽ khuyên chống lại giới thiệu rằng để OP. –

+1

@meder cũng chỉ bật tính năng này. Không phải là một thỏa thuận lớn. Đó là những gì thiết lập cấu hình cho. –

+2

Tại sao bạn? Đó là một thực tế xấu để sử dụng nó ở nơi đầu tiên. Điều đó và tôi sẽ không bao giờ sử dụng PHP nếu tôi quản lý máy chủ. –

1

chỉ cần đảm bảo bạn đặt thư đại tràng sau khi lĩnh vực này ví dụ:

<option value="'.$row['name'].'"> 
Các vấn đề liên quan