首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP多个会话不能在多个页面上获取/发布

PHP多个会话不能在多个页面上获取/发布
EN

Stack Overflow用户
提问于 2013-09-18 07:03:16
回答 2查看 1.8K关注 0票数 0

我对PHP很陌生,只是想完成我的第一个应用程序.这是房地产页面。用户可以添加开放的信息。代码指示添加一般信息。然后是照片。此路由对会话非常有效。有登录系统。同一个用户在登录时都会添加新的开放屋和编辑当前的开放屋。

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

我的猜测是,我基本上有两条路线:( a)同时有两个疗程

问题:如何区分它们?怎么打电话给他们?我只是还不明白php.net。也许几个月之内。我试过了。

(经过大量的汗水和无尽的夜晚之后),我学会了使用网址的基本_POST。但是我学习它的方式对于连续的页面来说是非常有用的。我需要穿过多个圈..。

问题:是否有一种方法可以继续传递帖子并在几个不同的页面上获取值?还是创建一个全局变量?

除了我所研究的,还有什么更好的方法来做这件事吗?

谢谢你抽出时间。

编辑**编辑

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

代码语言:javascript
复制
$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.

我在会话中得到了一些值,可以在不同的页面中使用。

代码语言:javascript
复制
<?php session_start(); 
$address = $_SESSION['address'];
$city = $_SESSION['city'];
$zip_code = $_SESSION['zip_code'];
$P_ID = $_SESSION ['P_ID'];

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

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

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

再次感谢你的所有回应。我不知道今天该如何实施,希望事情能很快改变。

此外,一些喜欢post/get的人和一些人更喜欢会话之间也存在这个问题。我现在无法用我的计算机技能来判断这一点。

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

代码语言:javascript
复制
<?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,但是现在我需要获得地址的值,以防出现问题。

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

代码语言:javascript
复制
$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回答中那样调用值。另外,一个循环可能总是空的,这取决于用户是必须添加新的列表和修复旧的内容,还是只修复或仅仅添加新的内容。

EN

回答 2

Stack Overflow用户

发布于 2013-09-18 08:17:36

你知道你有一个疗程。但是,您通常需要在会话中保存各种数据,比如身份验证、登录人员、他正在做什么、在几个页面中形成表单、购买篮等等。

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

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

代码语言:javascript
复制
$_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;

更新:添加了描述。

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

代码语言:javascript
复制
$products=array(
    0=>array('id'=>35,'address'=>'somewhere 1'),
    1=>array('id'=>36,'address'=>'somewhere 2')
);

与以下各项相等:

代码语言:javascript
复制
$products=array(
    array('id'=>35,'address'=>'somewhere 1'),
    array('id'=>38,'address'=>'somewhere 2')
);

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

代码语言:javascript
复制
$products=array(
    35=>array('id'=>35,'address'=>'somewhere 1'),
    38=>array('id'=>38,'address'=>'somewhere 2')
);

现在,我可以通过以下方式访问Id等于2的产品的数据:

代码语言:javascript
复制
$product[2];

如果我没有那样做的话,我已经搜索了所有的产品,找不到了。这可能是一种诡计,但它在许多地方都被使用,也可以帮助你。(在其他类似的事情中)。

票数 1
EN

Stack Overflow用户

发布于 2013-09-18 07:12:18

我不太清楚这个问题的背景,不过,这些建议会有帮助的-

在会话中存储中间数据是一个非常糟糕的想法。are服务器应该是无状态的。(查一下)。very服务器可以存储的唯一有状态信息是登录标识符;仅此而已--这是一个非常干净的设计。即使发布需要一段时间,您也可以使用它。

另一条路线是去JS。您可以将数据存储在html5 sessionStorage中--这非常适合您所做的工作。您也可以考虑html5 localStorage;并一次性发布所有数据。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18865822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档