从会话中获取id并存储到另一个表中

时间:2014-09-25 18:05:36

标签: php mysql sql session

我使用会话创建了一个用户登录注销表单。我用于会话的代码是

retailer_login_session.php

<?php
$connection = mysqli_connect("as.com", "as", "as");
$db = mysqli_select_db("as", $connection);
session_start();
$user_check=$_SESSION['login_user'];

$ses_sql=mysqli_query("select * from retailer_signup where id='$user_check'", $connection);

$row = mysqli_fetch_assoc($ses_sql);

$login_session =$row['id'];
$user_firstname = $row['firstname'];
$user_lastname = $row['lastname'];

if(!isset($login_session)){
mysqli_close($connection); 
header('Location: index.html'); 
}
?>

例如,零售商的签名是

id  firstname    lastname    email                password
1   f.retailer   l.retailer  retailer@gmail.com   retailer

用户的主页需要显示table named retailer_add_property中的项目列表。除了列表,我希望在用户上显示零售商的ID。主页并进一步将其保存到数据库

例如零售商_add_property的表是

id  propertyname  propertytype  retailerid
1   n.property    t.property   

我用于在用户的个人资料页面上显示ID的代码是

<div class="form-group">
    <label class="col-lg-3 control-label">Retailer Unique ID:</label>
        <? echo $login_session;?>
</div>

有助于在后端数据库中插入表单值的php代码是

<?php
include('retailer_login_session.php');

$con=mysqli_connect("ab.com","ab","ab","ab");
// Check connection
if (mysqli_connect_errno()) 
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

// escape variables for security
$propertyname = mysqli_real_escape_string($con, $_POST['propertyname']);
$propertytype = mysqli_real_escape_string($con, $_POST['propertytype']);

$sql="INSERT INTO retailer_add_property(propertyname,propertytype,retailerid) VALUES ('$propertyname','$propertytype','$login_session')";

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

header("Location: index.html");
mysqli_close($con);
?>

我的问题是id的值既未显示也未存储在数据库中。希望得到一些关于这个问题的帮助

2 个答案:

答案 0 :(得分:1)

在会话中保存该ID

$login_session =$row['id'];

store in session

$_SESSION['login_session'] =$row['id'];

并插入它

$sql="INSERT INTO retailer_add_property(propertyname,propertytype,retailerid) VALUES ('$propertyname','$propertytype','".$_SESSION['login_session']."')";

并且不要忘记在您希望使用会话变量的每个页面上启动会话

答案 1 :(得分:0)

首先, 您需要从第二个代码体中省略include('retailer_login_session.php');,如果您真的想要,请仅使用标准包含数据库包括。

在您的第一段代码中$user_check=$_SESSION['login_user'];为空,因为没有为$_SESSION['login_user']分配任何内容,所以它只是坐在那里。

我认为你想使用表格登录。

首先需要从输入中分配POST变量,然后将其分配给会话变量,然后使用该会话变量并将其分配给变量;我知道这可能听起来有点令人困惑,但这就是它的完成方式。

然后,您需要使用while循环遍历表,并将变量分配给您要使用的行。

基于以下模型,并查看整个代码中的注释。我来这里是为了教你,而不是用代码舀取你, 这是“学习”的好方法。

文件1)

<?php 
session_start();

$DB_HOST = "xxx"; // replace with yours
$DB_NAME = "xxx"; // ...
$DB_USER = "xxx"; // ...
$DB_PASS = "xxx"; // ...

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
  die('Connection failed [' . $conn->connect_error . ']');
}

// $_POST['propertyname'] = 12345; // for testing purposes only
$var = $_POST['propertyname'];
$_SESSION['login_user'] = $var;
$user_check= $_SESSION['login_user'];

$ses_sql=mysqli_query($conn,"select * from your_table where column_name='$user_check'");

    while($row = mysqli_fetch_assoc($ses_sql)){

    $login_session = $row['column_name']; // this matches the WHERE clause
    $user_firstname = $row['firstname'];
    $user_lastname = $row['lastname'];

    echo $login_session; // for testing purposes
    }

if(isset($_SESSION['login_user'])){
    echo $user_check; // will echo from entered POST

$login_session = $user_check;
    echo "<br>";
    echo $login_session; // will echo same from entered POST. Test
}

// var_dump($_SESSION); // tool to check what is in memory for session

文件2)

<?php 
session_start();

$DB_HOST = "xxx"; // replace with yours
$DB_NAME = "xxx"; // ...
$DB_USER = "xxx"; // ...
$DB_PASS = "xxx"; // ...

$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
  die('Connection failed [' . $conn->connect_error . ']');
}

if(isset($_SESSION['login_user'])){

$login_session = $_SESSION['login_user'];
echo $login_session;  // for testing purposes

$sql="INSERT INTO your_table (the_column) VALUES ('$login_session')"; // keep $login_session

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

}

// var_dump($_SESSION); // tool to check what is in memory for session

<强> 旁注:

这些代码行不正确,因此您知道,这些代码在第一个代码体中。

$db = mysqli_select_db("as", $connection);
$ses_sql=mysqli_query("select * from retailer_signup where id='$user_check'", $connection);

使用mysqli_

时,数据库连接首先出现

例如:

$db = mysqli_select_db($connection,"as");
$ses_sql=mysqli_query($connection,"select * from retailer_signup where id='$user_check'");

更安全的方法:(阅读它们,它们是值得的。)

Use mysqli_ with prepared statementsPDO with prepared statements


如果您遇到任何问题,请使用error reporting

将其放在每个文件的顶部:

error_reporting(E_ALL);
ini_set('display_errors', 1);

以及or die(mysqli_error($conn))mysqli_query()

它有助于排除故障/调试。