php中的会话未按预期工作

时间:2017-07-19 11:05:15

标签: php session

我有一个文件" 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

我该怎么做?

3 个答案:

答案 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请求