提问人:kross 提问时间:5/21/2015 最后编辑:kross 更新时间:5/22/2015 访问量:247
使用 sql 查询对表进行排序,PHP 的未定义索引
Sorting table using sql query, undefined index for PHP
问:
我目前正在编码对表格列中的名称进行排序。当用户点击标题(链接到 js func)时,表将显示名称。但是,我遇到了一些麻烦。我收到一个未定义索引的通知(我知道很多人都这样做,我已经在网上搜索过它),这意味着该变量没有声明。我似乎不明白为什么。
我确实达到了我想要的结果,即当最终用户单击删除按钮(可用于每行/记录)时,它将删除数据库中的记录(执行删除的 sql 查询)。我目前正在调试以找出问题所在,但如果我有一些帮助,那就太好了。
注意:如果你注意到,我没有使用jQuery或jQuery插件,我知道这将使我更容易使用,但我是一名学生,所以我想开始,或者更确切地说,使用和磨练我的JavaScript编码,所以我更喜欢JavaScript。此外,我曾经尝试过学习jQuery,但我发现这很困难(具有讽刺意味的是)。也不用担心SQL注入。
编码说明:当我的html文件中的按钮(不使用任何表单)被调用时,会调用displayTable()。记下我用于它的功能。一切都在新的弹出窗口中完成。windows.onload
编辑:我添加了未定义索引所在的行。
第二次编辑:添加在@Barmar指出的因为我忘了把它放在这个问题中。action
这是在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)
答:
您不是从 发送参数。尝试:enableSorting
deleteThis
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';
评论
&enableSorting=sortingDisabled
Name
我没有使用“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()
评论
action
sortTable
$_REQUEST['enableSorting']
$_REQUEST['action']
var_dump($_REQUEST)
Notice: Undefined index: enableSorting in /myfolders/database.php on line 85