刷新页面时在mysql中创建新行,原因是什么


Creating new rows in mysql when refreshing page, why?

我已经完成了一个php脚本,它将创建一个标题和一个文本,并将其加载到我的数据库(mysql)中。当我按下submit时,脚本运行并向右创建1行,然后创建3-5个空行。

当我刷新页面(空表单)时,数据库中显示了2个新的空行,会发生同样的事情吗?

我该如何解决?

<?php
$con=mysqli_connect("xxx");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$rubrik = mysqli_real_escape_string($con, $_POST['rubrik']);
$editor = mysqli_real_escape_string($con, $_POST['editor1']);
$date = date("Yyyy-mm-dd");
$sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '2014-09-18')";
if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
?>
        <form method="post" onSubmit=window.location="index.php">
        Rubrik: <br/><input type="text" name="rubrik"><br/>
        Nyhetstext:<br/> <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10">
                         </textarea><br/>
        <input type="submit" value="Publicera nyhet">
        </form>

每次加载页面时都会执行INSERT查询,设置一个POST变量来检查表单是否已提交,以及为什么使用事件属性window.location提交表单,只需使用action属性并将该值设置为空或要发送数据的文件名即可。

<form action="" method="post">

<form action="index.php" method="post">

您的日期变量也是错误的。要将日期生成为YYYY-MM-DD格式,请像下面的一样编写

$date = date('Y-m-d');

你的脚本可能喜欢这个

if(isset($_POST['submit'])) {
    your post variables and insert query goes here
}

你也可以像一样在form标签中插入一个隐藏的input字段

<form action="" method="post">
    <input type="hidden" name="save" value="details">
    other HTML code goes here
</form>

在这种情况下,你测试像这样的后变量

if(isset($_POST['save']) && $_POST['save'] === "details") {
    your post variables and insert query goes here
}

首先从http://www.php.net/在问任何问题之前,在这里搜索合适的问题。

将php代码封装在条件周围,以检查表单是否已提交。类似:

    <?php
        if(isset($_POST['submit')){
            $con=mysqli_connect("xxx");
            // Check connection
            if (mysqli_connect_errno()) {
              echo "Failed to connect to MySQL: " . mysqli_connect_error();
            }
            // escape variables for security
            $rubrik = mysqli_real_escape_string($con, $_POST['rubrik']);
            $editor = mysqli_real_escape_string($con, $_POST['editor1']);
            $date = date("Yyyy-mm-dd");
            $sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '2014-09-18')";
            if (!mysqli_query($con,$sql)) {
              die('Error: ' . mysqli_error($con));
            }
            mysqli_close($con);
        }
    ?>

始终捕获表单提交。您可以将isset()与以下内容一起使用:

<?php
$con = mysqli_connect("xxx");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if(isset($_POST['submit'])){
    // escape variables for security
    $rubrik = mysqli_real_escape_string($con, $_POST['rubrik']);
    $editor = mysqli_real_escape_string($con, $_POST['editor1']);
    $date = date("Y-m-d"); // put the correct format on the date
    $sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '$date')";
    if (!mysqli_query($con,$sql)) {
      die('Error: ' . mysqli_error($con));
    }
    mysqli_close($con);
    header('Location: index.php'); // always redirect
}
?>
<form method="post" action="">
    Rubrik: <br/><input type="text" name="rubrik"><br/>
    Nyhetstext:<br/><textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"></textarea><br/>
    <input type="submit" name="submit" value="Publicera nyhet" />
                      <!--   ^^ add a name -->
</form>

您应该检查$_SERVER['REQUEST_METHOD']是否为POST,然后才运行INSERT语句。

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $con=mysqli_connect("xxx");
  // Check connection
  if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  // escape variables for security
  $rubrik = mysqli_real_escape_string($con, $_POST['rubrik']);
  $editor = mysqli_real_escape_string($con, $_POST['editor1']);
  $date = date("Yyyy-mm-dd");
  $sql="INSERT INTO News (title, full_content, author, date_added) VALUES ('$rubrik', '$editor', 'admin', '2014-09-18')";
  if (!mysqli_query($con,$sql)) {
    die('Error: ' . mysqli_error($con));
  }
  mysqli_close($con);
}
?>