【问题标题】:How to start a session? [closed]如何开始会话? [关闭]
【发布时间】:2014-10-07 11:12:50
【问题描述】:

我希望我的 earth.php 文件在用户输入 mysite.com/earth.php 时找到用户 ID。我想要这个,因为我希望将 id 放在一个 sql 代码中,当用户输入 mysite.com/earth.php 时,该代码将发送到数据库。而且我认为我必须在用户登录时启动会话以帮助 earth.php 查找用户 ID?有人可以帮助我吗,因为我不知道该怎么做。

这是我的 earth.php 文件:

<?php
    error_reporting(E_ALL);
ini_set('display_errors', '1');

    session_start();
$id = $_SESSION['id'];
session_write_close();

    $verbindung = mysql_connect("localhost","root","******");
    mysql_select_db("lan");

if(isset($_SESSION['id'])) {
  mysql_query("UPDATE users SET ally='3' WHERE id='$id'");  
}

     ?>

这是我希望在用户进入 mysite.com/earth.php 时将其更改为 3 的值

这是我的 login.php 文件

请帮忙,我一直在努力解决这个问题。

【问题讨论】:

  • 您是否真的将$_SESSION['id'] 设置为具有值?
  • 您已经开始了您的会话而没有实际填充它
  • $_SESSION['id'] = $something
  • 您的用户 ID 在哪里生成。他们在导航到 earth.php 之前是否在 mysite.com 中使用了这些 userId。
  • 当他们登录时,您可能拥有 login.php 的登录详细信息。正确的?那里使用 session_start(); $_SESSION['id']=$_POST['userid'];//这个userid是登录表单中输入字段的名称

标签: php mysql session


【解决方案1】:

你可以这样做

<?php

define('DB_TYPE', 'mysql');
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'dbname');
define('DB_USER', 'root');
define('DB_PASS', 'password');

session_start();

try {
    // create a new instance of a PDO connection
    $db = new PDO(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
    // if the connection fails, display an error message
    echo 'ERROR: ' . $e->getMessage();
}

if(isset($_POST['username']) && !empty($_POST['username'])) {

    $username = $_POST['username'];

    $sql = 'SELECT userid, username FROM users WHERE username = :username';

    $stmt = $db->prepare($sql);
    $stmt->bindValue('username', $username);
    $stmt->execute();
    $result = $stmt->fetchAll();

    $_SESSION['id'] = $result[0]['userid'];

    var_dump($_SESSION['id']);  //this will show the the session
}

?>

【讨论】:

  • 这是一个登录示例。表单操作会在这里,获取用户的 id,然后设置会话。我会更新它,以便检查用户名是否存在,如果存在,则设置会话,否则向用户发送消息
  • 那么,我可以用我现在使用的 login.php 替换这段代码吗?
  • 这取决于你,但我不知道你的 login.php 是什么样的。这就是您要设置会话的地方。也看看学习 PDO 或 MySQLi(我更喜欢 PDO)
  • 我的登录文件是这样的prntscr.com/4tuxgf
  • 据我所知,我没有看到任何登录信息。你有一个包含用户的数据库吗?
【解决方案2】:

我从您的代码中看到,$_SESSION['id'] 是空的。为它设置一个值。我看到你编辑了你的帖子。然后你只需要在开始会话后包含你的文件,比如

session_start(); include_once 'path/to/login/php/login.php;

【讨论】:

  • 虽然这是正确的,但请用 sn-p 的代码解释一下问题
  • 那我应该把这段代码放在哪里呢? $_SESSION['id'] = $id;
  • $id 需要有一个值 @EmrikAhlström 才能设置会话。
  • 如何给它一个值?
  • 当用户使用您的 login.php 登录时,您在此处设置会话。我假设您使用用户名或其他内容查询数据库并返回一个 ID。在会话中设置该 ID
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2023-03-16
  • 2017-12-11
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多