0

難しい問題ではないと思いますが、行き詰まりました。現在、phpを使用してログインおよびサインアップ(登録)インターフェイスを構築しています。私の考えは直接的です: index.php は「ログイン」と「サインアップ」を示します。データベースにアカウントがない場合は、必要なすべての情報を入力した後、「サインアップ」ページに誘導されます。 「あなたは次のように登録されています」と表示されるページにユーザーを誘導します。問題はここにあります。ユーザーが誰であるかに対応するために $_SESSION['username'] を使用しようとしました。残念ながら、ユーザー名は出力されません。$_SESSION['username'] が設定されているかどうかを確認するために、registered.php で isset() を使用しました。設定されていないことを示していますが、そこにあるはずです!!!

流れはsignup.php→register.php→registered.phpです。私の質問は、$_SESSION['username'] は、session_start() の宣言後に php ファイルに渡される必要があるということです。以下は私のコードです。どこが間違っているか指摘してください。

どうもありがとう。

signup.php

<?php
session_start(); // attention add session_start() again, am I wrong?
$title = "Sign up";
print_r($_SESSION);
?>

<html>
    <head>
        <title><?= $title ?></title>        
        <!--
        <link href="index.css" type="text/css" rel="stylesheet"></link>
        -->
        <link href="signup.css" type="text/css" rel="stylesheet"></link>

        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript" src="index.js"></script>

    </head>

    <body>
        <div id="main-content">

            <form method="post" action="register.php">

                <label><input class="defaultText" title="username" name="username" type="text"></label><br/>
                <label><input class="defaultText" title="email" name="email" type="text"></label><br/>
                <label><input class="defaultText" title="company" name="company" type="text"></label><br/>

                <label class = "password">password:<input name="pass1" type="password" /></label><br/>
                <label class = "password">password (again):<input name="pass2" type="password"/></label><br/>

                <input type="submit" value="Sign up!">
            </form>
            <div style="clear: both;"></div>
        </div>
    </body>
</html>

register.php

<?php

    if(isset($_REQUEST['username']) && isset($_REQUEST['email']) && isset($_REQUEST['company']) && isset($_REQUEST['pass1']) && isset($_REQUEST['pass2'])){

     $username = $_REQUEST['username']; 
     $email = $_REQUEST['email'];
     $company = $_REQUEST['company'];
     $pass1 = $_REQUEST['pass1'];
     $pass2 = $_REQUEST['pass2'];


     if(strlen($username) <= 0) {      
       die("Username must be greater than 0 characters\n");
     }
     if(strlen($email) <= 0) {
       die("Email must be greater than 0 characters\n");
     } 
     if(strlen($company) <= 0) {
       die("Company name must be greater than 0 characters\n");
     }
     if($pass1 != $pass2 && $pass1 <= 0) {
       die("Passwords are not the same.");
     }

     $hash = hash('sha256', $pass1);


     # connect to world database on local computer                                                                                                
     check(mysql_connect("localhost", "root", "123456"), "connect");

     $connect = mysql_connect("localhost", "root", "123456");
        # in order to insert data into database tables, database is already there built via mySQL command from terminal
        # connect with the database

     check(mysql_select_db("product"), "selecting db"); 

     # mysql_real_escape_string() This function must always (with few exceptions) be used to make data safe before sending a query to MySQL. 
     $username = mysql_real_escape_string($username);
     $email = mysql_real_escape_string($email);
     $company = mysql_real_escape_string($company); 

     # this $query query is to send the "insert values" query into a table
     $query = "INSERT INTO admins ( username, hash, email, company ) VALUES ( '$username', '$hash', '$email', '$company' );";
     $results = mysql_query($query);

     check($results, "adding user"); // if not pass show error message

     header("Location: registered.php");
    }

    function check($result, $message) { 
      if (!$result) {
        die("SQL error in $message: " . mysql_error());
      }

      $_SESSION['username'] = $_REQUEST['username'];
      $_SESSION['email'] = $_REQUEST['email'];
      $_SESSION['company'] = $_REQUEST['company'];     

    }
?>

登録済み.php

<?php
$title = "Registered!";
?>

<html>

    <head>
        <title><?= $title ?></title>

        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript" src="index.js"></script>

    </head>

    <body>

<?php

print_r($_SESSION);
if(isset($_SESSION['username']))
    print "hello";
print $_SESSION['username'];
echo $_SESSION['company'];

?>  
        <div id="main-content">


            <h3>You have registered in administration system as <?= $_SESSION['username'] ?></h3>
            <table border="1">
                <tr>
                <th>Name</th>
                <th>Company</th>
                <th>Email</th>
                </tr>

                <tr>

                    <td><?= $_SESSION['username'] ?></td>
                    <td><?= $_SESSION['email'] ?></td>
                    <td><?= $_SESSION['company'] ?></td>

                </tr>

                <h3>please log in into the administration system</h3>
                <h4><a href = "index.php">Log In</a></h4>

            </table> 

        <div style="clear: both;"></div>        

        </div>
    </body>
</html>
4

1 に答える 1

1

session_start();コンテンツの前にすべてのページを追加する必要があります。

register.phpregistered.phpセッションスターターがなく、両方とも使用しています$_SESSION

編集:Mike Brantが言ったように、セッションを開始するグローバルファイルを作成し、コンテンツの前にすべてのファイルに含めます。そうすれば、すべての共通変数とセッションを 1 つのファイルに含めることができます。

于 2012-09-24T16:35:17.643 に答える