未定义的索引使用MySQL、PHP
我搜索了类似的问题,但没有找到解决问题的方法。如何在PHP中调试MySQL问题?找到这些错误的原因总是非常耗时。在JavaScript中查找/修复错误要容易得多 错误: 注意:未定义的索引:第48行C:\xampp\htdocs\Noobs\u Search\serverCode\findPlayers.php中的角色 注意:第49行C:\xampp\htdocs\Noobs\u Search\serverCode\findPlayers.php中的未定义索引:gender 它指的是以下几行:未定义的索引使用MySQL、PHP,php,mysql,ajax,xampp,Php,Mysql,Ajax,Xampp,我搜索了类似的问题,但没有找到解决问题的方法。如何在PHP中调试MySQL问题?找到这些错误的原因总是非常耗时。在JavaScript中查找/修复错误要容易得多 错误: 注意:未定义的索引:第48行C:\xampp\htdocs\Noobs\u Search\serverCode\findPlayers.php中的角色 注意:第49行C:\xampp\htdocs\Noobs\u Search\serverCode\findPlayers.php中的未定义索引:gender 它指的是以下几行:
$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;
?>
$(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);
});
});
});
<?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;
?>
HTML代码:
<?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;
?>
$(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);
});
});
});
<?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;
?>
看起来你把它拼错了,它是$\u 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 +=
}
尝试将if语句重新格式化为该语句,并在$platerSQL
上添加WHERE
$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);
因为如果两个条件都为true,则旧语句会将查询字符串转换为该字符串。查询字符串上缺少WHERE
条件
$playerSQL = "SELECT * FROM vw_playerTeamName AND role = $role AND gender = $gender";
你能不能在while循环之前尝试打印($result->fetch\u array()
这个$result->fetch\u array())然后你会得到数组数据作为key=>value这个键是索引试着使用结果中的同一个键我在数组中寻找什么?数组([0]=>4[ID]=>4[1]=>Esme[first]=>Esme[2]=>Torosa[last]=>Torosa[3]=>eeyoro@mail.abc[电子邮件]=>eeyoro@mail.abc[4]=>1[team_id]=>1[5]=>Ups[team_name]=>Ups)如果未设置$role
和$gender
(即它们不在GET请求中),则不会将它们添加到mysqli查询中,因此,mysqli查询返回的结果中未定义$row['role']
和$row['gender']
,因此出现错误。检查JavaScript中是否获得了预期值,并处理PHP代码中未设置变量的情况。添加一点,即使mysqli查询中填充了单选按钮值,你会得到类似于SELECT*FROM vw_playerTeamName AND role=$role AND gender=$gender
的东西,这在语法上是不正确的:你需要在WHERE子句中加上单引号,因为变量看起来是字符串。将收到的信息发回,因为数据似乎没有发送过来