我有一個非複雜的問題......它似乎比它應該更復雜。提交簡單的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