2016-09-21 8 views
0

こんにちは私は確かにわからないマルチプレックス関数を使用しようとしています。私の最初の一つは、あなたがあなたのユーザ名ajax PHPは常にnullを返します

onkeyup="UsernameTaken(this.value);" 

を入力するときに、他の一つは

onload="BattlePlayers();" 

と一体的に呼び出されたと呼ばれている

機能は、この

var xhttp; 
if (window.XMLHttpRequest) { 
    xhttp = new XMLHttpRequest(); 
    } else { 
    xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
function UsernameTaken(name){ 
    if (name == "") { 
     document.getElementById("UsernameTaken").innerHTML = ""; 
     return; 
    } 
    xhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      document.getElementById("UsernameTaken").innerHTML = this.responseText; 
     } 
    }; 
    xhttp.open("GET", "CheckUsername.php?q="+name, true); 
    xhttp.send(); 
} 
function BattlePlayers(){ 
    xhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      document.getElementById("BattleTable").innerHTML = this.responseText; 
     } 
    }; 
    xhttp.open("GET", "GetPlayers.php", true); 
    xhttp.send(); 
} 

のようなものです常に空白になっているバトルプレイヤーのPHPは

です
<?php 
$link = mysqli_connect("","","",""); 
if (isset($_SESSION['username'])) { 
     $x = 0; 
      $sql = "SELECT * FROM userstats ORDER BY RAND() LIMIT 5; "; 
      $result = mysqli_query($link,$sql); 
      $toecho =""; 
      while($row = mysqli_fetch_assoc($result)){ 
       if($row['username'] !== $_SESSION['username']){//add so it dosent put duplicates 
        $toecho .="<tr>"; 
        $toecho .="<th>".$row['username']." </th>"; 
        $toecho .="<th>Level: ".$row['Level']." </th>"; 
        $toecho .="<th>Player Stats:".$row['Attack']."/".$row['Defence']." </th>"; 
        $toecho .="<th>Win Chance: "; 
        $toecho .= CalculateWinChance($link,$row['Defence']); 
        $toecho .="<input type='hidden' name='hidden1' value='".$row['Defence']."' />"; 
        $toecho .="<input type='hidden' name='hidden2' value='".$row['username']."' />"; 
        $toecho .="<th><input type ='submit' name = 'Attack_Btn' value ='Attack'></th>"; 
        $toecho .="</tr>"; 
       } 
      } 
      echo $toecho; 
     } 
?> 

私はバトルプレイヤーにまったく気付かないようですが、何も出てこないゲットプレイヤーからの警告をエコーし​​てみました。私はjavascriptが異なる段階でその警告を行うことによって呼び出されていることを確認しました。それはちょうど停止しているようだgetplayersに達すると、そのちょうど。私はここで間違って何をしていますか?

+1

'session_start()はどこですか? –

+0

私のメインのPHPエリアのインデックスページの上部にあること – GregHBushnell

+1

'GetPlayers.php'の最上部に' session_start() 'を含める必要があります。 – RamRaider

答えて

1

あなたがajaxリクエストで行っていることを論理的に考えると、リクエストを開始したページとは別個のリクエストであるため、ajax経由で呼び出されているページにセッション変数へのアクセスが必要な場合は、そのスクリプトにsession_start()を含める必要があります。あなたのような標準のPHPページがあった場合

:上記の例のページでは

<?php 
    session_start(); 

    include 'functions.php'; 
    include 'classes.php'; 
    include 'GetPlayers.php'; 
?> 
<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <!-- stuff --> 
    </body> 
</html> 

をスクリプトGetPlayers.phpは、セッションへのアクセス権を持っているでしょう。ここで一方

<?php 
    session_start(); 

    include 'functions.php'; 
    include 'classes.php'; 
?> 
<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <script> 
      xhr=new XMLHttpRequest(); 
      xhr.onreadystatechange=function(){ 
       if(xhr.status==200 && xhr.readyState==4){ 
        alert(xhr.response); 
       } 
      }; 
      xhr.open('GET','GetPlayers.php',true); 
      xhr.send(); 
     </script> 
    </body> 
</html> 

session_start()なしGetPlayers.phpの上部に2つのページが同じセッションを共有していないので、スクリプトがif (isset($_SESSION['username'])) {.....}をチェックするとき、それは失敗します。

関連する問題