使用 sql 查询对 table 进行排序,PHP 的未定义索引
Sorting table using sql query, undefined index for PHP
我目前正在编码以对 table 列中的名称进行排序。当用户单击 header(link 到 js func)时,table 将显示名称。但是,我遇到了一些麻烦。我收到一个未定义索引的通知(我知道很多人这样做并且我已经在线搜索过它)这意味着未声明变量。我似乎不明白为什么。
我确实达到了我想要的结果,即当最终用户单击删除按钮(每个 row/record 可用)时,它将删除记录(执行 sql 删除查询) 数据库中。我目前正在调试以找出问题所在,但如果我能得到一些帮助就太好了。
注意:如果您注意到,我没有使用 jQuery 或 jQuery 插件,我知道这会让我更容易使用,但我是一名学生,所以我想开始或者更确切地说使用和磨练我的 JavaScript 编码,所以我更喜欢 JavaScript。此外,我尝试学习 jQuery 一次,但我发现它很难(具有讽刺意味的)。也不要担心 SQL 注射。
编码说明:单击我的 html 文件(未使用任何表单)中的按钮时调用 displayTable()。请注意我为此使用的 windows.onload
函数。一切都在一个新的弹出窗口中完成 window.
编辑:我添加了未定义索引所在的行。
第二次编辑:添加到 action
因为我忘了把它放在这个问题中,@Barmar 指出。
这在 PHP 文件中:
<?php
// Define database parameters //
DEFINE ('DB_USER' ,'iaqwgvaqn');
DEFINE ('DB_PASSWORD', 'qawf23');
DEFINE ('DB_HOST', 'lqwfqwt');
DEFINE ('DB_NAME', 'hqwfcaqwq');
// Connect to database
$conn = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Could not connect to Database:'. mysql_error());
@mysql_select_db (DB_NAME) OR die ('Could not select the Database: '.mysql_error());
function selectAll($enableSorting)
{
$table_info = "dummyTest";
if($enableSorting == "sortingEnabled")
{
$query_string = "select * from $table_info order by name";
}
else
{
$query_string = "select * from $table_info";
}
$result = @mysql_query($query_string) or die (mysql_error());
$num_row = mysql_num_rows($result);
if($num_row)
{
$count = 0;
echo "<table id='table2' class='table2' border=1>";
//Table headers
echo "<tr><th>ID</th>";
echo "<th><a href=\"javascript:sortTable();\">Name</a></th>";
echo "<th>Badge Number</th>";
echo "<th>Category</th>";
echo "<th>Action</th>";
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$name = $row['name'];
$badge_number = $row['badge_number'];
$category = $row['category'];
$privilege = $row['privilege'];
$count++;
echo "<tr>";
echo "<td id=\"row$count\">$id</td>";
echo "<td>$name</td>";
echo "<td>$badge_number</td>";
echo "<td>$category</td>";
echo "<td><input type=\"button\" name=\"delete\" value=\"Delete\" onclick=\"deleteThis($count, $privilege)\"/></td>";
echo "</tr>";
}
echo "</table>";
}
else
{
echo "No records available. Click 'Add User' to add new user.";
}
}
function deleteRow($id)
{
$table_info = "dummyTest";
$query_string = "delete from $table_info where id='$id'";
$result = @mysql_query($query_string) or die (mysql_error());
}
.
.
//"INSERT QUERY" function, not relevant
.
.
<?php
$action = rtrim($_REQUEST['action']);
$enableSorting = $_REQUEST['enableSorting']; //Here is where I got undefined index, but it only shows up when I delete a record
if($action=="delete")
{
$id = rtrim($_REQUEST['id']);
echo deleteRow($id);
echo selectAll($enableSorting);
}
elseif($action=="insert")
{
$name = $_REQUEST['name'];
$badge_number = $_REQUEST['badge_number'];
$privilege = $_REQUEST['privilege'];
$category = $_REQUEST['category'];
echo insertRow($name, $badge_number, $privilege, $category);
}
elseif($action == "update")
{
echo selectAll($enableSorting);
}
?>
下面是我的外部 javascript 文件中的相关代码:
function displayTable()
{
window.onload = function()
{
var page = "database.php"
var parameters = "enableSorting=sortingDisabled&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}//displayTable()
function sortTable()
{
var page = "database.php";
var parameters = "enableSorting=sortingEnabled&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}//sortTable(sort_key)
function deleteThis(count, privilege)
{
var id = document.getElementById("row"+count).innerHTML;
var page = "database.php";
var parameters = "id="+id+"&action=delete";
var xmlhttp = new XMLHttpRequest();
if(confirm('Are you sure you want to delete this?')==true)
{
if(privilege==1)
{
alert("You cannot delete a Super Admin!");
return false;
}
else
{
if(xmlhttp==null)
{
alert("Your browser does not support ajax!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}
else
{
return false;
}
}//deleteThis(count)
您没有从 deleteThis
发送 enableSorting
参数。尝试:
function deleteThis(count, privilege)
{
var id = document.getElementById("row"+count).innerHTML;
var page = "database.php";
var parameters = "id="+id+"&action=delete&enableSorting=sortingDisabled";
var xmlhttp = new XMLHttpRequest();
if(confirm('Are you sure you want to delete this?')==true)
{
if(privilege==1)
{
alert("You cannot delete a Super Admin!");
return false;
}
else
{
if(xmlhttp==null)
{
alert("Your browser does not support ajax!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}
else
{
return false;
}
}//deleteThis(count)
如果未提供参数,另一个选项是更改 PHP 以使用默认值:
$enableSorting = isset($_REQUEST['enableSorting']) ? $_REQUEST['enableSorting'] : 'sortingDisabled';
我没有使用 "asc" 或 "desc",而是使用了 0、1 或 2。我不太清楚为什么当我使用数字时它会起作用,但这是我想出的解决方案和。顺便改了一些变量名,和问题里的一样。
function displayTable()
{
window.onload = function()
{
var order = 0;
var page = "database.php";
var parameters = "order="+order+"&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
} //displayTable()
function sortTableName(order)
{
//Check if sorting order is default or desc
if(order==0||order==2)
{
order = 1;
}
//Check if order is ascending
else if(order==1)
{
order = 2;
}
var page = "database.php";
var parameters = "order="+order+"&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
} //sortTableName(order)
function deleteThisUser(count, priviledge, order)
{
var id = document.getElementById("row"+count).innerHTML;
var page = "database.php";
var parameters = "id="+id+"&order="+order+"&action=delete";
var xmlhttp = new XMLHttpRequest();
if(confirm('Are you sure you want to delete this?')==true)
{
if(priviledge==1)
{
alert("You cannot delete a Super Admin!");
return false;
}
else
{
if(xmlhttp==null)
{
alert("Your browser does not support ajax!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}
else
{
return false;
}
} //deleteThisUser()
我目前正在编码以对 table 列中的名称进行排序。当用户单击 header(link 到 js func)时,table 将显示名称。但是,我遇到了一些麻烦。我收到一个未定义索引的通知(我知道很多人这样做并且我已经在线搜索过它)这意味着未声明变量。我似乎不明白为什么。
我确实达到了我想要的结果,即当最终用户单击删除按钮(每个 row/record 可用)时,它将删除记录(执行 sql 删除查询) 数据库中。我目前正在调试以找出问题所在,但如果我能得到一些帮助就太好了。
注意:如果您注意到,我没有使用 jQuery 或 jQuery 插件,我知道这会让我更容易使用,但我是一名学生,所以我想开始或者更确切地说使用和磨练我的 JavaScript 编码,所以我更喜欢 JavaScript。此外,我尝试学习 jQuery 一次,但我发现它很难(具有讽刺意味的)。也不要担心 SQL 注射。
编码说明:单击我的 html 文件(未使用任何表单)中的按钮时调用 displayTable()。请注意我为此使用的 windows.onload
函数。一切都在一个新的弹出窗口中完成 window.
编辑:我添加了未定义索引所在的行。
第二次编辑:添加到 action
因为我忘了把它放在这个问题中,@Barmar 指出。
这在 PHP 文件中:
<?php
// Define database parameters //
DEFINE ('DB_USER' ,'iaqwgvaqn');
DEFINE ('DB_PASSWORD', 'qawf23');
DEFINE ('DB_HOST', 'lqwfqwt');
DEFINE ('DB_NAME', 'hqwfcaqwq');
// Connect to database
$conn = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Could not connect to Database:'. mysql_error());
@mysql_select_db (DB_NAME) OR die ('Could not select the Database: '.mysql_error());
function selectAll($enableSorting)
{
$table_info = "dummyTest";
if($enableSorting == "sortingEnabled")
{
$query_string = "select * from $table_info order by name";
}
else
{
$query_string = "select * from $table_info";
}
$result = @mysql_query($query_string) or die (mysql_error());
$num_row = mysql_num_rows($result);
if($num_row)
{
$count = 0;
echo "<table id='table2' class='table2' border=1>";
//Table headers
echo "<tr><th>ID</th>";
echo "<th><a href=\"javascript:sortTable();\">Name</a></th>";
echo "<th>Badge Number</th>";
echo "<th>Category</th>";
echo "<th>Action</th>";
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$name = $row['name'];
$badge_number = $row['badge_number'];
$category = $row['category'];
$privilege = $row['privilege'];
$count++;
echo "<tr>";
echo "<td id=\"row$count\">$id</td>";
echo "<td>$name</td>";
echo "<td>$badge_number</td>";
echo "<td>$category</td>";
echo "<td><input type=\"button\" name=\"delete\" value=\"Delete\" onclick=\"deleteThis($count, $privilege)\"/></td>";
echo "</tr>";
}
echo "</table>";
}
else
{
echo "No records available. Click 'Add User' to add new user.";
}
}
function deleteRow($id)
{
$table_info = "dummyTest";
$query_string = "delete from $table_info where id='$id'";
$result = @mysql_query($query_string) or die (mysql_error());
}
.
.
//"INSERT QUERY" function, not relevant
.
.
<?php
$action = rtrim($_REQUEST['action']);
$enableSorting = $_REQUEST['enableSorting']; //Here is where I got undefined index, but it only shows up when I delete a record
if($action=="delete")
{
$id = rtrim($_REQUEST['id']);
echo deleteRow($id);
echo selectAll($enableSorting);
}
elseif($action=="insert")
{
$name = $_REQUEST['name'];
$badge_number = $_REQUEST['badge_number'];
$privilege = $_REQUEST['privilege'];
$category = $_REQUEST['category'];
echo insertRow($name, $badge_number, $privilege, $category);
}
elseif($action == "update")
{
echo selectAll($enableSorting);
}
?>
下面是我的外部 javascript 文件中的相关代码:
function displayTable()
{
window.onload = function()
{
var page = "database.php"
var parameters = "enableSorting=sortingDisabled&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}//displayTable()
function sortTable()
{
var page = "database.php";
var parameters = "enableSorting=sortingEnabled&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}//sortTable(sort_key)
function deleteThis(count, privilege)
{
var id = document.getElementById("row"+count).innerHTML;
var page = "database.php";
var parameters = "id="+id+"&action=delete";
var xmlhttp = new XMLHttpRequest();
if(confirm('Are you sure you want to delete this?')==true)
{
if(privilege==1)
{
alert("You cannot delete a Super Admin!");
return false;
}
else
{
if(xmlhttp==null)
{
alert("Your browser does not support ajax!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}
else
{
return false;
}
}//deleteThis(count)
您没有从 deleteThis
发送 enableSorting
参数。尝试:
function deleteThis(count, privilege)
{
var id = document.getElementById("row"+count).innerHTML;
var page = "database.php";
var parameters = "id="+id+"&action=delete&enableSorting=sortingDisabled";
var xmlhttp = new XMLHttpRequest();
if(confirm('Are you sure you want to delete this?')==true)
{
if(privilege==1)
{
alert("You cannot delete a Super Admin!");
return false;
}
else
{
if(xmlhttp==null)
{
alert("Your browser does not support ajax!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}
else
{
return false;
}
}//deleteThis(count)
如果未提供参数,另一个选项是更改 PHP 以使用默认值:
$enableSorting = isset($_REQUEST['enableSorting']) ? $_REQUEST['enableSorting'] : 'sortingDisabled';
我没有使用 "asc" 或 "desc",而是使用了 0、1 或 2。我不太清楚为什么当我使用数字时它会起作用,但这是我想出的解决方案和。顺便改了一些变量名,和问题里的一样。
function displayTable()
{
window.onload = function()
{
var order = 0;
var page = "database.php";
var parameters = "order="+order+"&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
} //displayTable()
function sortTableName(order)
{
//Check if sorting order is default or desc
if(order==0||order==2)
{
order = 1;
}
//Check if order is ascending
else if(order==1)
{
order = 2;
}
var page = "database.php";
var parameters = "order="+order+"&action=update";
var xmlhttp = new XMLHttpRequest();
if(xmlhttp==null)
{
alert("Your browser does not support AJAX!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
} //sortTableName(order)
function deleteThisUser(count, priviledge, order)
{
var id = document.getElementById("row"+count).innerHTML;
var page = "database.php";
var parameters = "id="+id+"&order="+order+"&action=delete";
var xmlhttp = new XMLHttpRequest();
if(confirm('Are you sure you want to delete this?')==true)
{
if(priviledge==1)
{
alert("You cannot delete a Super Admin!");
return false;
}
else
{
if(xmlhttp==null)
{
alert("Your browser does not support ajax!");
return false;
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("divTable").innerHTML=xmlhttp.responseText;
};
xmlhttp.open("GET", page+"?"+parameters, true);
xmlhttp.send(null);
}
}
else
{
return false;
}
} //deleteThisUser()