如何附加到当前XML文件?(登录系统PHP/XML)

如何附加到当前XML文件?(登录系统PHP/XML),php,ajax,xml,Php,Ajax,Xml,我目前使用xml和php制作了一个登录系统。注册新用户时,将创建一个新的xml文件。有没有一种方法可以将注册用户添加到一个xml文件中,而不是每次都创建一个新的xml REGISTER.PHP <?php $errors = array(); if(isset($_POST['login'])){ $username = preg_replace('/[^A-Za-z]/','',$_POST['username']); $email = $_POS

我目前使用xml和php制作了一个登录系统。注册新用户时,将创建一个新的xml文件。有没有一种方法可以将注册用户添加到一个xml文件中,而不是每次都创建一个新的xml

REGISTER.PHP

    <?php
    $errors = array();
    if(isset($_POST['login'])){
    $username = preg_replace('/[^A-Za-z]/','',$_POST['username']);
    $email = $_POST['email'];
    $password = ($_POST['password']);
    $c_password = $_POST['confirmPassword'];
    if(file_exists('users/' . $username . '.xml'))
    {
        $errors[] = 'Username already exists';
    }
    //more validation here

    if(count($errors) == 0){
        $xml = new SimpleXMLElement('<user></user>');
        $xml->addChild('password', md5($password));
        $xml->addChild('email', $email);
        $xml->asXML('users/'.$username.'.xml');
        header('Location:login.php');
        die;
    }
}
addChild('password',md5($password));
$xml->addChild('email',$email);
$xml->asXML('users/'.$username..xml');
标题('Location:login.php');
死亡
}
}
XML文件:

<user>
    <password>827ccb0eea8a706c4c34a16891f84e7b</password>
    <email>test@example.com</email>
</user>

827ccb0eea8a706c4c34a16891f84e7b
test@example.com

您应该首先更改xml

<users>
    <user>
        <email></email>
        <password></password>
    </user>
</users>

然后简单地将新用户附加到users元素

Php例如:

<?php

$users = new SimpleXMLElement('<users></users>');
$user = $users->addChild('user');
$user->addChild('email', 'test@test.com');
$user->addChild('password', '1111');

echo $users->asXml();
addChild('user');
$user->addChild('email','test@test.com');
$user->addChild('password','1111');
echo$users->asXml();

//编辑
如上所述,您应该寻找一些不同的方式来存储用户信息。MySQL、sqlite,这些更适合于此。

如果您想在您展示的示例中添加用户条目,您可以将它们附加到文件的末尾,对吗

但是,@Eakethet正确的做法是,您应该在条目周围添加一个容器(例如“用户”),这是一个良好的实践。没有它,就没有单一的“根”,因此它不是一个有效的XML文档(即使您提供了一个尚未提供的模式)。特别是对于敏感和重要的数据,确保您的文档是有效的是非常重要的(您不会发送包含语法错误的代码,数据同样重要)

如果添加容器,就不能再追加到文件中,因为要在最后一个结束标记之后添加。但是,您可以从末尾将其退格,编写新条目,然后编写最终结束标记的新副本。有关此技术的详细讨论,请参见


但正如其他人所指出的,用户登录数据似乎应该放在数据库中,而不是任何类型的文本文件中。在每个用户登录时为其连续搜索一个文件会很快变得昂贵,除非您知道您的用户不会超过(比如)数百个。

是否需要单个文件作为有效的XML?因为如果您只是不断地向它添加多个根节点,那么它就不会被使用。XML并不是真正设计用来作为数据库的。你最好有一个真正的数据库。危险:你正在使用并且需要删除你用户的密码。