मेरे पास कोई जटिल समस्या नहीं है ...... जो कि यह होना चाहिए उससे अधिक जटिल होना प्रतीत होता है।सरल PHP फॉर्म सबमिट करने पर निषिद्ध त्रुटि
मेरे पास एक साधारण रूप है जिसका उपयोग वेबसाइट पर सामग्री जोड़ने के लिए किया जाता है। कुछ क्षेत्रों में एचटीएमएल को इनपुट करने की आवश्यकता है। हालांकि, जब आप फॉर्म के विभिन्न हिस्सों में कुछ 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 तत्व को ठीक से संभालती है)। टेक्स्ट क्षेत्र विज्ञापन, कीवर्ड, वेतन और नौकरियां हैं। अन्य टेक्स्ट एरिया इसे ठीक लगेगा, लेकिन ये 4 नहीं होंगे। अगर मैं इसे थोड़ा और भ्रमित कर सकता हूं, अगर मैं उन क्षेत्रों में पाठ में सरल प्रवेश करता हूं और इसे सहेजता हूं, तो यह बिना किसी समस्या के चलता है।
पोस्ट डेटा को संभालने के लिए, मैं डेटा को संभालने के लिए केवल mysql_real_escape_string() का उपयोग करता हूं, मैं स्ट्रिप_टैग() नहीं करता क्योंकि मुझे वहां HTML की आवश्यकता है।
क्या यह एक अजीब अपाचे त्रुटि है जिसे .htaccess के साथ ठीक किया जा सकता है? क्या PHP में कोई मॉड्यूल है जो इसके साथ संघर्ष कर रहा है?
------- संपादित करें यहाँ जवाब है --------
बेन एक शानदार जवाब है कि शायद समस्या है लाया है और मैं इसे विशेषाधिकारों की कमी की वजह से ठीक नहीं कर सकते । इसलिए मैंने एक विचार से एक ऑनसबमिट कार्यक्रम बनाया जिसने गेर्बेन ने मुझे दिया और निम्नलिखित जावास्क्रिप्ट लिखा।
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 किया था! < पर वापस आ गया और कम से कम इस काम को काम किया।
मैं घोड़े पर हूं .... हाया!
आपकी सभी मदद के लिए धन्यवाद। :)
क्या आप जमा कोड को संसाधित करने के प्रभारी कोड भी पोस्ट कर सकते हैं? यह मान्य php द्वारा उत्पन्न एक रीडायरेक्ट या त्रुटि-हैंडलर समस्या हो सकती है। –
क्या प्रपत्र सबमिट करते समय यूआरएल अलग दिखता है, जैसा प्रपत्र पृष्ठ के यूआरएल के रूप में माना जाता है? – Gerben
@BenD वास्तव में सबमिशन को संसाधित करने के प्रभारी कोई कोड नहीं है। यह $ _POST युद्धों के माध्यम से चलाने के लिए एक सरल foreach स्टेटमेंट है और उन पर एक mysql_real_escape_string फेंक दें। कोई जावास्क्रिप्ट सत्यापन नहीं है। आप बस सबमिट करते हैं, यह एक ही पृष्ठ लोड करता है, यह सिर्फ एक स्विच स्टेटमेंट में पड़ता है जिसे जानकारी को अपडेट करने के लिए क्षेत्र में इसे जमीन पर रखना चाहिए। यह साइट के अन्य हिस्सों पर अन्य सभी चीज़ों (समान फोरैच स्टेटमेंट) के लिए काम करता है, बस यहां नहीं जब कई HTML तत्व शामिल होते हैं। – n0nag0n