PHP多个会话在多个页面上进行GET / POST

时间:2013-09-18 07:03:16

标签: php arrays session

我是PHP的新手,只是想完成我的第一个应用... 这是一个房地产页面。 用户可以添加开放日的信息。代码指示添加常规信息。然后图片。这条路线适用于会话。有登录系统。同一个用户在登录时会添加新的开放式房屋并编辑当前的房屋。

有一个指向编辑帐户的链接,此时用户可以编辑任何内容,包含列表,添加图片等。 但是当我走这条路线时,会话会从第一个信息条目中为地址带来相同的值,而不是要编辑的项目。

我的猜测是我基本上有两条路线: a)同时举行两次会议 问题:如何区分它们?怎么称呼他们?我还是无法理解php.net。也许在几个月内。我试过了。

b)我(使用了很多汗水和无尽的夜晚)学习了使用URL的基本_POST。但我学习它的方式对连续页面大多有用。我需要经历多次箍...

问题:有没有办法继续传递帖子并获取几个不同页面的值?或者创建一个全局变量?

除了我研究的内容之外,还有更好的方法吗?

谢谢你的时间。

修改**修改

我被要求在这里放一些代码。 一旦我获得了开放日的所有信息,我有一个文件在DB中插入所有数据,并获取地址,城市和州的地理编码地址,以便在数据库中插入数据(lat,lng)

$username = $_SESSION['user']['username'];

$sql="INSERT INTO braaasil_brokerstour.property(day, hours,laundry_equip, VERY LONG QUERY, ETC.)
VALUE ('$_POST[day]','$_POST[hours]','$_POST[laundry_equip]',VERY LONG QUERY, ETC. ETC'$username')"
    or die ("fail");  

if (!mysqli_query($connection,$sql))
  {
  die('Error: ' . mysqli_error($connection));
  }

$P_ID = $connection->insert_id;
printf ("New Record has id:  %d.\n", $P_ID);
$_SESSION['P_ID']   = $P_ID;
ETC. ETC.

然后,我在SESSION中获得了一些值,以便在不同的页面中使用。

<?php session_start(); 
$address = $_SESSION['address'];
$city = $_SESSION['city'];
$zip_code = $_SESSION['zip_code'];
$P_ID = $_SESSION ['P_ID'];

问题是同一个用户可能会添加新的列表并修复旧的东西,会话就在那里。 pageInsertNew.php(地理编码的东西)获得一个会话会很好。 pageFIX.php(更新/修复内容)创建了一个不同的会话。这样我可以分开东西。

我将使用有关ID和地址的信息在不同的表格中插入带有用户ID和地址的图片,以确保我们可以在出现问题时轻松调试。

非常感谢所有答案。但我需要一整天的时间来理解它们,研究它们,然后我会回来。我是新来的,但我想你可能会收到一封电子邮件,我在这里做了任何改变。

再次感谢您的回复。我不知道今天如何实施它们,让我们希望事情会很快改变。

此外,有些人喜欢发帖/获取,有些人喜欢会话。我无法用我的计算机技能判断这一点。

编辑#2 谢谢imsiso。 这是我需要的第二个价值来源(第一个是在这个问题的上面)。两者都有相同的名称(地址,城市,zip_code)。两者都由同一用户在同一会话中使用。

<?php
  require_once('config.php');       

   $query = sprintf("select P_ID, address, city from property WHERE username =  '".(
                 htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8'))."'");

    $result = mysql_query($query, $db);

    $images = array();

  while ($row = mysql_fetch_array($result)) {
      $address = $_SESSION['address'];
      $city = $_SESSION['city'];
      $zip_code = $_SESSION['zip_code'];
      $P_ID = $_SESSION ['P_ID'];
         echo $P_ID;
        echo $city;


 ?><br />

Edit pictures:

<form action="formAddPic2.php" method="post">
<li> <a href="formAddPic2.php?P_ID=<?php echo $row['P_ID']; ?>">Property ID: <?php  print  $row['P_ID'] ?> </a><br /><br />
&ensp;&ensp;  Address: <?php print $row['address']?>,   <?php print $row['city'] ; ?> 
</li>  
<form>
<?php

正如你所看到的,我已经放弃了会话并返回获取/发布了属性ID,但现在我需要获取地址的值以防万一我开始遇到问题。

因此,在一个循环之后,我将尝试这样做:

$properties=array(
/* like:    id=>array(
        'id'=>id
    ),*/
    1=>array(
        'id'=>1,
        'property_name'=>'echo $row['P_ID']',    // automatic id in database
         'zip_code => 'echo $row['zip_code']',
        'some_other_things'=>'some other value',
    ),
    2=>array(
        'id'=>2,
        'property_name'=>'echo $row['P_ID']',    // automatic id in database
         'zip_code => 'echo $row['zip_code']',
        'some_other_things'=>'some other value',
    ),

);

$_SESSION['properties']=array();
$_SESSION['properties']=$properties;

因此,数组将在循环之后,而不是像@imsiso'中那样调用值。 此外,一个循环可能总是空的,这取决于用户是否必须添加新的列表并修复旧的东西或只是修复或只是添加新的东西。

2 个答案:

答案 0 :(得分:1)

你知道你有一个会话。但是,您经常需要在会话中保存各种数据,例如登录的身份验证,他正在做的事情,多个页面中的表单,购买篮子等等。

如果你想轻松处理会话,你应该使用一个会话处理程序类(用于设置和获取会话值以及安全性)

或者至少你应该在这样的会话中使用数组。

$_SESSION['user_data']=array();
$_SESSION['user_data']['is_logged_in']='yes';
$_SESSION['user_data']['user_id']=106;
$_SESSION['user_data']['user_name']='john';

$products=array(
/* like:    id=>array(
        'id'=>id
    ),*/
    1=>array(
        'id'=>1,
        'product_name'=>'house 1',
        'some_other_things'=>'some other value',
    ),
    2=>array(
        'id'=>2,
        'product_name'=>'house 2',
        'some_other_things'=>'some other value',
    ),
    4=>array(
        'id'=>4,
        'product_name'=>'house 3',
        'some_other_things'=>'some other value',
    ),
);

$_SESSION['products']=array();
$_SESSION['products']=$products;

已更新:已添加说明。

是的,你是对的,实际的数组是

$products=array(
    0=>array('id'=>35,'address'=>'somewhere 1'),
    1=>array('id'=>36,'address'=>'somewhere 2')
);

等于:

$products=array(
    array('id'=>35,'address'=>'somewhere 1'),
    array('id'=>38,'address'=>'somewhere 2')
);

但我自己使用的是product_id而不是默认索引。像:

$products=array(
    35=>array('id'=>35,'address'=>'somewhere 1'),
    38=>array('id'=>38,'address'=>'somewhere 2')
);

现在我可以访问Id等于2的产品数据:

$product[2];

如果我没有这样做,我也会搜索所有产品以找到它。这可能是一种技巧,但它可以在许多地方使用,也可以帮助你。(在其他类似的事情中)。

答案 1 :(得分:0)

我对问题的背景不太清楚;但是,这些指针将有所帮助 -

在会话中存储中间数据是一个非常糟糕的主意。网络服务器意味着无国籍。 (仔细看看)。 Web服务器可以存储的唯一有状态信息是登录标识符;就是这样 - 这是一个非常干净的设计。即使发布需要一段时间,也可以使用它。

另一种方法是去JS。您可以将数据存储在html5 sessionStorage中 - 这非常适合您正在做的事情。你也可以考虑html5 localStorage;并一次性发布数据。

仅供参考 - 通过PHP_SESSIONID cookie跟踪会话。如果页面位于同一域/子域中,则无法创建两个不同的会话;但是可以使用不同的会话变量名称。另请注意 - 大多数登录系统都会创建新的会话标识符。