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表单提交刷新的主要内容,如果未能解决你的问题,请参考以下文章

php避免form表单重复提交

PHP表单提交刷新

使用ajax将表单提交给php而不刷新页面

求助:PHP多表单提交问题,一个页面提交N多个表单

使用 AJAX 和 PHP 提交表单并带有成功响应文本而不刷新页面

提交表单的时候大家有啥防止用户刷新重复提交的方法 - PHP进阶讨论