开发者

PHP XML. IP validation

My Xml looks like this example:

<?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>

When on my flash website (AS2), somebody press "vote" button, script in PHP getting his IP... What I want is run specyfic function, depends on his IP exist in xml file or not.

If his IP already exist, PHP send message: "ALREADY VOTED!", when IP doesn't exist in XML, then I want to run function which store his vote score and IP in xml.

So far I know that this PHP script not works:

$dom = new DomDocument('1.0', 'UTF-8');
$myXML = "votes.xml";
$s="";
if ($_POST['tod开发者_如何学JAVAo']=="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
        }
    }
}

The problem is that this loop fire "doOtherStuff" function when IP is not in first node...

Is there any magic trick to do that?


Why your code does not work

To answer the immediate question: you need to defer the "already voted?" test until you have iterated over all the records:

$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
}

Why you should not do it this way

Storing your data in XML like this is a really inefficient way of doing things. You should move the data store to a database (MySql is typically easiest to set up and work with from PHP).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜