提交表单时$ _POST为空

时间:2017-03-15 08:32:46

标签: php html forms

<html>
    <head>
        <!-- SCRIPTS -->
        <script type="text/javascript" src="scripts/controller.js"></script>
        <!-- STYLES -->
        <link href="styles/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <?php

    $errUrl = $videoId = "";
    $start = $end = 0;

    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        print_r($_POST);
        if (isset($_POST["yt_url"])) {
            echo "hello2";
            $videoId = youtube_parser($_POST['yt_url']);
        }
        if (!$videoId) {
            $errUrl = "URL is not valid!";
            $videoId = "";
        } else {
            $errUrl = "";
        }
        //$start = $_POST['startH'] * 3600 + $_POST['startM'] * 60 + $_POST['startS'] * 1;
        //$end = $_POST['endH'] * 3600 + $_POST['endM'] * 60 + $_POST['endS'] * 1;
    }

    function youtube_parser($url) {
        $regExp = '/^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$/';
        $match = preg_match($regExp, $url, $matches);
        return ($match && strlen($matches[5]) === 11)? $matches[5] : false;
    }

    function test_input($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    }
    ?>
        <div class="left">
            <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
                <span class="error">* <?php echo $errUrl; ?></span><br>
                URL: <input type="text" name="yt_url">
                <br><br>
                Start Time:<br>
                <span class="label">Hour: </span><input value="0" type="number" name="start_h"><br>
                <span class="label">Minute: </span><input value="0" type="number" name="start_m"><br>
                <span class="label">Second: </span><input value="0" type="number" name="start_s">
                <br><br>
                End Time:<br>
                <span class="label">Hour: </span><input value="0" type="number" name="end_h"><br>
                <span class="label">Minute: </span><input value="0" type="number" name="end_m"><br>
                <span class="label">Second: </span><input value="0" type="number" name="end_s">
                <br><br>
                <input type="submit" name="submit" value="Submit">
            </form>
        </div>
        <div class="player"><?php
            if (isset($videoId) && !empty($videoId)) {
                echo '<iframe width="560" height="315" src="https://www.youtube.com/embed/$videoId?start=$start&end=$end" frameborder="0" allowfullscreen></iframe>';
            }
            ?></div>
    </body>
</html>

以上就是我到目前为止所做的。我正在尝试学习php,我一直在研究w3schools上的教程我接触了有关使用表单的部分,并且没有任何信息在$ _POST数组中传递,我已经设置了名称我的所有DOM控件。任何见解将不胜感激!我觉得我的PHP设置与我的设置有关,因为即使提供的示例也不起作用。

其他信息: 通过Intellij PHPStorm运行的Web服务器。 php版本是7.0.9

Screenshot of product

1 个答案:

答案 0 :(得分:0)

您的代码看起来有效,当我尝试它时,它会显示$_POST数组的预期输出: enter image description here

所以看起来你在测试环境时遇到了问题。

BTW <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
是错的。除了意大利面条代码,您不应在htmlspecialchars()使用urlencode()_SERVER['PHP_SELF'] (但我没有使用任何isset($_POST['submit'])不能被客户欺骗。)

同样@CarlJan建议您可以使用submit来检查您的表单是否已提交,因为只有POST按钮是通过{{1}}发送的,才会生效。现在您正在检查这是否是POST请求(一般情况下),但它与从其他表单发布或手动触发的不一样。