好的,所以这是我的问题(我用Google搜索并没有帮助):
我有一个包含textarea元素的表单,在其中我想写一些类似的东西:
<table><tr><td>123</td></tr></table>
然后单击“提交”,我希望将其保存在数据库中。
现在,如果我输入nonHTML字符,我的代码就可以正常工作了,但如果我按上面的方式输入,我会得到:
Forbidden
You don't have permission to access /xxx/sample_posteddata.php on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
我的猜测是,不知何故,我的托管有一些安全措施,不允许这样做?
我试图从php管理界面插入确切的文本,并且工作正常:?
编辑:文件podaciEdit.php的完整源代码:
<?
require_once("_dal/CredentialsManager.php");
require_once("_dal/ProizvodRepository.php");
$repos = new ProizvodRepository();
if ( isset( $_POST["spremi"] ) ){
$sifra = $_POST["sifra"];
$naziv = $_POST["naziv"];
$slika = $_POST["slika"];
$podaci_full = htmlspecialchars($_POST["podaci_full"]);
$podaci_min = $_POST["podaci_min"];
$kategorija = $_POST["kategorija"];
$kategorija_naziv = $_POST["kategorija_naziv"];
if ($repos->updateProizvod ($sifra, $naziv, $slika, $podaci_full, $podaci_min, $kategorija, $kategorija_naziv))
echo "Podaci uspješno spremljeni!";
else{
echo "Greška prilikom spremanja podataka!";
}
echo '<br/>Kliknite <a href="proizvodiEdit.php">ovdje</a> za povratak.';
}
else if ( isset( $_GET["sifra"] ) ){
$sifra = $_GET["sifra"];
$proizvod = $repos->GetProizvod($sifra);
if ($proizvod){
$sifra = $proizvod["sifra"];
$naziv = $proizvod["naziv"];
$slika = $proizvod["slika"];
$podaci_full = $proizvod["podaci_full"];
$podaci_min = $proizvod["podaci_min"];
$kategorija = $proizvod["kategorija"];
$kategorija_naziv = $proizvod["kategorija_naziv"];
//$data = htmlentities($podaci_full, ENT_QUOTES, "UTF-8");
echo <<<qq
<form id="proizvodEdit" method="POST" action="proizvodEdit.php">
Podaci - tablica: (mozes resizeati po potrebi!)<br/>
<textarea class="podaci_full" id="podaci_full" name="podaci_full">{$podaci_full}</textarea>
<input type="submit" value="Spremi sve" name="spremi"/>
</form>
qq;
}
else
echo '<h2 class="title-page">Proizvod koji tražite ne postoji.</h2>';
}
else{
echo '<h2 class="title-page">Proizvod koji tražite ne postoji.</h2>';
}
答案 0 :(得分:0)
如果您是网站的所有者,则可以使用htmlspecialchars()
,然后将输出保存到数据库。如果您想要阅读它并转换为html,请使用htmlspecialchars_decode()
要获得更准确的答案,您应该发布用于将数据保存到数据库的代码。
答案 1 :(得分:0)
我猜你最初得了403。这是一个与文件权限相关的问题,一个apache错误消息,而不是一个php。尝试直接访问www.yourdomain.com//xxx/sample_posteddata.php,看看您是否可以访问该文件。甚至可以尝试GET参数。
www.yourdomain.com//xxx/sample_posteddata.php?sifra=xxx
您应该可以访问它。如果不是try
chmod +x /home/domain/public_html
404是NOT FOUND的错误代码。这意味着您的表单未正确指向您的php文件或其中一个包含失败。检查你的路径。
答案 2 :(得分:0)
由于您的HTML包含关键字“table”,我最好的选择是它可能是与mod_security或其他一些过滤SQL关键字的安全工具相关的问题,以帮助防止SQL注入。尝试将以下内容添加到.htaccess
:
SecFilterEngine Off
如果它以这种方式工作,它可能与mod_security有关。请注意,您可能无法从.htaccess
文件中禁用它。
答案 3 :(得分:0)
实际上,帮助解决问题的是函数stripslashes。
$podaci_full = stripslashes($_POST["podaci_full"]);