如何将锚中的变量传递到下一页?

时间:2015-08-08 21:13:57

标签: php html5

我有两个页面,其中一个链接到另一个。如何将我的锚(select.php)中的变量(region_name)的值传递给下一页(display.php)?我使用以下代码并获得Notice: Undefined variable: region_name。我该如何解决?

select.php

        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a name="region_name" method="POST" value="Greater Accra Region" type="submit" href="display.php" target="main">Greater Accra Region</a>
                </h4>
            </div>
        </div> 

Display.php的

<?php 
ob_start();
session_start();
if(isset($_POST['region_name'])){
    $region_name = $_POST['region_name'];
}

$con=mysqli_connect("localhost","root","root","findings");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="SELECT * FROM approved_reservation WHERE region_name = '$region_name'";

$records=mysqli_query($con,$sql);

?>

4 个答案:

答案 0 :(得分:2)

我们通过网址传递变量$myVar,然后在下一页中使用$_GET来使用它。我们使用htmlspecialchars();来清理用户输入。

我们使用if (isset($_GET['myVar']))因此它不会抛出注意:未定义的索引错误

pageOne.php

<?php   
$myVar = "My variable one.";

echo "<a href='pageTwo.php?myVar=" . $myVar . "'>Page Two</a>"
?>

<强> pageTwo.php

<?php
if (isset($_GET['myVar'])) {
    $myVar = htmlspecialchars($_GET['myVar'], ENT_QUOTES);

    // Now you can use $myVar.
}
?>

现在我不确定你要通过什么变量,所以我使用了一个简单的骨架,我昨天用它来向你展示它是如何完成的。如果您提供更多代码,我会根据您的情况对其进行编辑。

修改1

下面的代码不正确,因为您在$region_name查询范围内声明了变量if statement,而依赖于该变量的其他代码必须位于该if statement中}。

另一个解决方案是在$region_name之外定义一个空变量if statement,然后在if statement之后,您将不会得到错误的未定义索引。

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

修改2

出现这个错误有两个原因,

  1. 您实际上没有通过网址传递区域名称 - 尽管您使用的是$_POST而不是$_GET

  2. 我在上面的编辑中概述了 2 的原因。您正在使用不在查询范围内的变量。

答案 1 :(得分:1)

将数据传递给display.php的最简单形式是将region_name添加到URL中,如下所示:

href="displayApprovedReservation.php?region_name=<?php echo $region_name; ?>"

display.php中,您可以使用$_GET['region_name']从网址中检索数据。这样做,您需要确保清理输入,因为用户可以很容易地从URL中更改输入。

您收到错误Notice: Undefined variable: region_name的原因是因为数据未发布到网页,因此未设置$_POST['region_name'],因此未在此过程中设置$region_name - 然而,无论设置的变量如何,您仍然在SQL查询中调用它:

$sql="SELECT * FROM approved_reservation WHERE region_name = '$region_name'";

答案 2 :(得分:1)

由于以下原因,您收到了一个未定义的变量:

href不使用方法,也不使用值,也不使用<form>...</form>类型。 表单使用为其方法设置名称属性的输入。

您的代码希望通过表单并使用POST方法传递它。

您想在这里使用的是条件语句中的GET:

if(isset($_GET['region_name']) && !empty($_GET['region_name']) ){
    $region_name = $_GET['region_name'];
    echo $region_name;
}

旁注:如果有人想将网址修改为!empty()

,我使用?region_name=

并在文件名后使用?参数,然后使用=后跟您希望的“值”:

<a href="display.php?region_name=your_value" target="main">Greater Accra Region</a>

反过来会回显“your_value”。

您需要分别修改其值。

在您的情况下,这将读作:

<a href="display.php?region_name=Greater Accra Region" target="main">Greater Accra Region</a>

您还可以在条件语句中添加上述内容:

if($_GET['region_name'] == "Greater Accra Region"){
   echo "Region is Greater Accra Region";
}

可以修改为:

旁注:以下示例检查区域是否等于某个区域,以及是否在URL中修改了值,例如?region_name=

if(isset($_GET['region_name'])){
    $region_name = $_GET['region_name'];
    echo $region_name;

if($_GET['region_name'] == "Greater Accra Region"){
    echo "Region is Greater Accra Region"; }

if(empty($_GET['region_name'])){
    echo "EMPTY"; }

}

现在,看到你的查询,不知道最终目标是什么。

  • 只有您知道并且超出了原始问题的范围。

如果您有一个尚未发布的表单(使用POST方法),那么您可以使用输入:

即:

Greater Accra Region: 
<input name="region_name" value="Greater Accra Region" type="submit">

并使用您现有的POST阵列。

您目前的代码向SQL injection开放。使用mysqli with prepared statementsPDOprepared statements

答案 3 :(得分:1)

有几种方法可以做你想做的事情。您尝试实现的方法需要以下形式:

<form name="selection" method="POST" action="display.php">
    <input name="region" type="radio" value="Greater Accra Region">
</form>

但它看起来不太好,不按你想要的方式工作。

另一种方法就是使用像这样的get变量

<a href="display.php?selection=Greater%20Accra%20Region">Greater Accra Region</a>

然后在您的显示文件上,您可以使用变量$_GET['selection'];来使用您的选择:)