2016-04-11 171 views
0

我搜索了類似的問題,但我無法找到解決我的問題。我如何去調試PHP中的MySQL問題,比如這個?找到這些錯誤的原因總是非常耗時。在JavaScript中查找/修復錯誤非常容易。未定義的索引使用MySQL,PHP

錯誤:

說明:未定義指數:用C的作用:\ XAMPP \ htdocs中\ Noobs_Search \ serverCode \ findPlayers.php在線路48上

說明:未定義指數:性別在C:\ XAMPP \ htdocs中\ Noobs_Search \ serverCode \ findPlayers.php上線49

它指的是這些行:

$role = $row['role']; 
$g  = $row['gender']; 

PHP代碼:

<?php 

require "connect.php"; 

$searchBy = $_GET["field"]; 
$searchText = $_GET["text"]; 

$playerSQL = "SELECT * 
       FROM vw_playerTeamName"; 

if(isset($GET_["role"])) 
{ 
    $role  = $_GET["role"]; 
    $playerSQL .= " AND role = $role";// .= is same as += 
} 

if(isset($GET_["gender"])) 
{ 
    $gender  = $_GET["gender"]; 
    $playerSQL .= " AND gender = $gender";// .= is same as += 
} 

$result = $mysqli->query($playerSQL); 

$pTable = "<div class='table'> 
     <div class='heading'> 
      <div class='cell'>ID</div> 
      <div class='cell'>First</div> 
      <div class='cell'>Last</div> 
      <div class='cell'>Email</div> 
      <div class='cell'>Team</div> 
      <div class='cell'>Gender</div> 
      <div class='cell'>Role</div> 
     </div>"; 

while($row = $result->fetch_array()) 
{ 
    $ID  = $row['ID']; 
    $first = $row['first']; 
    $last = $row['last']; 
    $email = $row['email']; 
    $team = $row['team_name']; 
    $role = $row['role']; 
    $g  = $row['gender']; 

    $pTable .= "<div class='row'> 
        <div class='cell'>$ID</div> 
        <div class='cell'>$first</div> 
        <div class='cell'>$last</div> 
        <div class='cell'>$email</div> 
        <div class='cell'>$team</div> 
        <div class='cell'>$g</div> 
        <div class='cell'>$role</div> 
       </div>"; 
} 

$pTable .= "</div>"; 

$mysqli->close(); 

echo $pTable; 
?> 

的JavaScript:

$(document).ready(function() 
{ 

    $('#search').click(function() 
    { 
     var searchField = $("#searchType").val(); 
     var searchText = $("#searchText").val(); 
     var g   = $("input[name=gender]:checked").val(); 
     var r   = $("input[name=role]:checked").val(); 

     $.get("serverCode/findPlayers.php", 
     { 
      field:searchField, 
      text:searchText, 
      role:r, 
      gender:g 
     },function(response) 
     { 
      $("#placeholder").html(response); 
     }); 

    }); 

}); 

HTML代碼:

<?php 

$doc = "<!DOCTYPE html> 
      <html> 
       <head> 
        <title>Noobs Search Page</title> 
        <script src='clientCode/jquery-1.12.2.min.js'></script> 
        <script src='clientCode/search.js'></script> 
        <link href='css/tableStyle.css' rel='stylesheet'> 
       </head> 
      <body> 

       <select id='searchType'> 
        <option value='first'>First Name</option> 
        <option value='last'>Last Name</option> 
        <option value='email'>Email</option> 
       </select> 

       <input id='searchText' type='text' name='text'> 

       <p>Role<br> 
        <input type='radio' name='role' value='Pion'>Pion 
        <input type='radio' name='role' value='Captain'>Captain 
        <input type='radio' name='role' value='Assistant Captain'>Assistant Captain 
       </p> 

       <p>Gender<br> 
        <input type='radio' name='gender' value='M'>Male 
        <input type='radio' name='gender' value='F'>Female 
       </p> 

       <p> 
        <input type='button' name='search' id='search' value='search'> 
        <input type='button' name='clear' value='clear'> 
       </p> 

       <div id='placeholder'></div> 

      </body> 
     </html>"; 

echo $doc; 
?> 
+0

你能'print_r'的'$ result-> fetch_array()' –

+0

嘗試while循環之前做的print_r($ result-> fetch_array()),然後你會得到你的陣列數據的關鍵= >值的關鍵是索引嘗試使用你得到的結果中的相同的鍵 – PacMan

+0

我在數組中尋找什麼?數組([0] => 4 [ID] => 4 [1] => Esme [first] => Esme [2] => Torosa [last] => Torosa [3] => eeyoro @ mail .abc [email] => [email protected] [4] => 1 [team_id] => 1 [5] => Ups [team_name] => Ups) – Calisto

回答

0

看起來你已經是拼寫錯誤是$ _GET

if(isset($_GET["role"])) 
{ 
    $role  = $_GET["role"]; 
    $playerSQL .= " AND role = $role";// .= is same as += 
} 

if(isset($_GET["gender"])) 
{ 
    $gender  = $_GET["gender"]; 
    $playerSQL .= " AND gender = $gender";// .= is same as += 
} 
+0

哦,我錯過了!我仍然得到錯誤tho – Calisto

+0

<?php 要求「connect.php」; var_dump($ _ GET); ?> 回發你看到的數據似乎沒有被髮送過來 –

0

嘗試重新格式化您的if語句並在其上添加WHERE$platerSQL

$playerSQL = "SELECT * 
       FROM vw_playerTeamName"; 

if(isset($GET_["role"])) 
{ 
    $role  = $_GET["role"]; 
    $playerSQL .= " WHERE role = '$role'";// .= is same as += 

    if(isset($GET_["gender"])) 
    { 
     $gender  = $_GET["gender"]; 
     $playerSQL .= " AND gender = '$gender'";// .= is same as += 
     //$playerSQL will be SELECT * FROM vw_playerTeamName WHERE role = '$role' AND gender = '$gender' 
    } 

    //if there is no gender playerSQL will be SELECT * FROM vw_playerTeamName WHERE role = '$role' 
} 

elseif(isset($GET_["gender"])) 
{ 
    $gender  = $_GET["gender"]; 
    $playerSQL .= " WHERE gender = '$gender'";// .= is same as += 
    // $playerSQL will be SELECT * FROM vw_playerTeamName WHERE gender = '$gender' 

} 

$result = $mysqli->query($playerSQL); 

因爲舊的語句使您的查詢字符串到這一點,如果你有真正的兩種狀態。您的查詢字符串上缺少WHERE條件。

$playerSQL = "SELECT * FROM vw_playerTeamName AND role = $role AND gender = $gender";