そのタイトルに正しく名前を付けたかどうかはわかりませんが、基本的には$ _POST(バンドの名前)の変数があり、ノードの名前の代わりに次のような行に挿入したいと思います-
$lastvisits = $address->$band->getElementsByTagName("lastvisit");
どこに$band
ありますか
$band = $_POST['band']
$ address内のノードは実際には任意の名前である可能性があり、存在しない可能性があるためです。簡単な方法があるはずですが、フォーマットはわかりません。
存在する場合と存在しない場合、$ lastvisits = $ address-> $ band> getElementsByTagName( "lastvisit")はエラーを引き起こします-致命的なエラー:...内の非オブジェクトでメンバー関数getElementsByTagName()を呼び出します。
XML-
<?xml version="1.0"?>
<addresses>
<address>
<ip>127.0.0.1</ip>
<Beatles>
<lastvisit>12/08/2006</lastvisit>
</Beatles>
</address>
<address>
<ip>125.0.0.1</ip>
</address>
</addresses>
これは完全なコードです:
$doc = new DOMDocument();
$doc->load("votingxml/addresses.xml");
$addresses = $doc->getElementsByTagName("address");
$band = strval($_POST['band']);
$pVoted = false;
$pFound = false;
//Loop through the addresses nodes and see if the person has voted before for each( $addresses as $address )
{
$ips = $address->getElementsByTagName("ip");
$ip = $ips->item(0)->nodeValue;
if ($ip == $domain){
$pFound = true;
if ($address->$band == 'NULL'){
$bandfound= false;
$newBandElement = $doc->createElement($_POST['band']);
$newLastVisitElement = $doc->createElement('lastvisit');
$dayvalue = $doc->createTextNode($today);
$dayvalue = $newLastVisitElement->appendChild($dayvalue);
$newBandElement->appendChild($newLastVisitElement);
$address->appendChild($newBandElement);
$doc->save("votingxml/addresses.xml");
$pVoted = false;
}
else{
$bandfound =true;
$lastvisits = $address->$band->getElementsByTagName("lastvisit");
$lastvisit = $lastvisits->item(0)->nodeValue;
if ($lastvisit == $today){
echo "alreadyvoted";
$pVoted = true;
}else{
$lastvisits->item(0)->nodeValue = $today;
$doc->save("votingxml/addresses.xml");
$pVoted = false;
}
}
}
else if ($ip != $domain)
{
$pFound = false;
}
}
どんな助けでも大歓迎です。