2017-03-19 3 views
0

私はローカルホストのウェブサイトを持っています。 2つのデバイスをホットスポットに接続し、サーバーのipを使用してWebサイトにアクセスします。すべてのページが正しく開かれていますが、セッション変数が認識されません。「未定義インデックス」エラーがスローアップします。他のデバイスでウェブサイトを開くときにセッション変数にアクセスできません[PHPコード]

ローカルホストで同じものにアクセスすると、私はこの問題に直面しません。

すべてのファイルでsession_start()を使用しました。

がされるように、ログインDashboard.php

<?php 
session_start(); 

?> 
<html> 
<head><title>Dashboard</title></head> 
<body> 
<form action= "" method = "POST"> 
     <?php echo "Welcome ".$_SESSION['username'].".<br>";   
     ?> 
     <br/>Sex: <select name="sex"> <option value ="Male">Male</option> <option value = "Female">Female</option></select> 
     <br/>Age: <select name="years"> 
      <?php 
       for($i=1; $i<=50; $i++) 
       { 
       echo "<option value=".$i.">".$i."</option>"; 
       } 
      ?> 
       <option name="years"> </option> 
      </select> 
     <br/>Citizen: <select name="citizen"><option value="Singaporean">Singaporean</option><option value="International">International</option></select> 

     <a href="Download.php">Click to Download!</a> 

     <br/><input type="submit" name = "submit2" value = "Save Changes"> or<a href="Login.php">Logout</a> 


</form> 
</body> 
</html> 

<?php 

if(isset($_POST['submit2'])){ 

    $name = $_SESSION['username']; 

      $connect = mysqli_connect("localhost","root", "","nets") or die("Couldn't connect to database"); 
      $query1 = mysqli_query($connect,"SELECT Sex,Age,Citizen FROM users where Name = '$name'"); 
      while ($row = mysqli_fetch_row($query1)) 
      /* { 
       echo "Details Entered in Database:".".<br>"; 
       echo "<br>"; 
       echo "Name:".$_SESSION['username'].".<br>"; 
       echo "Sex:".$row[0].".<br>"; 
       echo "Age:".$row[1].".<br>"; 
       echo "Citizen:".$row[2].".<br>"; 
      }*/ 
      $sex = $_POST['sex']; 
    $years = $_POST['years']; 
    $citizen = $_POST['citizen']; 
      $query2 = mysqli_query($connect, "UPDATE users SET Sex = '$sex', Age='$years', Citizen='$citizen' WHERE Name = '$name'"); 
      echo "Saved changes"; 
} 

?> 

後Login.php

<?php 
session_start(); 

?> 
<html> 
<head><title>LOGIN</title></head> 
<body> 
<form action= "Dashboard.php" method = "POST"> 

     <br/>Name: <input type = "text" name = "name"> 
     <br/>Password: <input type = "password" name = "password"> 
     <br/><input type="submit" name = "submit" value = "submit"> or <a href="Register.php">Register</a> 
</form> 
</body> 
</html> 




<?php 

if(isset($_POST['submit'])){ 

    $name = $_POST['name']; 
    $password = $_POST['password']; 

    $connect = mysqli_connect("localhost","root", "","nets") or die("Couldn't connect to database"); 

    $query = mysqli_query($connect,"SELECT * FROM users WHERE Name = '$name' and Password='$password'"); 
    $count = mysqli_num_rows($query); 

    if($count == 1){ 
     $_SESSION['username'] = $name; 
     echo "Login Successful"; 
    }else{ 
     echo "Invalid Login Credentials"; 
    } 
} 
?> 

の切り取らコードは、

+0

同じホスト名を共有するHTTP Cookieによってセッション値が通信されます。 IPと 'localhost'は異なっています。 –

+0

これを修正する方法はありますか? –

答えて

1

フォームがアクション "Dashboard.php" を持ってお勧めしてください持っていますスクリプトはあなたのログインフォームの提出を処理します。

つまり、if文のコードブロック内のロジックif(isset($_POST['submit'])){はおそらく実行されないため、セッション変数は設定されません。

アクションをLogin.phpに設定するか、空白のままにしてLogin.phpにログインさせ、必要に応じてセッション変数を設定する必要がある場合はDashboard.phpにリダイレクトすることができます。

PHPを使用してリダイレクトする場合は、HTMLの前に行う必要があります。それ以外の場合は動作しません。

+0

if文のコードブロックif(isset($ _ POST ['submit2'])){が実行されているのを見ると、正確に何が必要なのか詳細を教えてください。 –

+0

申し訳ありませんが、私はステートメントでタイプミスをしましたが、少し変更しました。 Login.phpには、コードの一番下にあるif文があり、ユーザのログインを処理してセッション変数を設定する必要があります。フォームアクションは "Dashboard.php"なので、ログインフォームの結果は、最初にifステートメントを実行することなくDashboard.phpに直接送信されます。そのため、ログインフォームの動作を変更する必要があります。空白のままにすると、Dashboard.phpではなくLogin.phpによってフォームが処理されるため、if文も正しく処理されます。 – Asperitas

+0

それはうまくいった。ありがとう@Asperitas –