如何从URL中删除查询字符串?

时间:2018-01-09 11:09:06

标签: php xml

这是我的代码。这是一个带有两个输入的简单html表单。使用DOMDocument将所有数据保存到xml文件中,然后将XML文件中的所有数据插入到表单下方的表中。我添加了两个按钮编辑和删除(x)。现在我可以编辑和删除表中的任何用户/播放器。这是我的问题。删除或编辑后,我需要从URL中删除查询字符串。我想在删除后将新用户/播放器添加到表中。当我从URL手动删除查询字符串时,一切正常。但我想删除一些用户后自动删除查询字符串。对不起我的英语,希望你了解我。 提前致谢!

<?php 

    if ($_SERVER["REQUEST_METHOD"] == "POST") {

        $xml = new DOMDocument("1.0", "utf-8");

        if (is_file('database.xml')) {
            $xml->load("database.xml");
            $db = $xml->getElementsByTagName('db')->item(0);
        } else {
            $db = $xml->createElement("db");
            $xml->appendChild($db);
            $db = $xml->getElementsByTagName('db')->item(0);
        }
            $newPlayer = $xml->createElement("player");

            foreach ($_POST as $key => $value) { 
                $playerStuff = $xml->createElement($key, $value);
                $newPlayer->appendChild($playerStuff); 
            }   

            $db->appendChild($newPlayer);
            $xml->save("database.xml");         
    }

$name = $number = ""; 

if (isset($_GET['action']) && $_GET['action'] == 'edit') {
  $xml = new DOMDocument("1.0", "utf-8");
  $xml->load("database.xml");
  $player = $xml->getElementsByTagName('player')->item($_GET['id']);;
  $name = $player->getElementsByTagName('name')->item(0)->nodeValue;
  $number = $player->getElementsByTagName('number')->item(0)->nodeValue;
}

if (isset($_GET['action'])) {
    switch ($_GET['action']){
        case 'edit':
            $xml = new DOMDocument("1.0", "utf-8");
            $xml->load("database.xml");
            $player = $xml->getElementsByTagName('player')->item($_GET['id']);
            $nameEl = $player->getElementsByTagName('name')->item(0);
            $numberEl = $player->getElementsByTagName('number')->item(0);

                if ($_SERVER['REQUEST_METHOD'] == 'POST') {

                $newName = $xml->createElement("name", $_POST["name"]);
                $nameEl->parentNode->replaceChild($newName, $nameEl); 

                $newNumber = $xml->createElement("number", $_POST["number"]);
                $numberEl->parentNode->replaceChild($newNumber, $numberEl); 

                $db = $xml->getElementsByTagName('db')->item(0); 
                $lastElement = $db->lastChild;
                $lastElement->parentNode->removeChild($lastElement);
            }
            $xml->save("database.xml");

            break;
        case 'delete':
            $xml = new DOMDocument("1.0", "utf-8");
            $xml->load("database.xml");
            //$xml = $dokument->getElementsByTagName('xml')->item(0); 
            $player = $xml->getElementsByTagName('player')->item($_GET['id']);
            $player->parentNode->removeChild($player);
            $xml->save("database.xml");
            break;
    }
}


?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>PLAYERS</title>
        <link rel="stylesheet" href="stylesss.css">
    </head>
    <body>
        <form action="" method="POST">
            <input type="text" name="name" value="<?php echo $name ?>">
            <input type="text" name="number" value="<?php echo $number ?>">
            <input type="submit" value="INSERT">
        </form>
        <?php 

        $xml = new DOMDocument("1.0", "utf-8");

            if (is_file('database.xml')) {

                $xml->load('database.xml');
                $players = $xml->getElementsByTagName("player");

                echo "<table>";
                echo "<tr><th>" . "Player Name" . "</th><th>" . "Number". "</th></tr>";

                    foreach($players as $key => $player){
                        echo "<tr>";
                        foreach($player->childNodes as $data) {
                            echo "<td>". $data->nodeValue ."</td>";
                        }
                            echo "<td>
                                  <a href='?id={$key}&action=edit' class='buttons edit'>EDIT</a>
                                  <a href='?id={$key}&action=delete' class='buttons delete'>&#10006</a>
                                  </td>";
                        echo "</tr>";
                    }
            }

            echo "</table>";

        ?>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

我想说重定向header("Location: your-page.php");您重定向到的页面可以是同一页面但没有查询字符串。这意味着如果有人刷新,您将不会重复相同的操作。所以,这样的事情。在将任何内容写入页面之前,您必须使用header function,如果在HTML之后或在页面上有printecho之后使用它,则无效。

if (isset($_GET['action'])) {
    switch ($_GET['action']){
    case 'edit':
        $xml = new DOMDocument("1.0", "utf-8");
        $xml->load("database.xml");
        $player = $xml->getElementsByTagName('player')->item($_GET['id']);
        $nameEl = $player->getElementsByTagName('name')->item(0);
        $numberEl = $player->getElementsByTagName('number')->item(0);

            if ($_SERVER['REQUEST_METHOD'] == 'POST') {

            $newName = $xml->createElement("name", $_POST["name"]);
            $nameEl->parentNode->replaceChild($newName, $nameEl); 

            $newNumber = $xml->createElement("number", $_POST["number"]);
            $numberEl->parentNode->replaceChild($newNumber, $numberEl); 

            $db = $xml->getElementsByTagName('db')->item(0); 
            $lastElement = $db->lastChild;
            $lastElement->parentNode->removeChild($lastElement);
        }
        $xml->save("database.xml");

        break;
    case 'delete':
        $xml = new DOMDocument("1.0", "utf-8");
        $xml->load("database.xml");
        //$xml = $dokument->getElementsByTagName('xml')->item(0); 
        $player = $xml->getElementsByTagName('player')->item($_GET['id']);
        $player->parentNode->removeChild($player);
        $xml->save("database.xml");
        break;
    }
    header("Location: your-page.php");
}