繁体   English   中英

PHP XML。 IP验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM