【问题标题】:fetch id from session and store into a different table从会话中获取 id 并存储到不同的表中
【发布时间】:2014-09-25 18:05:36
【问题描述】:

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

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'); 
}
?>

例如能够为retailer_signup 是

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

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

例如,retailer_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 的值既没有显示也没有存储在数据库中。希望能提供有关此问题的帮助

【问题讨论】:

  • 在retailer_login_session.php 中,“session_start();”在第一行。
  • don't use mysql_* functions in new code它们不再被维护并且是officially deprecated。看到red box?改为了解prepared statements,并使用PDOMySQLiThis article 将帮助您决定哪个。
  • @fortune 我已经在第三行的数据库连接后开始了会话
  • 您的代码结构已关闭。如前所述,您正在混合 MySQL API。首先,您使用retailer_login_session.php 文件中的mysql_* 函数进行连接,然后您将使用包含数据库连接的mysqli_* 函数进行包含include('retailer_login_session.php');。您将需要使用单个数据库连接并使用mysqli_* 函数独占。鉴于下面的答案,如果您尝试过但失败了,请问问自己为什么。
  • @Fred-ii- 干杯!。我什至没有注意到这一点。

标签: php mysql sql session


【解决方案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']."')";

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

【讨论】:

  • 您是否在插入 id 的位置开始会话,只需在该页面顶部开始会话......
  • @user3774056 尝试使用 Dinesh 的答案,但将 $_SESSION['login_session'] =$row['id'];$_SESSION['login_session'] =$login_session; 切换,这是我之前想到的。然后使用('$propertyname','$propertytype','".$login_session."')
  • 好的 @user3774056 如果 Dinesh 之前没有修复它,我稍后会看看我能为你做些什么。我现在正在工作。
【解决方案2】:

首先,您需要在第二段代码中省略 include('retailer_login_session.php');,如果您真的想要包含,则仅对 DB 使用标准包含.

在您的第一段代码中,$user_check=$_SESSION['login_user']; 是空的,因为没有任何东西分配给 $_SESSION['login_user'],所以它只是处于不确定状态。

我认为您想使用表单让某人登录。

您首先需要从输入中分配 POST 变量,然后将其分配给会话变量,然后使用该会话变量并将其分配给变量;我知道这听起来可能有点混乱,但它就是这样做的。

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

以以下模型为基础,并在整个代码中查看 cmets。我是来教你的,而不是用代码喂你,这是“学习”的好方法。

文件 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 statements,或PDO with prepared statements


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

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

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

还有or die(mysqli_error($conn))mysqli_query()

这将有助于故障排除/调试。

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2013-04-06
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多