alexander 5565: PHP XML Überschreiben

Hallo!
Ich habe ein Problem mit PHP. Und zwar habe ich eine XML Datei, in der verschiedene, vom User festgelegte, Kontonamen aufgeschrieben stehen.
Diese sieht so aus: <accounts><account>Konto1</acount><account>Konto2</account>...</accounts>
Jetzt möchte ich es möglich machen, diese Kontos zu löschen. Da das mit Simple XML nicht geht, will ich den Text des Kontos einfach mit '' überschreiben.

Im Formular habe ich Checkboxen, wie man im Code sehen kann. Da diese immer andere Namen bekommen, habe ich im Post Array dann für jede angeklickte Box ein Element, wobei der Index des Elements die Nummer des Kontos ist. Also 0, wenn das erste Konto angeklickt wurde und 2, wenn das 3. Konto angeklickt wurde. Der Wert ist immer "checked".

Um das zu verarbeiten, verwende ich die Funktion array_keys und suche nach dem Begriff "checked". Das entstehende Array ($result) enthält jetzt nur mehr die Nummern der Konten, die angeklickt wurden ([0]=0; [1]=2 wenn erstes und drittes Konto angeklickt wurden). Dann zähle ich noch wieviele Ergebnisse es gibt und lasse für diese Zahl eine for-Schleife durchlaufen.
Jedoch zerstört mir das immer meine xml Datei (er schreibt einfach vor </accounts>:
<account[0]></account[0]><account[2]></account[2]><account[]></account[]>
und ich erhalte die Fehlermeldung:
Notice: Undefined offset: 2 in /srv/www/httpd/phost/f/org/pytalhost/financials/web/user/financials_adminsettings.php on line 60

Diese ist:
$thisacc = 'account['.$result[$i].']';

Hier der Code:

  
if ('POST' == $_SERVER['REQUEST_METHOD']) {  
	  
	$result = array_keys($_POST, "checked");  
	$number = count($result);  
	  
	var_dump($result);  
	echo $number;  
	  
	for ($i=0; $i < ($number+1); $i++) {  
		$thisacc = 'account['.$result[$i].']';  
		$xml->$thisacc = '';  
	}  
	  
	$handle = fopen("../settings/accounts.xml", "wb");  
	fwrite($handle, $xml->asXML() );  
	fclose($handle);  
	  
	echo '<p>'.$number.' Konto/-s wurden gel&ouml;scht.</p>';  
	  
} else {  
	echo '<p>M&ouml;chten Sie ein Konto l&ouml;schen?<br />  
	<form name="delete" method="post" action="financials_adminsettings.php">  
	<p>';  
    for ($i=0; $xml->account[$i]; $i++) {  
	echo '<label>'.$xml->account[$i].'  
      <input type="checkbox" name="'.$i.'" value="checked" /> &#124; </label>';  
	}  
	  
	echo '</p><input name="" type="submit" /></form></p>';  
}
  1. Hallo Alexander,

    Ich habe ein Problem mit PHP. Und zwar habe ich eine XML Datei, in der verschiedene, vom User festgelegte, Kontonamen aufgeschrieben stehen.
    Diese sieht so aus: <accounts><account>Konto1</acount><account>Konto2</account>...</accounts>
    Jetzt möchte ich es möglich machen, diese Kontos zu löschen. Da das mit Simple XML nicht geht, will ich den Text des Kontos einfach mit '' überschreiben.

    nach Möglichkeit nutze die DOM-XML-Erweiterung.

    Um das zu verarbeiten, verwende ich die Funktion array_keys und suche nach dem Begriff "checked". Das entstehende Array ($result) enthält jetzt nur mehr die Nummern der Konten, die angeklickt wurden ([0]=0; [1]=2 wenn erstes und drittes Konto angeklickt wurden). Dann zähle ich noch wieviele Ergebnisse es gibt und lasse für diese Zahl eine for-Schleife durchlaufen.
    Jedoch zerstört mir das immer meine xml Datei (er schreibt einfach vor </accounts>:
    <account[0]></account[0]><account[2]></account[2]><account[]></account[]>
    und ich erhalte die Fehlermeldung:
    Notice: Undefined offset: 2 in /srv/www/httpd/phost/f/org/pytalhost/financials/web/user/financials_adminsettings.php on line 60

    $number = count($result);

    for ($i=0; $i < ($number+1); $i++) {}

    $number hat in Deinem Beispiel den Wert "2", denn es gibt zwei Elemente im Array $result. Der Ausdruck ($number+1) hat dagegen aber den Wert "3", obwohl $result nur zwei Elemente hat. Da liegt der Fehler.

    for($i=0;$i<$number;$i++){}

    Gruß aus Berlin!
    eddi