В настоящее время я пишу код для сортировки имен в столбце таблицы. Когда пользователь щелкает заголовок (ссылка на 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)
Вы не отправляете 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';
Вместо использования «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()