The way I remove dead servers from the master server list is by storing the time of the server posting with the server data. Then every time someone loads the server list it removes all servers that haven't posted for 5 minutes and displays the rest.
Here, I'll post my PHP code.
Retrieval Page
<?php
$con = mysqli_connect("---", "---", "---", "---");
if(mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$prune = mysqli_query($con, "DELETE FROM Servers WHERE (TIME < NOW() - INTERVAL 5 MINUTE)");
$result = mysqli_query($con,"SELECT * FROM Servers");
echo "FIELDS\tIP\tPORT\tPASSWORDED\tDEDICATED\tSERVERNAME\tPLAYERS\tMAXPLAYERS\tMAPNAME\tBRICKCOUNT\n";
echo "START\n";
while($row = mysqli_fetch_array($result)) {
echo $row['IP'] . "\t" . $row['PORT'] . "\t" . $row['PASSWORDED'] . "\t" . $row['DEDICATED'] . "\t" . $row['SERVERNAME'] . "\t" . $row['PLAYERS'] . "\t" . $row['MAXPLAYERS'] . "\t" . $row['MAPNAME'] . "\t" . $row['BRICKCOUNT'] . "\n";
}
echo "END\n";
mysqli_close($con);
?>
Posting Page
<?php
$con = mysqli_connect("---", "---", "---", "---");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$prune = mysqli_prepare($con, "DELETE FROM Servers WHERE IP='?'");
mysqli_stmt_bind_param($prune, "s", $_SERVER[REMOTE_ADDR]);
mysqli_stmt_execute($prune);
$sqlStmt = mysqli_prepare($con, "INSERT INTO Servers (IP, PORT, PASSWORDED, DEDICATED, SERVERNAME, PLAYERS, MAXPLAYERS, MAPNAME, BRICKCOUNT, TIME)
VALUES (?, ?, ?, ?, ?, ?, ?, \"? (?)\", ?, current_timestamp)");
mysqli_stmt_bind_param($sqlStmt, "ssiisiissi", $_SERVER[REMOTE_ADDR], $_POST[Port], $_POST[Passworded],$_POST[Dedicated], $_POST[ServerName], $_POST[Players], $_POST[MaxPlayers], $_POST[Map], $_POST[ver], $_POST[BrickCount]);
mysqli_stmt_execute($sqlStmt) or die(mysqli_error($con));
mysqli_close($con);
?>