У меня есть несложная проблема ...... которая кажется более сложной, чем должна быть.
У меня есть простая форма, которая используется для добавления контента на сайт. Для некоторых полей необходимо ввести html. Однако, когда вы вводите определенные html-элементы в разные части формы, он решает, что ненавидит вас и выдает запрещенную ошибку 403. Вот форма ниже:
<?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>
У меня есть другие формы, которые следуют этому же шаблону без каких-либо проблем. Чтобы сделать это еще более запутанным, он выдаст эту ошибку только тогда, когда в текстовую область будут добавлены 2 любых html-элемента (он отлично обрабатывает один html-элемент). Текстовые области - это объявления, ключевые слова, зарплаты и вакансии. В других текстовых областях все будет хорошо, но эти 4 - нет. Если я могу сделать это еще более запутанным, если я просто введу текст в эти поля и сохраню его, он запустится без проблем.
Для обработки данных поста, я использую только mysql_real_escape_string () для обработки данных, я не делаю strip_tags (), так как мне нужен html там.
Это странная ошибка apache, которую можно исправить с помощью .htaccess? Есть ли в PHP модуль, который конфликтует с этим?
------- РЕДАКТИРОВАТЬ ЗДЕСЬ ОТВЕТ --------
Бен выдвинул фантастический ответ, который, вероятно, является проблемой, и я не могу ее исправить из-за отсутствия привилегий. Поэтому я создал событие onsmit, исходя из идеи, которую дал мне Гербен, и написал следующий javascript.
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;
}
Затем на приемном конце я сделал str_replace, чтобы заменить # @! вернуться к <и это, по крайней мере, заставило вещь работать. </p>
Я на коне .... хяа!
Спасибо за вашу помощь. :)