0

こんにちは、データベースにコース用とユーザー用の 2 つのテーブルがあり、それぞれに id 列があります。

私はそれらの間の関係を作成しようとしています.1人のユーザーが1つのコースにサブスクライブしています. コースIDの列とユーザーIDの列を持つサブスクリプションと呼ばれる3番目のテーブル内に保存しようとしている結果。

ユーザーは、新しいセッションに接続されたログインを通過した後に登録されています。ユーザーが購読リンクをクリックした後、

<a href='subscribe.php?id=".$row['id']."'>subscribe!</a>

それらは、データベース情報に挿入されるバックエンド php ページに移動します。

<?php 
session_start();

?>
   $userid = $_SESSION['userID'];    
   $cursoid = $_GET['id'];

    mysql_connect("localhost", "username", "password") or die(mysql_error()) ; 
    mysql_select_db("test") or die(mysql_error()) ; 


    mysql_query("INSERT INTO `subscriptions` 
                     (curso_id, user_id) 
                     VALUES ('$cursoid', '$userid ')")
                         or die(mysql_error()); 

この時点で、コースのIDを取得し、その中に挿入しました。問題は、ユーザーIDが何も取得されていないことです。現在ログインしているユーザーの ID を取得するにはどうすればよいですか?

ログイン機能のクラスのコードは次のとおりです。

    public function userLogin() {
$success = false;
try{
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $con->prepare( $sql );
$stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
$stmt->execute();

$valid = $stmt->fetchColumn();

if( $valid ) {
$success = true;

}


$con = null;
return $success;
}catch (PDOException $e) {
echo $e->getMessage();
return $success;

$user = $stmt->fetchObj();

    if( $user->user_id > 0 ) {

        $success = true;

        // User has been successfully verified, lets sessionize his user id so we can refer to later
        $_SESSION['userID'] = $user->user_id;}

}
}

最後に、ログイン関数のコードを次に示します。

session_start();
$usr = new Users;
$usr->storeFormValues( $_POST );
if( $usr->userLogin() ) {
    header( 'Location: cursos.php' ) ;
    $_SESSION["loggedIn"] = true;
    $_SESSION['username'] = $_POST['username'];
    $_SESSION['password'] = $_POST['password'];
    $_SESSION['id'] = $_POST['id'];
4

3 に答える 3

1

セッションを操作するたびに、ファイルの先頭でsession_start関数を呼び出す必要があります。login 関数で呼び出しましたが、subscribe.php では呼び出しません。これを試して:

session_start();

$userid = $_SESSION['id'];
$cursoid = $_GET['id'];
//rest of the code
于 2013-10-01T23:15:08.737 に答える