使用 sql 查询对表进行排序,PHP 的未定义索引

Sorting table using sql query, undefined index for PHP

提问人:kross 提问时间:5/21/2015 最后编辑:kross 更新时间:5/22/2015 访问量:247

问:

我目前正在编码对表格列中的名称进行排序。当用户点击标题(链接到 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)
javascript php mysql 排序 undefined-index

评论

0赞 Barmar 5/21/2015
您没有参数actionsortTable
0赞 Barmar 5/21/2015
您确定错误是针对 的吗?$_REQUEST['enableSorting']$_REQUEST['action']
0赞 Barmar 5/21/2015
显示什么?var_dump($_REQUEST)
0赞 kross 5/21/2015
@Barmar 是的,确切地说是.Notice: Undefined index: enableSorting in /myfolders/database.php on line 85
0赞 Barmar 5/21/2015
所有操作都会发生这种情况吗?

答:

1赞 Barmar 5/21/2015 #1

您不是从 发送参数。尝试:enableSortingdeleteThis

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';

评论

0赞 kross 5/21/2015
对不起,我忘了把它放在问题中(已经编辑过了)。这是同样的错误。
0赞 kross 5/21/2015
但这意味着如果我在不排序的情况下删除,在删除记录后,整个表不会被排序吗?
0赞 Barmar 5/21/2015
好的,那就说.但您的 PHP 脚本需要该参数。&enableSorting=sortingDisabled
0赞 kross 5/21/2015
好吧,现在这意味着如果表被排序,那么如果我删除一条记录,表排序将被禁用。问题是,我想在保持表状态的同时删除,无论是排序还是未排序。示例:如果表已经排序(通过单击标题)并且我删除了,则只会删除记录。不会发生取消排序。Name
0赞 Barmar 5/21/2015
然后记住 Javascript 变量中的状态,并使用它来将适当的参数放入 AJAX 调用中。
0赞 kross 5/22/2015 #2

我没有使用“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()