php停止声明表单验证

时间:2014-07-20 12:24:04

标签: php html

我是初学者,正在尝试使用PHP进行表单验证。我想检查其中一个输入是否为空,表单表明需要空输入。

我在后面显示了php脚本。

<?php
        $titleErr = $authorErr = $keywordsErr = $contentErr = "";
        $title = $author = $keywords = $content = "";

        if (empty($_POST["submit"])) {
            if(empty($_POST["title"])){
                $titleErr = "title is required";
            }

            if(empty($_POST["author"])){
                $authorErr = "author name is required";
            }

            if(empty($_POST["keywords"])){
                $keywordsErr = "keywords are required";
            }

            if(empty($_POST["content"])){
                $contentErr = "This field is required";
            }

        }
        ?> 
        <form method="post" action="insert_post.php">
            <table width="600" align="center" border="10">
                <tr>
                    <td align="center" bgcolor="yellow" colspan="6"><h1>Insert New Post Here</h1></td>
                </tr>

                <tr>
                    <td align="right">Post Title:</td>
                    <td><input type="text" name="title" size="38">
                        <span style="color:red;"><?php echo $titleErr; ?></span>
                    </td>
                </tr>
                <tr>
                    <td align="right">Post Author:</td>
                    <td><input type="text" name="author" size="38">
                    <span style="color:red;"><?php echo $authorErr; ?></span>
                    </td>
                </tr>
                <tr>
                    <td align="right">Post Keywords:</td>
                    <td><input type="text" name="keywords" size="38">
                    <span style="color:red;"><?php echo $keywordsErr; ?></span>
                    </td>
                </tr>
                <tr>
                    <td align="right">Post Image:</td>
                    <td><input type="file" name="image"></td>
                </tr>
                <tr>
                    <td align="right">Post Content</td>
                    <td><textarea name="content" cols="30" rows="15"></textarea>
                    <span style="color:red;"><?php echo $contentErr; ?></span>
                    </td>
                </tr>
                <tr>
                    <td align="center" colspan="6"><input type="submit" name="submit" value="Publish Now"></td>
                </tr>
            </table>
        </form>
    </body>
</html>
<?php
    include("includes/connect.php");
    if(isset($_POST['submit'])){
        $title = $_POST['title'];
        $date = date('d-m-Y');
        $author = $_POST['author'];
        $keywords = $_POST['keywords'];
        $content = $_POST['content'];
        $image = $_FILES['image'] ['name'];
        $image_tmp = $_FILES['image'] ['tmp_name'];

        move_uploaded_file($image_tmp, "../images/$image");
        $query = "INSERT INTO posts (post_title, post_date, post_author, post_keywords, post_image, post_content) VALUES('$title', '$date', '$author', '$keywords', '$image', '$content')";

        $result = mysqli_query($conn, $query);

        if($query){
            echo"<center><h1>Post Published Succesfully!</h1></center>";
        }
    }

?>

问题是如果输入为空我想停止scrit但我不能使用如下函数:exit()和break;。 如果我提交,表单将空值发送到数据库:C。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

我们使用临时在本地存储数据的会话变量。要使用会话,我们必须始终在每个页面的开头按session_start()启动会话,以便能够访问变量。现在我们可以存储数据并将其传递到我们想要的任何页面而无需发送它 - 我们只需存储它然后抓住它。

<强>的index.php

<?php
session_start();

$titleErr = $authorErr = $keywordsErr = $contentErr = "";
$title = $author = $keywords = $content = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if(empty($_POST["title"])){
        $titleErr = "title is required";
    }

    if(empty($_POST["author"])){
        $authorErr = "author name is required";
    }

    if(empty($_POST["keywords"])){
        $keywordsErr = "keywords are required";
    }

    if(empty($_POST["content"])){
        $contentErr = "This field is required";
    }
    if(!empty($_POST["title"]) && !empty($_POST["author"]) && !empty($_POST["keywords"]) && !empty($_POST["content"])){
        $_SESSION["title"] = $_POST["title"];
        $_SESSION["author"] = $_POST["author"];
        $_SESSION["keywords"] = $_POST["keywords"];
        $_SESSION["content"] = $_POST["content"];
        $_SESSION["image"] = $_FILES["image"];
        header("location: insert_post.php");
        exit();
    }

}
?>
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    <table width="600" align="center" border="10">
        <tr>
            <td align="center" bgcolor="yellow" colspan="6"><h1>Insert New Post Here</h1></td>
        </tr>

        <tr>
            <td align="right">Post Title:</td>
            <td><input type="text" name="title" size="38" value="<?php if(isset($_POST['title'])){ echo $_POST['title']; }; ?>">
                <span style="color:red;"><?php echo $titleErr; ?></span>
            </td>
        </tr>
        <tr>
            <td align="right">Post Author:</td>
            <td><input type="text" name="author" size="38" value="<?php if(isset($_POST['author'])){echo $_POST['author']; }; ?>">
                <span style="color:red;"><?php echo $authorErr; ?></span>
            </td>
        </tr>
        <tr>
            <td align="right">Post Keywords:</td>
            <td><input type="text" name="keywords" size="38" value="<?php if(isset($_POST['keywords'])){echo $_POST['keywords']; }; ?>">
                <span style="color:red;"><?php echo $keywordsErr; ?></span>
            </td>
        </tr>
        <tr>
            <td align="right">Post Image:</td>
            <td><input type="file" name="image"></td>
        </tr>
        <tr>
            <td align="right">Post Content</td>
            <td><textarea name="content" cols="30" rows="15" value="<?php if(isset($_POST['content'])){echo $_POST['content']; }; ?>"></textarea>
                <span style="color:red;"><?php echo $contentErr; ?></span>
            </td>
        </tr>
        <tr>
            <td align="center" colspan="6"><input type="submit" name="submit" value="Publish Now"></td>
        </tr>
    </table>
</form>
</body>
</html>

<强> insert_post.php

<?php
session_start();

include("includes/connect.php");
$title = $_SESSION['title'];
$author = $_SESSION['author'];
$keywords = $_SESSION['keywords'];
$content = $_SESSION['content'];

$date = date('d-m-Y');
$image = $_SESSION['image']['name'];
$image_tmp = $_SESSION['image']['tmp_name'];

move_uploaded_file($image_tmp, "../images/$image");
$query = "INSERT INTO posts (post_title, post_date, post_author, post_keywords, post_image, post_content) VALUES('$title', '$date', '$author', '$keywords', '$image', '$content')";

$result = mysqli_query($conn, $query);

if($query){
    echo"<center><h1>Post Published Succesfully!</h1></center>";
}
else{
    echo "<center><h1>Error! Post was not published!</h1></center>";
}

echo $title . " " . $author . " " . $keywords . " " . $content;

?>

顺便说一句,您应该为数据库插入使用预准备语句以防止SQL注入。阅读更多相关信息here

答案 1 :(得分:0)

改变这些界限:

include("includes/connect.php");
if(isset($_POST['submit'])){

include("includes/connect.php");
if( isset($_POST['submit']) //Fix here, it will only insert if all error message
     && empty($titleErr)    //are empty.
     && empty($authorErr)
     && empty($keywordsErr)
     && empty($contentErr) ){

修改

并且还改变了这一行

if (empty($_POST["submit"])) {

if (isset($_POST["submit"])) {

在脚本的init上。如果您没有提交页面,则空函数将返回true,这就是您发送错误消息的原因。

答案 2 :(得分:0)

您无法使用Exit Funktion打破脚本。只需要证明错误变量是否为空,只有在它们不空的情况下才会发送dB请求。