验证表单,然后使用php提交到数据库

验证表单,然后使用php提交到数据库,php,Php,我一直不愿意回到Stackoverflow来问这个问题。这肯定被问了很多次,但每个答案都不能解决问题。我已经尝试了标题修复:没有用,现在我一直尝试从同一个页面验证和提交 当我使用标题重定向时,不会发生任何事情,不会重定向到下一页,同时也不会出于某种原因给出任何错误。这就给我留下了下面的方法。。一堆乱七八糟的代码,我花了60多个小时试图从这里以及其他网站上找到的答案开始工作 我一直在尝试用以下方法验证此版本: if(empty()) { display error }else{

我一直不愿意回到Stackoverflow来问这个问题。这肯定被问了很多次,但每个答案都不能解决问题。我已经尝试了标题修复:没有用,现在我一直尝试从同一个页面验证和提交

当我使用标题重定向时,不会发生任何事情,不会重定向到下一页,同时也不会出于某种原因给出任何错误。这就给我留下了下面的方法。。一堆乱七八糟的代码,我花了60多个小时试图从这里以及其他网站上找到的答案开始工作

我一直在尝试用以下方法验证此版本:

 if(empty()) {
   display error 
 }else{
   variable = true

 if(variable = true){ 
  post to database
 }
我为我重复的问题以及我完全缺乏知识而道歉。我在学习这些实践项目

<?php
    if (mysqli_connect_errno()) {
    echo "Connection to the database failed! Submitting a story will not work! Try again in a few minutes!" . mysqli_connect_error();
    }else{
        echo "<br>";
        echo "<h4>" . "Database connected successfully... It is safe to submit a story!" . "</h4>";
}
$TitleErr = $StoryErr = $AuthorErr = $DateErr = "";
$Title = $Story = $Author = $Date = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["Title"])) {
        $TitleErr = "Title is required!";
    }else{
        $valid1 == true;
        }
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["Story"])) {
        $StoryErr = "Story is required!";
    }else{
        $valid2 == true;
        }
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["Author"])) {
        $AuthorErr = "Author is required!";

    }else{
        $valid3 == true;
        }
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST["Date"])) {
        $DateErr = "Date is required!";

    }else{
        $valid4 == true;
        }
}
if ($valid1 = $valid2 = $valid3 = $valid4 = true) {
    $Title = mysqli_real_escape_string($con, $_POST['Title']);
    $Date = mysqli_real_escape_string($con, $_POST['Date']);
    $Author = mysqli_real_escape_string($con, $_POST['Author']);
    $Story = mysqli_real_escape_string($con, $_POST['Story']);

    $sql="INSERT INTO Moderate (Title, Story, Author, Date)
    VALUES ('$Title', '$Story', '$Author', '$Date')";
    if (!mysqli_query($con,$sql)) {
        die('Error: ' . mysqli_error($con));
        }else{
            echo "<br>";
            echo "Story submitted for moderation!";
            }
}


mysqli_close($con);

//Insert into database
//$sql="INSERT INTO Moderate (Title, Story, Author, Date)
//VALUES ('$Title', '$Story', '$Author', '$Date')";
?>
        <h2>Submit News</h2>
        <?php// echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<span class="error">* <?php echo $TitleErr;?></span>
Title: <input type="text" name="Title">
<span class="error">* <?php echo $AuthorErr;?></span>
Author: <input type="text" name="Author">
<span class="error">* <?php echo $DateErr;?></span>
Date: <input type="date" name="Date">
<input type="submit"><br>

<span class="error">* <?php echo $StoryErr;?></span>
Story: <br><textarea type="textarea" rows="40" cols="100" name="Story" method="post"></textarea>
</form>
</div>
<?php

//// escape variables for security
//$Title = mysqli_real_escape_string($con, $_POST['Title']);
//$Story = mysqli_real_escape_string($con, $_POST['Story']);
//$Author = mysqli_real_escape_string($con, $_POST['Author']);
//$Date = mysqli_real_escape_string($con, $_POST['Date']);

//Insert into database


?>

我要冒险回答。我看到的主要情况是,您使用==作为赋值,=作为比较。这是倒退

$valid4==true;应为$valid4=true


如果$valid1=$valid2=$valid3=$valid4=真,则应为如果$valid1==$valid2==$valid3===$valid4==真或假,因为它实际上必须是:

if ($valid1==true && $valid2==true && $valid3==true && $valid4==true)
通过赋值,您可以堆叠运算符,但通过布尔比较,可以将比较与和&&&结合起来


只是一些建议,不要让页面自行提交。创建一个单独的页面来处理表单和显示表单的页面。这样,如果您想升级到使用Ajax,就更容易了。另外,在执行类似这样的db更新之后,您始终需要重定向到另一个页面,以防止重复提交,除非使用ajax。执行db更新的页面不应该打印任何内容,而应该只执行db更新和重定向,除非出现验证错误

将您的PHP更改为:

if (isset($_POST['Title'],$_POST['Date'], $_POST['Author'], $_POST['Story'] )){

    $con = mysqli_connect("localhost", "my_user", "my_password", "db");

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    $title = $_POST['Title'];
    $date = $_POST['Date'];
    $author = $_POST['Author'];
    $story = $_POST['Story'];

    $query = "INSERT INTO Moderate (Title, Story, Author, Date) 
              VALUES (?, ?, ?, ?)"    

    /* create a prepared statement */
    if ($stmt = mysqli_prepare($con, $query)) {
        /* bind parameters for markers */
        mysqli_stmt_bind_param($stmt, "ssss", $city);    
        /* execute query */
        mysqli_stmt_execute($stmt);  
        /* close statement */
        mysqli_stmt_close($stmt);
    }   
    /* close connection */
    mysqli_close($con);
}

这是毫无疑问的。顺便说一句,你的头重定向不起作用的原因是你在//after:之后被遗漏了,而且可能没有包含返回;在重定向尝试停止PHP脚本继续执行,将内容打印到响应中,从而破坏重定向工作的机会后,您需要使用它。@developerwjk您的意思是退出而不是返回吗?@Marty,如果您不在任何函数中,则返回将工作。如果你在一个函数中,那么是的,使用exit。请使用IDE,它会立即发现这样的事情:如果$valid1=$valid2=$valid3=$valid4=true@developerwjk是的,对不起。。按下按钮,然后意识到我漏掉了这个问题。我可以确认格式是正确的,尽管我确实使用了exit;而不是返回;。如果$valid1==$valid2==$valid3==$valid4==true,则给出一个错误。-我会继续努力让一切顺利进行。都是从同一个页面和重定向。先生,你刚刚完成了我的一周。成功了!非常感谢你让我又少了60个小时的头痛。我现在将尝试让重定向在测试页面上工作!我将进一步研究这段代码以了解它。就目前而言,developerwjk的代码更改对这个问题非常有效。