【问题标题】:Stop INSERT INTO from creating new row when page is refreshed [duplicate]刷新页面时停止 INSERT INTO 创建新行[重复]
【发布时间】:2014-09-15 04:31:56
【问题描述】:

我在下面有这段代码,它工作正常,除非我刷新页面时它会插入一个空白行。有人知道我需要在这里做什么吗?

<?php
$con=mysqli_connect("localhost","name","password","inventory");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security
$inv_number = mysqli_real_escape_string($con, $_POST['inv_number']);
$date = mysqli_real_escape_string($con, $_POST['date']);
$date_type = mysqli_real_escape_string($con, $_POST['date_type']);
$item1 = mysqli_real_escape_string($con, $_POST['item1']);
$location1 = mysqli_real_escape_string($con, $_POST['location1']);

$sql="INSERT INTO invoice (inv_number, date, date_type, item1, location1)
VALUES ('$inv_number', '$date', '$date_type', '$item1', '$location1')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo 'Invoice #'.$_POST['inv_number'].' recorded'; 

mysqli_close($con);
?>

我尝试找到可以阻止代码创建空白行的条件 if 语句,但无济于事,我找到了可行的解决方案。

感谢任何帮助。

【问题讨论】:

  • 使用这样的标头('Location: example.com/');
  • 基本上就是这样,您刷新页面,发出另一个请求,再次执行您的 PHP,从而再次插入
  • if (empty($_POST) == true) { header('位置:返回页面'); }else{ 设置变量并运行查询 }

标签: php mysql database insert-into


【解决方案1】:
<?php
$con=mysqli_connect("localhost","name","password","inventory");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if (empty($_POST['inv_number']) || empty($_POST['date']) ||empty($_POST['date_type'])
    || empty($_POST['item1']) || empty($_POST['location1'])) 
    {
      echo "Re direct user by using header or show them messages";

    }
else {
    // set your variable and run your query 
    //i just copy and posted your code from your question
// escape variables for security
$inv_number = mysqli_real_escape_string($con, $_POST['inv_number']);
$date = mysqli_real_escape_string($con, $_POST['date']);
$date_type = mysqli_real_escape_string($con, $_POST['date_type']);
$item1 = mysqli_real_escape_string($con, $_POST['item1']);
$location1 = mysqli_real_escape_string($con, $_POST['location1']);

$sql="INSERT INTO invoice (inv_number, date, date_type, item1, location1)
VALUES ('$inv_number', '$date', '$date_type', '$item1', '$location1')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo 'Invoice #'.$_POST['inv_number'].' recorded'; 
}
mysqli_close($con);
?>

请注意,如果 if 语句中给出的任何字段为空,您的查询将不会运行

请阅读解决方案中的评论

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2014-07-04
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多