我有一个文件" test.php"像这样:
<?php
session_start();
unset($_SESSION['ph']);
require 'connection.php';
if(!session_id())
session_start();
else
{
echo session_id();
echo "<br>";
echo var_dump($_SESSION);
}
$ph = 0;
if(isset($_POST['ph']))
if(isset($_POST['submit']))
{
$ph = $_POST['ph'];
$q1 = "select PHONE_CUST_ID from PHONE where PHONE_NO = :ph_bv";
$prepare = oci_parse($conn, $q1);
oci_bind_by_name($prepare, ':ph_bv', $ph);
oci_execute($prepare);
$res = oci_fetch_array($prepare, OCI_ASSOC);
if(!$res)
header('Location:newcustomer.php');
else
header('Location:oldcustomer.php');
}
?>
<!doctype html>
<html lang="en">
<body>
<form method="POST" action="" id="custphoneform">
<label for="PhoneNumber">Enter Phone Number:</label>
<input type="number" name="ph" required>
<input type="submit" value="Submit" name="submit">
</form>
</body>
</html>
&#34; oldcustomer.php&#34;和&#34; newcustomer.php&#34;有类似的代码如下:
<?php
require 'connection.php';
session_start();
if(isset($_SESSION['ph']))
{
echo $_SESSION['ph'];
}
else
echo "Not found";
?>
会话变量无效,给我以下错误:
Notice: Undefined index: ph in D:\xampp\htdocs\myfiles\newcustomer.php on line 4
如果我设置&#34;表单操作&#34;会话正常工作有些价值,但我不想要那个。我想根据用户输入重定向。如何实现呢?
示例:
"test.php"
Enter Phone Number: 100
基于上述值,即100我想将用户引导到不同的页面。如果数据库中存在该号码,则oldcustomer.php
另有newcustomer.php
。
我该怎么做?
答案 0 :(得分:1)
您未在此处为action
属性赋予任何值,因此它始终仅在当前页面上发布数据test.php
。因此,当您尝试访问变量时,您在oldcustomer.php
处收到错误。
<form method="POST" action="" id="custphoneform">
您可以直接将数据发布到oldcustomer.php
,方法是在操作属性中将其指定为
<form method="POST" action="oldcustomer.php" id="custphoneform">
或者您应该将数据存储在$_SESSION
全局变量中,以便您可以在项目的任何位置访问它
$_SESSION['ph'] = $_POST['ph'];
在oldcustomer.php
中使用此变量作为
<?php
session_start();
if(isset($_SESSION['ph'])){
echo $_SESSION['ph'];
}else{
echo "Phone number not found";
}
?>
答案 1 :(得分:1)
您在表单发布后重定向。那时新请求将被初始化,其中不包含发布数据。您可以做的是test.php
分配会话,然后在任何页面中使用
<强> test.php的强>
<?php
session_start();
require 'connection.php';
$ph = 0;
if(isset($_POST['ph']))
if(isset($_POST['submit']))
{
$ph = $_POST['ph'];
$q1 = "select PHONE_CUST_ID from PHONE where PHONE_NO = :ph_bv";
$prepare = oci_parse($conn, $q1);
oci_bind_by_name($prepare, ':ph_bv', $ph);
oci_execute($prepare);
$res = oci_fetch_array($prepare, OCI_ASSOC);
if(!empty($_POST['ph']))
$_SESSION['ph'] = $_POST['ph']; //assign value to session
if(!$res)
header('Location:newcustomer.php');
else
header('Location:oldcustomer.php');
}
?>
oldcustomer.php 和 newcustomer.php
<?php
session_start();
echo $_SESSION['ph'];
?>
答案 2 :(得分:0)
你重定向到xxxcustomer.php(行header('Location: ...);
。这将是一个GET请求。
所以$ _POST是空的。
所以if()不会被执行。 {}丢失,因此接下来将执行回显线。
但没有设置$ _SESSION ['ph']&gt;&gt;&gt;警告缺失指数ph
修改强> 我想你最好在那些xxxcustomer.php文件上做一个include()?
编辑2
当你在问题中改变你的代码时,这个答案就再也没有意义了。 底线仍然存在:重定向后,您将松开$ _POST中的值,因为它不再是POST请求