<?php
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$venue = $_POST['venue'];
$time = $_POST['time'];
$info = $_POST['info'];
$address = $_POST['address'];
$location = $_POST['location'];
$moreInfo = $_POST['moreInfo'];
$link1 = $_POST['link1'];
$link2 = $_POST['link2'];
$myFile = "test.xml";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><gigs><gig day=\"" . $day . "\" month=\"" . $month . "\" year=\"" . $year . "\" venue=\"" . $venue . "\" time=\"" . $time . "\" info=\"" . $info . "\" address=\"" . $address . "\" location=\"" . $location . "\" moreInfo=\"" . $moreInfo . "\" link1=\"" . $link1 . "\" link2=\"" . $link2 . "\"/></gigs>";
fwrite($fh, $stringData);
if($fh) {
echo "&verify=success&";
} else {
echo "&verify=fail&";
}
fclose($fh);
?>
/*
* Assume that the variable $original_xml contains a raw XML string
* with a <gigs> element.
*/
$new_gig = "<gig>...</gig>";
$new_xml = str_replace("<gigs>", "<gigs>$new_gig", $original_xml);
/*
* Now $new_xml contains the raw XML with the additional <gig> element
* inserted at the top of the <gigs> element.
*/
$new_gig = "<gig ... />";
<?php
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$venue = $_POST['venue'];
$time = $_POST['time'];
$info = $_POST['info'];
$address = $_POST['address'];
$location = $_POST['location'];
$moreInfo = $_POST['moreInfo'];
$link1 = $_POST['link1'];
$link2 = $_POST['link2'];
$myFile = "test.xml";
$fh = fopen($myFile, 'w') or die("can't open file");
$new_gig = "<gigs><gig day=\"" . $day . "\" month=\"" . $month . "\" year=\"" . $year . "\" venue=\"" . $venue . "\" time=\"" . $time . "\" info=\"" . $info . "\" address=\"" . $address . "\" location=\"" . $location . "\" moreInfo=\"" . $moreInfo . "\" link1=\"" . $link1 . "\" link2=\"" . $link2 . "\"/></gigs>"
$subject = "<gigs>"
$stringData = str_replace("<gigs>", $new_gig, $subject);
fwrite($fh, $stringData);
if($fh) {
echo "&verify=success&";
} else {
echo "&verify=fail&";
}
fclose($fh);
?>
<?php
$xml=xml2ary(file_get_contents('gig.xml'));
print_r($xml);
$venue = "HOTELLLLLLLLLLLLLLLLLLLLLLLLL";
$xml['gigs']['_c']['gig']['1']['_a']['venue']['_v']= $venue ;
print_r($xml);
/*
<ddd>
<onemore dd="55">
<tt>333</tt>
<tt ss="s1">555</tt>
<tt>777</tt>
</onemore>
<two>sdf rr</two>
</ddd>
Working with XML. Usage:
$xml=xml2ary(file_get_contents('1.xml'));
$link=&$xml['ddd']['_c'];
$link['twomore']=$link['onemore'];
// ins2ary();// dot not insert a link, and arrays with links inside!
echo ary2xml($xml);
*/
// XML to Array
function xml2ary(&$string) {
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parse_into_struct($parser, $string, $vals, $index);
xml_parser_free($parser);
$mnary=array();
$ary=&$mnary;
foreach ($vals as $r) {
$t=$r['tag'];
if ($r['type']=='open') {
if (isset($ary[$t])) {
if (isset($ary[$t][0])) $ary[$t][]=array();
else $ary[$t]=array($ary[$t], array());
$cv=&$ary[$t][count($ary[$t])-1];
} else $cv=&$ary[$t];
if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;
} $cv['_c']=array();
$cv['_c']['_p']=&$ary;
$ary=&$cv['_c'];
} elseif ($r['type']=='complete') {
if (isset($ary[$t])) {// same as open
if (isset($ary[$t][0])) $ary[$t][]=array();
else $ary[$t]=array($ary[$t], array());
$cv=&$ary[$t][count($ary[$t])-1];
} else $cv=&$ary[$t];
if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
$cv['_v']=(isset($r['value']) ? $r['value'] : '');
} elseif ($r['type']=='close') {
$ary=&$ary['_p'];
}
}
_del_p($mnary);
return $mnary;
}
// _Internal: Remove recursion in result array
function _del_p(&$ary) {
foreach ($ary as $k=>$v) {
if ($k==='_p') unset($ary[$k]);
elseif (is_array($ary[$k])) _del_p($ary[$k]);
}
}
// Array to XML
function ary2xml($cary, $d=0, $forcetag='') {
$res=array();
foreach ($cary as $tag=>$r) {
if (isset($r[0])) {
$res[]=ary2xml($r, $d, $tag);
} else {
if ($forcetag) $tag=$forcetag;
$sp=str_repeat("\t", $d);
$res[]="$sp<$tag";
if (isset($r['_a'])) {foreach ($r['_a'] as $at=>$av) $res[]=" $at=\"$av\"";}
$res[]=">".((isset($r['_c'])) ? "\n" : '');
if (isset($r['_c'])) $res[]=ary2xml($r['_c'], $d+1);
elseif (isset($r['_v'])) $res[]=htmlspecialchars($r['_v']);
$res[]=(isset($r['_c']) ? $sp : '')."</$tag>\n";
}
}
return implode('', $res);
}
// Insert element into array
function ins2ary(&$ary, $element, $pos) {
$ar1=array_slice($ary, 0, $pos); $ar1[]=$element;
$ary=array_merge($ar1, array_slice($ary, $pos));
}
?>
E.g., if you're assuming that the value of $_POST['day'] is a 2-digit numeric string, make sure it is before you write it to your XML file. If you're assuming that $_POST['link2'] is a well-formed URL, make sure it is.
And then wrap each variable in a call to PHP's htmlentities() before you concatenate it into the XML string. This will help avoid injection vulnerabilities and it will also help keep your XML valid.
For your question... are you familiar at all with PHP's XML libraries? Maybe a bit much for what you're trying to do and the learning curve might be a bit steep, but if you want to make your script more complex in the future it might pay off to handle the XML abstractly from the beginning rather than "hand-coding" it in your PHP:
http://us2.php.net/manual/en/refs.xml.php