0

誰かが私の最新号で私を助けてくれるかどうか疑問に思っています. 私はプログラミングの初心者で、ここで得た助けに本当に感謝しています (だから我慢してください、私たちは皆どこかから始めなければなりません!) :)

基本的に、私はこのアプリケーションを持っており、そのためのログインを作成しました。情報が正常に検証され、完全にログインすると次のページに表示されます。

私が理解できないのは、PHPセッションを開始することですか? これの最後に達成したいことは次のとおりです。

  1. ログインしたユーザーの PHP セッションを開始する
  2. ミニ アプリケーション全体でユーザー ID を保持し、ユーザーが自分で入力しなくても後で別のフォームやデータベースに挿入できるようにします。

私のhtmlコードは次のとおりです。

<!DOCTYPE html>
<html>
<head>


<title>Find A Deal</title>
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
<link rel="stylesheet" href="http://localhost/findadeal/themes/deal.css" />
<style>
    #login-button {
        margin-top: 30px;
    }        
</style>
<script src="http://www.dragan-gaic.info/js/jquery-1.8.2.min.js"></script>    
<script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
<script src="js/custom3.js"></script>


</head>



<body>

<div data-role="page" id="login">
    <div data-theme="a" data-role="header">
        <h3>Find A Deal</h3>
    </div>

    <div data-role="content">

    <?php

if( !isset( $_SESSION ) ){
session_start();
}

if( isset( $_SESSION['username'] ) ){
/* User is logged in */
}


    ?>

        <label for="username">Enter your username:</label>
        <input type="text" value="" name="username" id="username"/>
        <label for="password">Enter your password:</label>
        <input type="password" value="" name="password" id="password"/>  
        <a data-role="button" id="login-button" data-theme="b">Login</a>
    </div>

    <div data-theme="a" data-role="footer" data-position="fixed">

    </div>
</div>

<!--Newly rendered page after successful login!-->

<div data-role="page" id="index">
    <div data-theme="a" data-role="header">
        <h2>Find A Deal</h2>
    </div>

    <div data-role="content">
    <h3></h3>
    <a href="#view" data-role="button" data-icon="search">View Deals</a>
    <a href="http://localhost/findadeal/login/newdeal.php" data-role="button" data-icon="plus">Add Deals</a>
    </div>


</body>
</html>

これは、Ajax リクエストなどを作成する Javascript 関数です。

$(document).on('pagebeforeshow', '#login', function(){ 
$('#login-button').on('click', function(){
    if($('#username').val().length > 0 && $('#password').val().length > 0){
        userObject.username = $('#username').val(); // Put username into the object
        userObject.password = $('#password').val(); // Put password into the object
        // Convert an userObject to a JSON string representation
        var outputJSON = JSON.stringify(userObject);
        // Send data to server through ajax call
        // action is functionality we want to call and outputJSON is our data
        ajax.sendRequest({action : 'login', outputJSON : outputJSON});
    } else {
        alert('Please fill all nececery fields');
    }
});    
});

$(document).on('pagebeforeshow', '#index', function(){ 
if(userObject.username.length == 0){ // If username is not set (lets say after force page refresh) get us back to the login page
    $.mobile.changePage( "#login", { transition: "slide"} ); // In case result is true change page to Index  
}
$(this).find('[data-role="content"] h3').append('Welcome ' + userObject.username); // Change header with wellcome msg
//$("#index").trigger('pagecreate');
});

// This will be an ajax function set
var ajax = {
sendRequest:function(save_data){
    $.ajax({url: 'http://localhost/findadeal/login/json2.php',
        data: save_data,
        async: true,
        beforeSend: function() {
            // This callback function will trigger before data is sent
            $.mobile.showPageLoadingMsg(true); // This will show ajax spinner
        },
        complete: function() {
            // This callback function will trigger on data sent/received complete
            $.mobile.hidePageLoadingMsg(); // This will hide ajax spinner
        },
        success: function (result) {
            if(result == "true") {
                $.mobile.changePage( "#index", { transition: "slide"} ); // In case result is true change page to Index
            } else {
                alert('Login unsuccessful, please try again!'); // In case result is false throw an error
            }
            // This callback function will trigger on successful action
        },
        error: function (request,error) {
            // This callback function will trigger on unsuccessful action                
            alert('Network error has occurred please try again!');
        }
    });
}
}

// object to store username and password. 
var userObject = {
username : "",
password : ""
}

そして最後に、これは私のPHPファイルです:

<?php

session_start();

$var1 = $_REQUEST['action']; 
$jsonObject = json_decode($_REQUEST['outputJSON']); // Decode JSON object into readable PHP object

$username = $jsonObject->{'username'}; // Get username from object
$password = $jsonObject->{'password'}; // Get password from object

mysql_connect("localhost","root","");  // Conect to mysql, first parameter is location, second is mysql username and a third one is a mysql password
@mysql_select_db("findadeal") or die( "Unable to select database"); // Connect to database called test

$query = "SELECT * FROM restaurant WHERE username = '".$username."' and password = '".$password."'";
$result=mysql_query($query);
$num = mysql_numrows($result);

if ($num != 0) {
$_SESSION['username'] = $username;
} 
else {
    echo "false";        
}


?>

誰かが私を助けることができれば、それは素晴らしいことです! セッションは HTML 側で開始されたと思いますが、javascript には適切な要素が含まれています。PHP 側でそれを理解しているのは、私が少し自分自身を失いがちな場所です。ユーザーIDをアプリケーションのさまざまなフォームに渡そうとしていますが、挿入することなくこれを行う方法はありますか?

4

2 に答える 2

3

達成したいことが2つあります

  1. ログインしたユーザーの PHP セッションを開始する
  2. ミニ アプリケーション全体でユーザー ID を保持し、ユーザーが自分で入力しなくても、後で別のフォームやデータベースに挿入できるようにします。

データを$_SESSION配列に保存することで、ユーザーがアクセスするすべての PHP スクリプトでそのデータにアクセスできるようになります。

session_start();セッション配列にアクセスするには、配列にアクセスする前に呼び出す必要があります$_SESSION。PHP の実行ごとに 1 回だけsession_startを呼び出すことを忘れないでください。session_startが複数回呼び出されると、警告またはエラーが生成されます (どちらかは覚えていません)。

$_SESSIONセッションが開始されたかどうかを知るためにアレイが設定されているかどうかを確認できます

if( !isset( $_SESSION ) ){
    session_start();
}

if( isset( $_SESSION['username'] ) ){
    /* User is logged in */
}

この関連する質問PHP User Authentication with Sessions もご覧ください。

回答: @ user2025934

1) session_start(); 最初に配列を開始するために一度だけ呼び出す必要があります。例の最後にある上記のミニ php if ステートメントを、値を渡したいすべての php/html ファイルの先頭に追加します。それを念頭に置いて、上記のコードで必要なものを達成しましたか? (私はあなたの変更でそれを編集しました)

$_SESSIONはい、このコード スニペットを追加すると、配列を配置したどのページからでも配列にアクセスできるようになります。

if( !isset( $_SESSION ) ){
    session_start();
}

2) また、これが機能することを確認するためにこれをテストする方法はありますか? それが機能していることを確認するために、ユーザーのユーザー名が出力される 2 番目の if ステートメントにエコー関数を追加するとします。–

以下のようないくつかの出力をエコーすることは、それが機能しているかどうかをテストする1つまたは多くの方法です

if( isset( $_SESSION['username'] ) ){
    /* User is logged in */
    echo "It Works! - The user is logged in!";
}
于 2013-02-15T21:05:11.077 に答える
1

PHPsession_start();ファイルの先頭に配置します。その後、ログインに成功したら、次の操作を実行できます。

if ($num != 0) {
    $_SESSION['username'] = $username;
}

これにより、ユーザー名がセッションに保存されるため、セッション中に PHP ページ全体でユーザーのユーザー名にアクセスできます。

于 2013-02-15T15:04:58.890 に答える