【问题标题】:Sorting table using sql query, undefined index for PHP使用sql查询对表进行排序,PHP的未定义索引
【发布时间】:2015-08-02 15:13:22
【问题描述】:

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

【问题讨论】:

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

标签: javascript php mysql sorting undefined-index


【解决方案1】:

您没有从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';

【讨论】:

  • 对不起,我忘了把它放在问题中(已经编辑)。这是同样的错误。
  • 但是这意味着如果我不排序就删除,删除记录后,整个表不会被排序吗?
  • 好的,然后说&amp;enableSorting=sortingDisabled。但是您的 PHP 脚本需要该参数。
  • 现在这意味着如果表已排序,那么如果我删除一条记录,则表排序将被禁用。事情是,我想在保持表状态的同时删除,不管它是排序的还是未排序的。示例:如果表已经排序(通过单击 Name 标题)并且我删除了,则只会删除记录。不会发生取消排序。
  • 然后记住 Javascript 变量中的状态,并使用它在 AJAX 调用中放入适当的参数。
【解决方案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()

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 2017-08-20
    • 1970-01-01
    • 2021-08-19
    • 2020-02-27
    • 2017-03-16
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多