使用 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()