There is an identical question to this issue from October,但未得到答复。我不确定该协议的用途。
我在网站上工作纯粹是为了好玩并学习一些PHP。这包括发布"新闻"的表格。大部分时间都很好,但有时它是任意的,我没有给出403错误
You don't have permission to access /news.php on this server.
搜索这种情况会导致很多人谈论一些名为mod_sec的内容,如果我所使用的网络主机使用它,我不知道如何处理。
以下是所涉及的所有代码,但由于它通常功能完美,因此可能无济于事。有效的用户名和密码不包括该功能更改的任何字符。
编辑: 点击表单提交按钮时发生错误。在意外调查时,它甚至在到达数据库连接尝试之前发生,因此与PHP代码完全无关。
所有包含的代码都位于同一页面上(最初没有,但我移动它以消除这个角度)
这是通过实际网络主机在线进行的,因此本地文件冲突和防病毒等不应该受到责备。
网站错误日志只是抱怨缺少403或404页面,访问日志只是这样说:
[24/Jan/2016:05:04:56 -0500] "POST /news.php HTTP/1.1" 404 - [URL] "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
PHP:
function sanitiseText($text)
{
$output = nl2br($text);
$output = str_replace("'", "’", $output);
$output = str_replace("<", "<", $output);
$output = str_replace(">", ">", $output);
$output = str_replace('"', '"', $output);
return $output;
}
$a_un = sanitiseText($_POST['un']);
$a_pw = sanitiseText($_POST['pw']);
$mysql_admin = new mysqli(DB_SERVER, $a_un, $a_pw, B_NAME) or
die("Could not access the database");
if($_POST['postNews'])
{
$newsTitle = sanitiseText($_POST['newsTitle']);
$newsPost = sanitiseText($_POST['newsPost']);
$query = "SELECT * FROM news ORDER BY postID DESC";
$result = $mysql_admin->query($query);
$info = $result->fetch_assoc();
$pID = $info['postID'] + 1;
$query = "INSERT INTO news(postID, title, post, posted) VALUES ('$pID', '$newsTitle', '$newsPost', NOW())";
$mysql_admin->query($query);
header("Location:/");
}
HTML:
<form enctype='multipart/form-data' method='post' action='' name='newsform'>
Username: <input type="text" name="un" size="12" value=""/><br>
Password: <input type="password" name="pw" size="12" value=""/><br><br>
Title: <input type="text" name="newsTitle" size="40" value=""/><br><br>
Post:<br><textarea name="newsPost" cols="45" rows="5"></textarea><br><br>
<input type='submit' value='Make News Post' name='postNews'/>
答案 0 :(得分:0)
试错:
将正确的(完整)网页网址设置为action
字段。 <强>兼完成
显示.htaccess
文件或类似权限设置中的所有详细信息。的无。强>
您是否在文件空间中使用任何SymLink? 否强>
我在您的网页news.php
中未找到任何字符编码,因此建议您在标题和accept-charset="utf-8"
标记内<form>
的表单中添加字符编码。
只是因为这是一个解析错误,PHP添加了一个PHP错误记录添加
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
到news.php页面的顶部。
重新编码您的HTML。
我认为一个可能的原因是服务器因HTML页面的质量差而感到困惑,所以这里是页面的修复,(部分原因是我觉得很难不修复这些事情!) 。请将其复制/粘贴为news.php
的HTML,然后查看403错误发生的频率。
值得注意的是,您没有404错误,404是由403查找要显示到浏览器的相应错误页面引起的,并且由于您没有,因此找不到404文件。 404并不重要。
代码(升级到HTML5):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>News Page - Scissle</title>
<link href="sheet.css" rel="stylesheet" media="screen" type="text/css" /></head>
<body>
<div id="border">
</div>
<div id="content">
<center> <!-- Do not use <center> tags, use CSS-->
<form enctype='multipart/form-data' method='post' action='http://scissle.com/news.php' name='newsform' accept-charset="utf-8">
Username: <input type="text" name="un" size="12" value="" /><br>
Password: <input type="password" name="pw" size="12" value="" /><br><br>
Title: <input type="text" name="newsTitle" size="40" value="" /><br><br>
Post:<br><textarea name="newsPost" cols="45" rows="5"></textarea><br><br>
<input type='submit' value='Make News Post' name='postNews' />
</form>
<br>
<hr>
<table class="book"><tr class="heading"><td>Some points:
1) Encase CSS classes in quotes.
2) Remember to close html / body/head tags
3) Try to avoid blank spaces/ empty lines at the start or end of the HTML file.
4) remember to close your Form tags too.
</td></tr></table></center>
</div>
</body>
</html>
来自评论:
点击表单提交按钮时发生错误。这是通过实际的网络主机在线进行的。
因此,我强烈怀疑该错误是由PHP header()
函数的不正确/不精确使用引起的,如我的评论中所述。
用以下内容替换标题栏:
...
$mysql_admin->query($query);
header("Location: http://scissle.com/index.php");
exit;
}
这将为服务器提供一个准确的地址,而不是您现在拥有的简单/
。
在标题as recommended之后添加了exit;
。