PHP表单提交刷新
Posted
技术标签:
【中文标题】PHP表单提交刷新【英文标题】:PHP form submission with refreshing 【发布时间】:2016-06-28 19:58:30 【问题描述】:第一次在这里发帖,对于任何不良习惯,我深表歉意。 我最近开始了一个关于 php 以及如何创建博客的在线 youtube 教程。 我最终忙于其他事情,并回来尝试完成我开始的事情,并且发生了两件事。 1:我的教程已从 youtube 上删除(一定是版权问题),其次我完全忘记了使用的方法。我假设如果我是一个经验丰富的编码员,这将很容易破译,但我尝试了几天后没有运气。
此代码用于我的博客的提交表单。如果我手动将我的 html 输入到 SQL 数据库中,则该博客正在工作,但如果我使用此表单,我似乎得到的只是刷新提交页面,所有信息都消失了。没有信息被添加到数据库中。
有人有想法吗?我在网站上进行了很好的搜索,但由于我对实际搜索的内容缺乏了解(很多关于 javascript 的解决方案),我陷入了死胡同
我们将不胜感激。
真诚的
SGT 菜鸟
<?php error_reporting(E_ALL); ini_set('display_errors', 1);
session_start();
if (isset($_SESSION['username']))
$username = ($_SESSION['username']);
else
header('Location: ../index.php');
die();
if (isset($_POST['submit']))
if ($_POST['submit'])
$title = $_POST['Post_Title'];
$content = $_POST['Post_Content'];
$date = $_POST['Post_Date'];
include_once("../admin/connection.php");
$sql = "INSERT INTO `posts` (Post_Title, Post_Content, Post_Date)
VALUES ('$title','$content','$date')";
mysqli_query($dbcon,$sql);
echo "Post has been added to the database";
else
header('Location: index.php');
die();
?>
<html>
<div>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="//cdn.ckeditor.com/4.5.9/standard/ckeditor.js"></script>
<title> Insert Post </title>
</head>
<div>
<body>
<div id= 'cmssubmissionform'>
<form action="" method="post">
<p>
<h1> Post Title</h1>
<input type="text" name= "Post_Title"/>
</p>
<h1> Post Date</h1>
<input type="text" name= "Post_Date"/>
</p>
<p>
<h1>Post Content </h1>
<textarea name="Post_Content"></textarea>
<script>
CKEDITOR.replace( 'Post_Content' );
</script>
</p>
<p>
<input type = "submit" value="submit" />
</p>
</form>
</div>
</div>
</div>
</body>
【问题讨论】:
您的查询容易受到SQL injection 的影响。始终准备、绑定和执行您的查询以防止任何类型的SQL注入。 您没有任何名称为submit
的东西来检查 $_POST['submit']
。您可能在提交输入中错过了name="submit"
。
其实用mysqli_query = php.net/manual/en/function.mysql-query.php(“不支持多查询”),sql注入是没有风险的。无论如何,“准备、绑定和执行”是一个很好的建议。
【参考方案1】:
试试这个
在你的从改变到
<input type = "submit" value="submit" name="submit"/>
你忘了放名称属性
php
<?php error_reporting(E_ALL); ini_set('display_errors', 1);
session_start();
include_once("../admin/connection.php");
if (isset($_SESSION['username']))
$username = ($_SESSION['username']);
else
header('Location: ../index.php');
die();
if (isset($_POST['submit']))
$title = $_POST['Post_Title'];
$content = $_POST['Post_Content'];
$date = $_POST['Post_Date'];
$sql = "INSERT INTO `posts` (`Post_Title`, `Post_Content`, `Post_Date`)
VALUES ('$title','$content','$date')";
if(mysqli_query($dbcon,$sql))
echo "Post has been added to the database";
else
header('Location: index.php');
die();
?>
请注意,我还将您的 SQL 语句更改为
INSERT INTO `posts` (`Post_Title`, `Post_Content`, `Post_Date`)
VALUES ('$title','$content','$date
注意表格字段的反引号
【讨论】:
【参考方案2】:替换
if (isset($_POST['submit']))
if ($_POST['submit'])
与
if (isset($_POST['submit']))
然后替换
<input type = "submit" value="submit" />
与
<input type ="submit" name="submit" value="submit" />
但是,在这个阶段,我强烈建议从不同的教程重新开始。
此外,正如 cmets 中提到的,每当您从用户那里获取参数并将它们放入数据库查询时,您必须绝对确保字符串不会操纵查询(想象有人在日期字段(而“博客”是您的博客文章表的名称)。那将是灾难性的,不是吗?
所以当你处理输入数据时,要么使用mysqli包的prepare和bind方法,要么先通过mysqli_real_escape_string()
函数传递字符串。
【讨论】:
以上是关于PHP表单提交刷新的主要内容,如果未能解决你的问题,请参考以下文章