2015-04-19 71 views
-1

我試圖用php,ajax和jquery製作一個非常基本的瀏覽器MMORPG。然而,網頁似乎沒有正確地與MySQL服務器交互。JQuery Ajax不與MySQL進行交互

這裏是我的PHP類,它定義了一些SQL函數:

<?php 
class Db { 
protected static $connection; 

public function connect() { 
    if(!isset(self::$connection)) { 
     $config = parse_ini_file('config.ini'); 
     self::$connection = new mysqli('localhost',$config['username'],$config['password'],$config['dbname']); 
    } 
    if(self::$connection === false) { 
     return false; 
    } 
    return self::$connection; 
} 

public function query($query) { 
    $connection = $this -> connect(); 
    $result = $connection -> query($query); 
    return $result; 
} 

public function select($query) { 
    $rows = array(); 
    $result = $this -> query($query); 
    if($result === false) { 
     return false; 
    } 
    while ($row = $result -> fetch_assoc()) { 
     $rows[] = $row; 
    } 
    return $rows; 
} 

public function error() { 
    $connection = $this -> connect(); 
    return $connection -> error; 
} 

public function quote($value) { 
    $connection = $this -> connect(); 
    return "'" . $connection -> real_escape_string($value) . "'"; 
} 
public function close() 
{ 
    mysqli_close(self::$connection); 
} 
} 
?> 

隨着config.ini文件引用它:

[database] 
username = root 
password = *** 
dbname = *** 

(密碼和數據庫名已被省略,但我已經檢查它們是否正確。)

這是我的validation.php文件,登錄使用:

<?php 
include 'DbClass.php'; 
$db = new Db(); 
$name= = $db -> quote($_POST['user_name']); 
$pass=md5($db -> quote($_POST['password'])); 
$rows = $db -> select("select * from players where name=" . $name . " and password=" . $pass); 
if($rows) 
{ 
    echo json_encode("1"); 
} 
else 
{ 
    echo json_encode("0"); 
} 

?> 

這裏是登錄JavaScript文件,其中包含在我的索引頁上調用的函數。

function login() 
{ 
     $("#msgbox").removeClass().addClass('messagebox').text('Validating....').fadeIn(1000); 
     $.ajax({ 
      url : 'scripts/php/validation.php', 
      type : 'POST', 
      data : { user_name:$('#username').val(),password:$('#password').val() 
     }, 
     dataType:'json', 
     success : function(data) { 
      if(data == 1) 
       { 
         $("#msgbox").fadeTo(200,0.1,function() 
         { 
          $(this).html('Logging in...').addClass('alert alert-success').fadeTo(900,1, 
          function() 
          { 
           buildPage(); 
          }); 

         }); 
      } 
      else 
      { 
       $("#msgbox").fadeTo(200,0.1,function() 
        { 
         $(this).html('Your login details are incorrect').addClass('alert alert-danger').fadeTo(900,1); 
        });  
      } 
     } 
    }); 
} 

function registration() 
{ 
     document.getElementById("registerBox").innerHTML = "<form class='form-horizontal' method='post' action='' id='register_form'>" + 
         "<div class='row'><div class='col-md-6 column'><div class='control-group'>" + 
         "<label class='control-label' for='username'>Username</label><div class=''controls'>" + 
          "<input type='text' id='registerUsername' placeholder='Username'>" + 
         "</div></div>" + 
         "<div class='control-group'>" + 
         "<label class='control-label' for='password'>Password</label>" + 
         "<div class='controls'>" + 
          "<input type='password' id='registerPassword' placeholder='Password'>" + 
         "</div><br></div>" + 
         "<div class='control-group'>" + 
         "<label class='control-label' for='rePassword'>Retype Password</label>" + 
         "<div class='controls'>" + 
          "<input type='password' id='rePassword' placeholder='Retype Password'>" + 
         "</div><br></div><div id='registerMsgbox'></div></div>" + 
         "<div class='col-md-3 column'>" + 
         "<b><u>Choose a Class</b></u><br><div id='characters'></div>" + 
         "</div></div>" + 
         "<div class='control-group'>" + 
         "<div class='controls'>" + 
          "<input name='Submit' type='button' onclick='javascript:register()' value='Register' class='btn btn-success'/>" + 
         "</div></div></form>"; 
     $.ajax({ 
     url : 'scripts/php/getCharacters.php', 
     type : 'POST', 
     data : {type:'classes' 
     }, 
     dataType:'json', 
     success : function(data) {    
      buildClasses(data); 
     } 
    }); 
} 

function loginPage() 
{ 
     document.getElementById("registerBox").innerHTML = "<form class='form-horizontal' method='post' action='' id='login_form'>" + 
         "<div class='control-group'>" + 
         "<label class='control-label' for='username'>Username</label>" + 
         "<div class='controls'>" + 
          "<input type='text' id='username' placeholder='Username'></div></div>" + 
         "<div class='control-group'> " + 
         "<label class='control-label' for='password'>Password</label>" + 
         "<div class='controls'>" + 
          "<input type='password' id='password' placeholder='Password'>" + 
         "</div><br>" + 
          "<div id='msgbox'></div></div>" + 
         "<div class='control-group'>" + 
         "<div class='controls'>" + 
          "<input name='Submit' type='button' onclick='javascript:login()' value='Login' class='btn btn-success'/>&nbsp;&nbsp;" + 
          "<input name='Submit' type='button' onclick='javascript:registration()' value='Register' class='btn btn-success'/>" + 
         "</div>" + 
         "</div>" + 
        "</form></div><div class='modal-footer'></div>"; 
} 

function buildClasses(data) 
{ 
    var characterDiv = ""; 
    for(var i = 0; i < data.length; i++) 
    { 
     characterDiv += "<div class='characterBox'><input type='radio' name='radioClasses' value='" + data[i].id + "'><img src='media/characters/heroTiles/" + data[i].pic + ".png'>" + data[i].name + "</div>"; 
    } 
    document.getElementById("characters").innerHTML = characterDiv; 
} 

我也有一個註冊腳本,不會做任何事情到數據庫要麼,但我想對於具有覆蓋的頁面,可能不要求張貼更少的代碼的緣故,因爲我承擔問題是在我的數據庫函數類或這些其他地方之一。

+0

嗯,我無法從描述中提取問題......它是什麼? – sitilge

+0

@sitilge查詢結果沒有找到返回頁面的方式(並且在我的註冊頁面中,新信息未被添加到數據庫中。) –

+0

結果是什麼? – sitilge

回答

0

你爲什麼認爲它不與mysql進行交互?您是否嘗試過使用瀏覽器開發人員控制檯(網絡頁面)查看請求是否正在發送? 你可以發佈這些請求的一些截圖嗎?

+0

如果您指的是Chrome開發者控制檯,它仍然是空白的。當我說「沒有互動」時,我會首先在請求中包含某些錯誤,以防止它被髮送。這就是爲什麼我包含腳本和函數的原因。 –

+0

啊,網絡頁面。我看到你現在選擇了哪個選項卡,我無法發佈它的截圖,因爲我沒有10個聲望,但是這是鏈接到圖像的鏈接:[link](http://i.stack.imgur.com/ bDQCX.png) –

0

我解決了這個問題,事實證明這是由同一端口上的衝突MySQL服務引起的。 facepalm 對不起,如果我浪費你的時間。我們每隔一段時間都會犯一些愚蠢的錯誤......