Tôi có vấn đề không phức tạp ...... dường như phức tạp hơn mức cần thiết.Lỗi bị cấm khi gửi biểu mẫu PHP đơn giản
Tôi có một biểu mẫu đơn giản được sử dụng để thêm nội dung vào trang web. Một số lĩnh vực cần phải có html nhập vào chúng. Tuy nhiên, khi bạn nhập một số phần tử html vào các phần khác nhau của biểu mẫu, nó quyết định rằng nó ghét bạn và ném một lỗi 403 bị cấm. Đây là mẫu bên dưới:
<?php
$data = f("SELECT * FROM table WHERE id = '{$_GET['id']}'");
?>
<form action="<?=$_SERVER['PHP_SELF']?>?id=<?=$_GET['id']?>&action=edit" method="post">
<table cellspacing="0" cellpadding="2" border="0">
<tr>
<td><b>Title:</b></td>
<td><input type="text" name="title" style="width: 300px;" value="<?=$data['title']?>" /></td>
</tr>
<tr>
<td><b>URL:</b></td>
<td><input type="text" name="url" style="width: 300px;" value="<?=$data['url']?>" /></td>
</tr>
<tr>
<td><b>Sub-Category:</b></td>
<td>
<select name="subCategoryId">
<option value=""></option>
<option value="1">A</option>
<option value="2">B</option>
</select>
</td>
</tr>
<tr>
<td><b>Short Description:</b></td>
<td><textarea name="shortDescription" rows="6" cols="60"><?=$data['shortDescription']?></textarea></td>
</tr>
<tr>
<td><b>Template:</b></td>
<td><textarea name="template" rows="6" cols="60"><?=$data['template']?></textarea></td>
</tr>
<tr>
<td><b>Ads:</b></td>
<td><textarea name="ads" rows="6" cols="60"><?=$data['ads']?></textarea></td>
</tr>
<tr>
<td><b>Keywords:</b></td>
<td><textarea name="keywords" rows="6" cols="60"><?=$data['keywords']?></textarea></td>
</tr>
<tr>
<td><b>Questions:</b></td>
<td><textarea name="questions" rows="6" cols="60"><?=$data['questions']?></textarea></td>
</tr>
<tr>
<td><b>Salary:</b></td>
<td><textarea name="salary" rows="6" cols="60"><?=$data['salary']?></textarea></td>
</tr>
<tr>
<td><b>Jobs:</b></td>
<td><textarea name="jobs" rows="6" cols="60"><?=$data['jobs']?></textarea></td>
</tr>
<tr>
<td><b>Meta Description:</b></td>
<td><input type="text" name="metaDescription" style="width: 300px;" value="<?=$data['metaDescription']?>" /></td>
</tr>
<tr>
<td><b>Meta Keywords:</b></td>
<td><input type="text" name="metaKeywords" style="width: 300px;" value="<?=$data['metaKeywords']?>" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="submit" value="Edit Job" /></td>
</tr>
</table>
</form>
Tôi có các biểu mẫu khác theo cùng mẫu này mà không gặp bất kỳ sự cố nào. Để tiếp tục làm cho điều này thậm chí còn khó hiểu hơn, nó sẽ chỉ ném lỗi này khi bất kỳ 2 phần tử html nào được cung cấp trong vùng văn bản (nó xử lý một phần tử html tốt). Các khu vực văn bản là quảng cáo, từ khóa, tiền lương và công việc. Các khu vực văn bản khác sẽ chỉ tốt, nhưng 4 sẽ không. Nếu tôi có thể làm cho điều này một chút bối rối, nếu tôi đơn giản nhập vào văn bản trong các lĩnh vực và lưu nó, nó chạy mà không có một vấn đề.
Để xử lý dữ liệu bài đăng, tôi chỉ sử dụng mysql_real_escape_string() để xử lý dữ liệu, tôi không làm một strip_tags() khi tôi cần html trong đó.
Đây có phải là lỗi apache lạ có thể được sửa bằng .htaccess không? Có một mô-đun trong PHP đang xung đột với điều này?
------- EDIT ĐÂY LÀ ĐÁP --------
Ben đưa ra một câu trả lời tuyệt vời mà có lẽ là vấn đề và tôi không thể sửa chữa nó vì thiếu các đặc quyền . Vì vậy, tôi tạo ra một sự kiện onsubmit từ một ý tưởng mà Gerben đã cho tôi và viết javascript sau đây.
function awesome() {
elements = document.forms[0].elements;
for(var i = 0; i < elements.length; i++) {
switch(elements[i].name) {
case "ads":
case "shortDescription":
case "template":
case "questions":
case "salary":
case "jobs":
str = elements[i].value;
elements[i].value = str.replace(/</g,"#@!");
break;
}
}
return true;
}
Sau đó, khi nhận được, tôi đã tạo str_replace để thay thế # @! quay trở lại < và ít nhất là làm công việc.
Tôi đang ở trên ngựa .... hyaa!
Cảm ơn sự giúp đỡ của bạn. :)
Bạn cũng có thể đăng mã có trách nhiệm xử lý việc gửi không? Đây có thể là một sự chuyển hướng hoặc lỗi xử lý lỗi được tạo ra bởi php xác thực. –
Url có khác nhau khi gửi biểu mẫu, như được cho là url của trang biểu mẫu không? – Gerben
@BenD Thực sự không có bất kỳ mã nào chịu trách nhiệm xử lý việc gửi. Đó là một tuyên bố foreach đơn giản để chạy qua các $ _POST vars và ném một mysql_real_escape_string vào chúng. Không có xác thực javascript nào. Bạn chỉ cần nhấn gửi, nó tải cùng một trang, nó chỉ rơi vào một tuyên bố chuyển đổi mà nên hạ cánh nó trong khu vực để cập nhật thông tin. Nó hoạt động cho tất cả mọi thứ khác (cùng tuyên bố foreach) trên các phần khác của trang web, chỉ cần không ở đây khi nhiều yếu tố html có liên quan. – n0nag0n