【问题标题】:PHP Display post variablesPHP 显示帖子变量
【发布时间】:2016-01-29 05:02:34
【问题描述】:

我在这里寻求帮助和解释。

我创建了一个带有多个输入字段的 HTML 表单,并在发布输入时进行了一些非常基本的 PHP 验证。我的验证只是检查该字段是否有数据,如果没有,它会通过显示错误提示用户在该字段中输入数据。我希望最终发布这些输入,对照数据库检查它们,如果它们不存在,则将它们添加到数据库中。但是,这不是我手头的问题。

目前,我的目标是获取我想要发布的字段中的所有输入,并将它们显示在我的错误显示区域下方的字段中。我曾希望只是回显数据,但由于某种原因,并非所有输入的数据都会出现。

在下面代码中的 5 个输入字段中,4 个是基本输入字段,一个是文本区域。如果我在基本输入字段中输入任何内容,则只有最后一个输入会在我的显示区域中回显。如果我在字段 1 中输入内容并将其余部分留空,则会显示字段 1。此外,如果我在文本区域中输入内容,它将始终显示。最后,我的 PHP 验证似乎不适用于我的 textarea 类型输入(标记为“note”),如果“note”输入留空,则不会返回错误。谁能解释一下:(1)我该如何解决它所有 5 个输入都显示在显示 div 中? (2) 为什么会这样? (3) 为什么文本区域(标注为'note')留空不返回错误?

谢谢。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<?php
//form validation for general entry form

    // define variables and set to empty values
    $clientErr = $matterErr = $dateErr = $timeErr = $noteErr= "";
    $client = $matter = $date = $time = $note = "";


    //on post, check to see if variable is empty. if not empty
    //parse it and assign value back to variable name

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $complete = true;
        $postArray = [];


        if (empty($_POST["client"])) {
            $clientErr = "*A client name is required. ";
            $complete = false;
        }else {


            $client = test_input($_POST["client"]);
            //$postArray[] =  $client;
        }


        if (empty($_POST["matter"])) {
            $matterErr = "*A matter name is required. ";
            $complete = false;
        }else {
            $client = test_input($_POST["matter"]);
        }


        if (empty($_POST["date"])) {
            $dateErr = "*A date is required. ";
            $complete = false;
        }else {
            $client = test_input($_POST["date"]);
        }


        if (empty($_POST["time"])) {
            $timeErr = "*A time entry is required. ";
            $complete = false;
        }else {
            $client = test_input($_POST["time"]);
        }

        if (empty($_POST["note"])) {
            $noteErr = "*A note is required. ";
            $complete = false;
        } else {
            $note = test_input($_POST["note"]);
        }

    } 

    function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
?>


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" >

    <label for="client">Client:</label>
    <input type="text" placeholder = "Enter Client Name" name="client"> * 

    <label for="matter">Matter:</label>
    <input type="text" placeholder = "Enter Matter Name" name="matter"> *

    <label for="date">Date:</label>
    <input type="text" placeholder = "Enter Date" name="date"> *

    <label for="time">Time:</label> 
    <input type="text" placeholder ="Time to nearest tenth hour" name="time"> *

    <label for="note">Note:</label>
    <textarea name="note" placeholder ="Enter Any Notes" rows="4" cols="40"></textarea> 

<input type="submit" name="submit" value="Submit" class="submitbutton">

 </form>  


<div class="errorDiv">
    <?php 
        echo $clientErr;
        echo $matterErr; 
        echo $dateErr;
        echo $timeErr; 
    ?>      

</div>

<div class ="displayDiv">
    <?php

            echo "<h2>Your Input:</h2>";
            echo $client;
            echo "<br>";
            echo $matter;
            echo "<br>";
            echo $date;
            echo "<br>";
            echo $time;
            echo "<br>";
            echo $note;



    ?>
</div>


</body>
</html>

【问题讨论】:

    标签: php html forms


    【解决方案1】:
     <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Document</title>
        </head>
        <body>
    
        <?php
        //form validation for general entry form
    
            // define variables and set to empty values
            $clientErr = $matterErr = $dateErr = $timeErr = $noteErr= "";
            $client = $matter = $date = $time = $note = "";
    
    
            //on post, check to see if variable is empty. if not empty
            //parse it and assign value back to variable name
    
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                $complete = true;
                $postArray = [];
    
    
                if (empty($_POST["client"])) {
                    $clientErr = "*A client name is required. ";
                    $complete = false;
                }else {
    
    
                    $client = test_input($_POST["client"]);
                    //$postArray[] =  $client;
                }
    
    
                if (empty($_POST["matter"])) {
                    $matterErr = "*A matter name is required. ";
                    $complete = false;
                }else {
                    $matter = test_input($_POST["matter"]);  //remove $client and assign value to $matter
                }
    
    
                if (empty($_POST["date"])) {
                    $dateErr = "*A date is required. ";
                    $complete = false;
                }else {
                    $date = test_input($_POST["date"]); //remove $client and assign value to $date
                }
    
    
                if (empty($_POST["time"])) {
                    $timeErr = "*A time entry is required. ";
                    $complete = false;
                }else {
                    $time = test_input($_POST["time"]); //remove $client and assign value to $time
                }
    
                if (empty($_POST["note"])) {
                    $noteErr = "*A note is required. ";
                    $complete = false;
                } else {
                    $note = test_input($_POST["note"]);
                }
    
            } 
    
            function test_input($data) {
              $data = trim($data);
              $data = stripslashes($data);
              $data = htmlspecialchars($data);
              return $data;
            }
        ?>
    
    
        <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" >
    
            <label for="client">Client:</label>
            <input type="text" placeholder = "Enter Client Name" name="client"> * 
    
            <label for="matter">Matter:</label>
            <input type="text" placeholder = "Enter Matter Name" name="matter"> *
    
            <label for="date">Date:</label>
            <input type="text" placeholder = "Enter Date" name="date"> *
    
            <label for="time">Time:</label> 
            <input type="text" placeholder ="Time to nearest tenth hour" name="time"> *
    
            <label for="note">Note:</label>
            <textarea name="note" placeholder ="Enter Any Notes" rows="4" cols="40"></textarea> 
    
        <input type="submit" name="submit" value="Submit" class="submitbutton">
    
         </form>  
    
    
        <div class="errorDiv">
            <?php 
                echo $clientErr;
                echo $matterErr; 
                echo $dateErr;
                echo $timeErr; 
                echo $noteErr;  // echo noteerror here.........
            ?>      
    
        </div>
    
        <div class ="displayDiv">
            <?php
    
                    echo "<h2>Your Input:</h2>";
                    echo $client;
                    echo "<br>";
                    echo $matter;
                    echo "<br>";
                    echo $date;
                    echo "<br>";
                    echo $time;
                    echo "<br>";
                    echo $note;
    
    
    
            ?>
        </div>
    
    
        </body>
        </html>
    

    在这里,您将所有值分配给单个变量 $client 并回显所有不同的变量,因此将值分配给特定变量,例如 $matter、$date、$time。而且您忘记在错误消息中回显$noteerror。

    【讨论】:

    • 感谢您收看这个。这是完整的答案。
    • 是的,打败我。 :)
    【解决方案2】:

    您复制并粘贴了您的 else 块,不是吗?在每个块中,您将值分配给$client,从而用每个新的$_POST 值覆盖它。将其他分配更改为 $client 到 $time 或适当的并尝试。

    例如这个

    $client = test_input($_POST["date"]);
    

    应该是

    $date = test_input($_POST["date"]);
    

    【讨论】:

    • 我确实做到了。谢谢你的收获。这回答了问题 1 和 2。你知道为什么 3 对我来说仍然是个问题吗?
    • 让我运行一个测试,我怀疑&lt;textarea&gt; 总是会提交一个值。您可能需要检查 $_POST['note'] !== '' 而不是 empty()。
    【解决方案3】:

    为什么要将所有值分配给同一个 $client 变量?它必须用不同的变量替换。

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $complete = true;
        $postArray = [];
    
    
        if (empty($_POST["client"])) {
            $clientErr = "*A client name is required. ";
            $complete = false;
        }else {
    
    
            $client = test_input($_POST["client"]);
            //$postArray[] =  $client;
        }
    
    
        if (empty($_POST["matter"])) {
            $matterErr = "*A matter name is required. ";
            $complete = false;
        }else {
            $matter= test_input($_POST["matter"]);
        }
    
    
        if (empty($_POST["date"])) {
            $dateErr = "*A date is required. ";
            $complete = false;
        }else {
            $date= test_input($_POST["date"]);
        }
    
    
        if (empty($_POST["time"])) {
            $timeErr = "*A time entry is required. ";
            $complete = false;
        }else {
            $time= test_input($_POST["time"]);
        }
    
        if (empty($_POST["note"])) {
            $noteErr = "*A note is required. ";
            $complete = false;
        } else {
            $note = test_input($_POST["note"]);
        }
    

    【讨论】:

    • 谢谢你是正确的,但上面的用户发现了这一点,所以我将选择他的答案作为正确的答案。
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多