我有两个页面,其中一个链接到另一个。如何将我的锚(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);
?>
答案 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
出现这个错误有两个原因,
您实际上没有通过网址传递区域名称 - 尽管您使用的是$_POST
而不是$_GET
。
我在上面的编辑中概述了 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 statements或PDO与prepared 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'];
来使用您的选择:)