搜索表单操作url不显示php变量

时间:2016-10-19 06:16:34

标签: php

嗨,任何人都可以告诉我这种形式的问题。它在url中没有显示变量

<form class="navbar-form navbar-left" method="post" action="test.php?q=<?php echo $searchb;?>" role="search" style="padding: 3.5px 90px;">
    <div class="form-group">
        <input type="text" name="searchb" class="form-control" autocomplete="off" placeholder="Search" />
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

php code here

if (isset($_POST['searchb'])) {
   $searchb = $_POST['searchb'];
 }

当表单中的输入内容和操作网址没有显示任何值时

test.php?q=

但我们回显变量显示值。

2 个答案:

答案 0 :(得分:1)

  

部分:action="test.php?q=<?php echo $searchb;?>"首先是不合逻辑的,最重要的是不必要,因为你是POST你的表格。如果$searchb是预先定义的,那将是有效的。但是,因为它是表格的一部分;它将始终为NULL,因为它从未被声明,但预计会在Form-Submit上动态添加,这不会发生。您可以通过以下两种方式之一来实现:

选项#1 - 通过隐藏输入传递:

    <!-- YOU DON'T NEED THE echo $searchb PART  IN YOUR FORM'S ACTION BECAUSE -->
    <!-- THAT VALUE IS  NOT PART OF THE ACTION  AS IT IS NOT EVEN SET AT ALL -->
    <form class="navbar-form navbar-left" method="post" action="test.php" role="search" style="padding: 3.5px 90px;">
        <div class="form-group">
            <input type="text" name="searchb" class="form-control" autocomplete="off" placeholder="Search" />
            <!-- ADD THE q AS HIDDEN INPUT ELEMENT WITH A VALUE -->
            <input type="HIDDEN" name="q" value="Some value" />
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
    </form>

    <?php
        // INSIDE OF test.php SCRIPT; DO;   
        if (isset($_POST['searchb'])) {
            $searchb = $_POST['searchb'];
        }

选项#2:使用GET&amp;将Q设置为预先定义的值

    <?php  $param = "some-predefined-value"; ?>
    <form class="navbar-form navbar-left" method="GET" action="test.php?<?php echo $param;?>" role="search" style="padding: 3.5px 90px;">
        <div class="form-group">
            <input type="text" name="searchb" class="form-control" autocomplete="off" placeholder="Search" />
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
    </form>

    <?php
        // INSIDE OF test.php SCRIPT; DO;   
        // BUT REMEMBER TO CHECK INSIDE THE `GET` GLOBAL
        if (isset($_GET['searchb'])) {
            $searchb = $_GET['searchb'];
        }

为您的用例提供更好的选择:使用GET&amp;从输入设置Q

    <!-- STILL NO  NEED FOR SETTING QUERY PARAMETERS MANUALLY-->
    <!-- THE GET METHOD WOULD TAKE  CARE OF THAT FOR YOU ONCE THE FORM IS SUBMITTED -->
    <form class="navbar-form navbar-left" method="GET" action="test.php" role="search" style="padding: 3.5px 90px;">
        <div class="form-group">
            <!-- NOTICE THAT THE NAME OF THE INPUT FIELD CHANGED TO; q HERE -->
            <input type="text" name="q" class="form-control" autocomplete="off" placeholder="Search" />
        </div>
        <button type="submit" class="btn btn-default">Submit</button>
    </form>

    <?php
        // INSIDE OF test.php SCRIPT; DO;
        // BUT REMEMBER TO CHECK INSIDE THE `GET` GLOBAL
        if (isset($_GET['q'])) {
            $searchb = $_GET['q'];
        }

答案 1 :(得分:1)

首次加载的表单$_POST['searchb']为空,因此当您提交表单然后test.php?q=填写

时,在加载表单后操作等于$_POST['searchb']