我对XML不是那么好,但我对PHP非常好。我需要使用XML文件作为各种“数据库”。它包含各种用户信息。包括登录信息。 XML的设置如下:
<employee ssnum="">
<first_name></first_name>
<last_name></last_name>
<contact_info>
<office_phone></office_phone>
<email></email>
<cell_phone></cell_phone>
</contact_info>
<access_info level="user">
<username></username>
<password></password>
</access_info>
<department></department>
<date_started></date_started>
<position></position>
</employee>
我需要一些方法来检查用户名和密码以查看它们是否匹配,然后登录相应的用户。我不确定如何检查用户名/密码对,以及如何返回正确的用户登录。还有另一种方法可以做到这一点我通过DOMdocument显示然后使用mysql查询将xml文件用作各种类型的数据库,但我不确定这是最简单的方法,或者它是如何工作的。
这不是任何严肃的工作,而是一个学习项目。
任何帮助都将不胜感激,谢谢。
答案 0 :(得分:2)
似乎有人告诉你们关于DOMDocument
。或者 - 更可能 - 你误解了一些东西。您不会使用mysql查询,您将使用 xpath查询来访问xml中的节点。您确实应该使用DOMDocument
和DOMXPath
来访问节点。
以下是一个如何阅读或修改密码的示例:
$doc = new DOMDocument();
$doc->load('employee.xml');
$selector = new DOMXpath($doc);
$result = $selector->query('/employee/access_info/password');
// read password:
$password = $result->item(0)->nodeValue;
// set password:
$result->item(0)->nodeValue = 'secret';
// save xml
$doc->save('employee.xml');
如果您需要有关XPath的更多信息,可以按照tutorial。
进行操作答案 1 :(得分:0)
我的第一个想法是使用xml_parse,或者根据Jon的建议,也使用SimpleXML example in PHP manual,see this question
答案 2 :(得分:0)
我希望能帮助你理顺一些事情,并扩展hek2mgl的良好和适当的建议。我意识到这是学习等等但是当你正确完成时你根本不需要一个循环(假设你当然只需要访问一个当前尝试登录的员工)。 在hek2mgl链接到的教程中,它显示了Predicates的全部内容,您应该使用一个在xpath查询中立即通过用户输入的用户名自动选择正确的员工,然后将密码与密码进行比较由用户输入并查看它们是否匹配。这样就不需要了解$ result长度(当然除了它的有效长度为1)。假设包含所有雇员元素的xml文件有一个名为“employees”的根容器元素,可能应该这样:
<?php
//below is php heredoc string.
//just a simulation of an employees.xml file which
//obviously contains multiple employee elements
//within a root 'employees' element
$xmlStr = <<<XMLBookendMarker
<employees>
<employee ssnum="555662222">
<first_name></first_name>
<last_name></last_name>
<contact_info>
<office_phone></office_phone>
<email></email>
<cell_phone></cell_phone>
</contact_info>
<access_info level="user">
<username>jackass</username>
<password>letmein</password>
</access_info>
<department></department>
<date_started></date_started>
<position></position>
</employee>
<employee ssnum="555991111">
<first_name></first_name>
<last_name></last_name>
<contact_info>
<office_phone></office_phone>
<email></email>
<cell_phone></cell_phone>
</contact_info>
<access_info level="user">
<username>god</username>
<password>qwerty</password>
</access_info>
<department></department>
<date_started></date_started>
<position></position>
</employee>
</employees>
XMLBookendMarker;
//below is the information entered by the user,
//which we will use to find the username in the
//employees.xml and then check if the password matches
$enteredUsername = 'god';
$enteredUserPass = 'qwerty';
$doc = new DOMDocument();
$doc->loadXML($xmlStr);
$selector = new DOMXpath($doc);
//the quote styles are important below
$result = $selector->query("/employees/employee/access_info[username='$enteredUsername']/password");
//if length should happen to be longer than 1, well you screwed up long
//time ago by allowing multiple same usernames, and that can't be allowed!
//if length is 0, then there is no such username
if ($result->length === 0) {
die('NO SUCH USERNAME EXISTS');
} elseif ($result->length > 1) {
die('ERROR: CONSULT ADMIN');
}
//ok, now we know $result->length is 1
$password = $result->item(0)->nodeValue;
if ($password == $enteredUserPass) {
echo 'The password matches! logging in....';
//now we might want some other info about the employee
$employee = $result->item(0)->parentNode->parentNode;
//just demoing showing the employee
echo '<br><br>'.htmlentities($doc->saveXML($employee));
}
?>