PHP XML.Проверка IP - PullRequest
       2

PHP XML.Проверка IP

0 голосов
/ 24 сентября 2011

Мой 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>

Когда на моем флеш-сайте (AS2) кто-то нажимает кнопку «голосовать», скрипт на PHP получает свой IP… Мне нужно запустить специальную функцию, зависит от того, существует ли его IP в файле XML или нет.

Если его IP-адрес уже существует, PHP отправляет сообщение: «УЖЕ ГОЛОСОВАНО!», Когда IP-адрес не существует в XML, тогда я хочу запустить функцию, которая хранит его голос и 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
        }
    }
}

Проблема в том, что этот цикл запускает функцию doOtherStuff, когда IP не находится на первом узле ...

Есть ли магический трюк для этого?

1 Ответ

1 голос
/ 24 сентября 2011

Почему ваш код не работает

Чтобы ответить на неотложный вопрос: нужно отложить «уже проголосовали»? тестируйте, пока не выполните итерацию по всем записям:

$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 - это действительно неэффективный способ работы. Вам следует переместить хранилище данных в базу данных (MySql обычно проще всего настроить и работать с ним из PHP).

...