我有一个非复杂的问题......它似乎比它应该更复杂。提交简单的PHP表单时出现禁止的错误
我有一个简单的表单,用于向网站添加内容。一些字段需要输入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中是否存在与此冲突的模块?
-------编辑下面是答案--------
本带来了一个梦幻般的答案,也可能是问题,我无法修复它,因为缺乏的特权。所以我从Gerben给我的想法创建了一个onsubmit事件,并写了下面的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来代替#@!回到<,至少让事情奏效。
我在一匹马.... hyaa!
感谢您的帮助。 :)
你也可以发布负责处理提交的代码吗?这可能是验证php生成的重定向或错误处理程序问题。 – 2012-01-11 18:52:13
当提交表单时,网址看起来有什么不同,就像表单页面本身的url一样? – Gerben 2012-01-11 19:07:03
@BenD真的没有任何代码负责处理提交。这是一个简单的foreach语句,用于运行$ _POST变量并在其上引发一个mysql_real_escape_string。没有任何javascript验证。您只需点击提交,即可加载相同的页面,它只是属于一个switch语句,应该将其置于该区域以更新信息。它适用于网站其他部分的其他所有内容(相同的foreach语句),当涉及多个html元素时,不在此处。 – n0nag0n 2012-01-11 19:38:32