Добавить в XML-файл с помощью php SimpleXML

B.Sabres15 спросил: 28 марта 2018 в 03:02 в: php

Я работаю над проектом поддержки справки, и у меня есть хорошая часть его работы, кроме этого одного аспекта. Я хотел бы отобразить всю информацию о билете (из файла XML) на экран, но затем добавить комментарии к новым комментариям в билет. Я печатаю всю информацию о билетах без проблем, связанных с этим, это проблема. Один, потому что мой массив $ _GET ушел после отправки, я теряю информацию о билете, два я не могу понять, как просто добавлять новые комментарии в раздел комментариев для конкретного билета в моем XML. Ниже приведен код.

<!DOCTYPE html>
<html lang="en">
<head>
<title>
    Kapsiak's Ticket Closer
</title>
<meta charset="utf-8">
<link rel="stylesheet" href="site.css">
</head>
<body>
<?php include 'header.php'; ?>
<?php include 'nav.php'; ?>
<main>
    <div class="row">
        <div class="sidel">
        </div>
 <main>
    <div class="row">
        <div class="sidel">
        </div>
        <div class="main">
        <?php
            // read all the ticket information to screen
            $xml=simplexml_load_file("tickets.xml") or die ("Error: Cannot Display Tickets");
            foreach($xml->children() as $ticket) {
            if ($ticket['id'] == $_GET['id']) {
                    echo "<div class='helpLeft'>";
                    echo "<h3>Requester</h3>";
                    echo "<p>First Name: " . $ticket->fname . "</p>";
                    echo "<p>Last Name: " . $ticket->lname . "</p>";
                    echo "<p>Phone: " . $ticket->phone . "</p>";
                    echo "<p>School: " . $ticket->loc . "</p>";
                    echo "<p>Room: " . $ticket->room . "</p>";
                    echo "</div>";
                    echo "<div class='helpLeft'>";
                    echo "<h3>Device Information</h3>";
                    echo "<p>Device Type: " . $ticket->device . "</p>";
                    echo "<p>Manufacturer: " . $ticket->manu . "</p>";
                    echo "<p>Model: " . $ticket->model . "</p>";                            
                    echo "<p>Serial: " . $ticket->serial . "</p>";
                    echo "<p>Status: " . $ticket->status . "</p>";
                    echo "</div>";
                    echo "<div class='comments'>";
                    echo "<h3>Comments</h3>";
                    // check for new comments
                    if (!empty($_POST)){
                        $ticket->appendChild('comments', $_POST(comments));
                        }
                    echo "<p>" . $ticket->comments . "</p>";
                    echo "</div>";
                }
            }
            echo "<br>";                    
        ?>
        <div class="comments">              
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <textarea name="comments" id="comments" cols="60" rows="10" required> </textarea><br>                
    <select size="1" name="status" id="status" required>
    <option value="open">Select New Status </option>
    <option value="In Progess">In Progress </option>
    <option value="Awaiting Reply">Awaiting Reply    </option>
    <option value="Closed">Closed </option>
    </select>
            <input type="submit" value="Update"/>
            </form>
            </div>
        </div>
        <div class="sider">
        </div>
     </div>
 </main>
 <?php include 'footer.php'; ?>
 </body>
 </html>

1 ответ

B.Sabres15 ответил: 28 марта 2018 в 04:12

С помощью Blauharley мне удалось выяснить остальную часть этого вопроса. appendchild () и addchild () не нужны для SimpleXML. Мне просто нужно было записать новую переменную в XML, используя

$ticket->comments = $oldCom .  " " . $_POST['comments'];

Затем мне просто нужно было сохранить XML, используя

file_put_contents("tickets.xml", $xml->asXML());