[英]PHP XML. IP validation
我的Xml看起来像这个例子:
<?xml version="1.0" encoding="UTF-8"?>
<Allvotes>
<vote score="2" ip="116.971.203.221"/>
<vote score="5" ip="32.97.233.5"/>
<vote score="3" ip="212.977.233.225"/>
<vote score="5" ip="2.80.233.225"/>
</Allvotes>
在我的Flash网站(AS2)上,有人按下“投票”按钮,PHP中的脚本获取了他的IP ...我想要的是运行specyfic函数,取决于他的IP是否存在于xml文件中。
如果他的IP已经存在,PHP将发送消息:“已经投票!”,如果XML中不存在IP,那么我想运行将其投票分数和IP存储在xml中的函数。
到目前为止,我知道此PHP脚本不起作用:
$dom = new DomDocument('1.0', 'UTF-8');
$myXML = "votes.xml";
$s="";
if ($_POST['todo']=="vote"){
$ip=$_SERVER['REMOTE_ADDR'];
$dom->load($myXML);
$allVotes= $dom->getElementsByTagName('vote');
foreach ($allVotes as $vote){
if ($vote->getAttribute('ip')==$ip){
$s.="&msg= Already Voted";
echo $s;
break;
}else{
doOtherStuff
}
}
}
问题是,当IP不在第一个节点中时,此循环会触发“ doOtherStuff”功能...
有什么魔术可以做到这一点吗?
要回答眼前的问题:您需要推迟“已经投票?” 测试直到遍历所有记录:
$alreadyVoted = false;
foreach ($allVotes as $vote){
if ($vote->getAttribute('ip')==$ip){
$alreadyVoted = true;
break;
}
}
if($alreadyVoted) {
$s.="&msg= Already Voted";
echo $s;
}
else {
// other stuff
}
像这样用XML存储数据是一种非常低效的处理方式。 您应该将数据存储移动到数据库(通常最容易从PHP设置和使用MySql)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.