2016-04-11 93 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";