簡體   English   中英

從會話中獲取ID並將其存儲到另一個表中

[英]fetch id from session and store into a different table

我已經使用會話制作了一個用戶登錄-注銷表單。 我用於會話的代碼是

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_propertytable 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>

有助於在后端將form的值插入數據庫中的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的值既不會顯示也不會存儲在數據庫中。 希望對問題有所幫助

將該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']."')";

並且不要忘記在希望使用會話變量的每個頁面上啟動會話

首先,您需要省略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_時,數據庫連接mysqli_

例如:

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

一個更安全的方法:(仔細閱讀這些內容,他們是值得的)。

mysqli_與預處理語句一起使用 ,或PDO與預處理語句一起使用


如果有任何問題,請使用錯誤報告

將其放在每個文件的頂部:

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

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

這將有助於故障排除/調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM