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



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

注册。.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;
}
}

XML 文件:

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

你应该首先改变你的xml

<users>
<user>
<email></email>
<password></password>
</user>
</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();

https://3v4l.org/AKdhJ

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

如果要在显示的示例中添加用户条目,只需将它们附加到文件末尾即可,对吗?

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

如果添加容器,则不能再追加到文件,因为要在最终结束标记之后添加。但是你可以从末尾退格,写下新条目,然后写一个最终结束标签的新副本。有关此技术的更详细讨论,请参阅写入基于 XML 的大型日志文件时性能不佳。

但正如其他人指出的那样,用户登录数据似乎应该进入数据库,而不是任何类型的文本文件。在每个用户登录时对文件进行串行搜索将很快变得昂贵,除非您知道您只会拥有不超过数百个用户。

最新更新