我使用会话创建了一个用户登录注销表单。我用于会话的代码是
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的值既未显示也未存储在数据库中。希望得到一些关于这个问题的帮助
答案 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
循环遍历表,并将变量分配给您要使用的行。
基于以下模型,并查看整个代码中的注释。我来这里是为了教你,而不是用代码舀取你, 这是“学习”的好方法。
<?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
<?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()
它有助于排除故障/调试。