javascript — сортировка таблицы с использованием SQL-запроса, неопределенный индекс для переполнения стека

В настоящее время я пишу код для сортировки имен в столбце таблицы. Когда пользователь щелкает заголовок (ссылка на js func), таблица будет иметь имена. Однако у меня возникли некоторые проблемы. Я получаю уведомление о неопределенном индексе (что, как я знаю, многие люди делают, и я искал его в Интернете), что означает, что переменная не объявлена. Я не могу понять, почему, хотя.

Я достиг желаемого результата: когда конечный пользователь нажимает кнопку удаления (которая доступна для каждой строки / записи), он удаляет запись (запрос sql об удалении) в базе данных. Я сейчас отлаживаю, чтобы выяснить, что не так, но было бы здорово, если бы мне помогли.

Примечание: Если вы заметили, я не использовал и плагины jQuery или jQuery, и я знаю, что это облегчит мне использование, но я учусь в университете, поэтому я хочу начать или, скорее, использовать и оттачивать свое кодирование JavaScript, поэтому я предпочитаю JavaScript , Кроме того, я однажды попробовал изучить jQuery, и мне было трудно (по иронии судьбы). Не беспокойтесь и об SQL-инъекциях.

Примечание по кодированию: displayTable () вызывается при нажатии кнопки в моем html-файле (без использования форм). Принять к сведению windows.onload Функция, которую я использовал для этого. Все сделано в новом всплывающем окне.

РЕДАКТИРОВАТЬ: я добавил, в какой строке был неопределенный индекс.

2-е РЕДАКТИРОВАНИЕ: добавлено в 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)

-2

Решение

Вы не отправляете 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';
1

Другие решения

Вместо использования «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()
0

По вопросам рекламы [email protected]