sql >> データベース >  >> RDS >> Mysql

ユーザーのセッションデータを保存する方法

    ログインPHPは次のよ​​うに書くことができます

    <?php
        // if PHP > 5.4: if (PHP_SESSION_NONE == session_status()) {
        if ('' == session_id()) {
            session_start();
        }
        if (isset($_SESSION['expires_by'])) {
            $expires_by = intval($_SESSION['expires_by']);
            if (time() < $expires_by) {
                $_SESSION['expires_by'] = time() + intval($_SESSION['expires_timeout']);
            } else {
                session_destroy();
            }
        }
        if (!isset($_SESSION['username'])) {
            Header('Location: ' . $_SERVER['REQUEST_URI']);
            exit();
        }
    ?>
    

    次に、URLをクリックするには、jQueryとAJAXを使用できます。 CSSで「link-block」のようなクラスを宣言し、次のようなURLを記述する必要があります

    echo '<div class="link-block">'.$row['url'].'</div>';
    

    jQueryスクリプトを含めた後、ページのonReadyJavascriptのDIVにクリックハンドラーを追加します。

    $('.link-block').on('click', function(e) {
        $.post('/increase-points.php', { }, function(retval){
            if (retval.newpoints) {
                $('#point-block').html(retval.newpoints);
            }
        });
    });
    

    増加点ハンドラーは、上記と同じコードであるセッションを開き(外部のインクルード "session.php"に入れることができるように)、データベース接続を開く必要があります(別のインクルード...)、次に:

    UPDATE usertable SET points = points + 1 WHERE user_id = {$_SESSION['user_id']};
    

    または、ユーザー名のみを使用している場合(適切にエスケープされていることを確認してください)

    ...WHERE username = '{$escapedSessionUsername}';
    

    ちなみに、を追加する必要があります標準のmysql_* 非推奨の免責事項

    その後、表示される現在のポイントを「points-block」のIDを持つDIVに戻すことができます:

        You have <span id="points-block"></span> points.
    

    データベースからクエリを実行した後、JSONで返すことによって(または、セッションを維持してDBとセッションの両方を更新できます。1つのクエリを節約できます)

        // This in /update-points.php
        $retval = array('newpoints' => $updated_points);
        Header('Content-Type: application/json;charset=utf8');
        die(json_encode($retval));
    

    他の方法でもこれを行うことができますが、リンクdivにアンカーが表示されなかったため、動的なものが必要だと思います。これは主にAJAXを意味します。




    1. Adobe flex/AIRからmysqlにアクセスする

    2. oracle削除クエリに時間がかかりすぎる

    3. OracleのNVL()関数

    4. GROUP BY+CASEステートメント