Wie ein Formular (Textfeld) "zerlegen"

spikaner

Quereinsteiger @ php
Habe folgendes Formular
PHP:
<form method="POST" action="test.php">
	<p><textarea rows="10" name="test" cols="30"></textarea></p>
	<p><input type="submit" value="Absenden"></p>
</form>
In diesen können die User ganze Berichte Posten bsp. wenn ich sie mit
PHP:
echo $_POST['test'];
Ausgebe schaut das so aus (Format ist immer das selbe)

Datum 03-02 17:42:17 Alter:20 Name:Hans Vorname:Mustermann Fertigkeiten: Mathematik2 Deutsch3 Sport4 Geschicklichkeit1 usw.

Wie kann ich $_POST "zerlegen" in z.B.
$alter = 20;
$mathematik = 2;
usw.
so das die einzelnen Werte weiterberechnet werden können?

mfg
 
das Trennen mit explode() anhand des Zeichen ":" wird nicht korrekt funktionieren, da im Dateum ebenfalls das Zeichen vorkommt, entweder man sagt sich ok, ich mache nen Workaround oder du setzt dich 2min hin und schreibst einen Regulären Ausdruck.

Master, explode gibt ein Array zurück, von daher wird dein Code nicht gehen, auch sonst sieht er irgendwie recht sinnfrei aus :confused:
 
das Trennen mit explode() anhand des Zeichen ":" wird nicht korrekt funktionieren.....

Habe ich eben gemerkt explode() funktioniert leider nicht da Teilweise die sachen nicht einmal durch ein Leerzeichen getrennt sind (kommt vom Kopieren aus der Tabelle wo die Sachen stehen) bsp.
Alter:20 durch : getrennt
Mathematik2 nicht getrennt
usw.


mfg
 
Wenn deine User in das Feld die einzelne Items mit einem Umbruch trennen, könntest du so weiterprobieren:
PHP:
$Array = explode("\n", $_POST['test']);
foreach ($Array as $k => $v) {
 echo $v."<br />";
}

Wenn du ein allgemeines Trennzeichen zwischen Name und Wert festlegst, kannst du in der Foreach-Schleife wieder mit explode() die Werte trennen und ein Array oder Variablen draus basteln.

Gruß Kevin
 
Geht leider auch nicht, habe noch folgendes ausprobiert:
PHP:
$str = $_POST['bericht'];
$avar = preg_split('/[ \t\r\n]/', $str);
$len = count($avar);
for ($i=0; $i<$len; $i++)
printf("%d: %s<br>\n", $i, $avar[$i]);
funktioniert zwar besser aber auch noch nicht 100%, ausserdem habe ich noch diesen Code gefunden der angeblich so etwas wie ich brauche macht, könnte mir den jemand erklären?
Bzw. was muß ich "herauskürzen" da in diesen Script irgendeine Berechnung stadtfindet die ich bestimmt nicht brauche.
PHP:
<?php

function sign($x)
{
	if($x>0)	print '+';
	elseif($x==0)	print '&plusmn;';
}

print '<br>';
if($_POST)
{
        $data=preg_split('/[ \t\r\n]/',$_POST['DATA']);
        $until=count($data);
	$parsed=array();
       	for($i=0;$i!=$until;++$i)
        {
		if($data[$i]=='Rohstoffe')
		{
			while($data[$i]) ++$i;
			$K=$data[$i-4];
			$m=$data[$i+2];
			$k=$data[$i+5];
			$date=explode('-',$data[$i-2]);
			$time=explode(':',$data[$i-1]);
			$t=mktime($time[0],$time[1],$time[2],$date[0],$date[1]);
			while(substr($data[++$i],-1,1)!='%')
				if($data[$i]=='Metallmine')
				{
					$s=$data[$i+1];
					$dm=30*$s*pow(1.1,$s)+20;
				} else
				if($data[$i]=='Kristallmine')
				{
					$s=$data[$i+1];
					$dk=20*$s*pow(1.1,$s)+10;
				}	
			if($parsed[$K])
			{
				$p=$parsed[$K];
				$m-=$p[0];
				$k-=$p[1];
				$t-=$p[4];
				$dm=round($m/max($dm,$p[2])/$t*360000-100);
				$dk=round($k/max($dk,$p[3])/$t*360000-100);
				print $K.'<br>';
				if($dm==10. && $dk==10.)
					print 'Geologe<br>';
				if($dm==0. && $dk==0.)
					print 'kein Geologe<br>';
				sign($dm);
				print $dm.'% Metallproduktion<br>';
				sign($dk);
				print $dk.'% Kristallproduktion<br><br>';
			} else $parsed[$K]=array($m,$k,$dm,$dk,$t); 
		}
        }
}
?>

mfg
 
Zuletzt bearbeitet:
Hallo,

mit regulären Ausdrücken kommt man hier schnell an's Ziel:
PHP:
<?php

$str = 'Datum 03-02 17:42:17 Alter:20 Name:Hans Vorname:Mustermann Fertigkeiten: Mathematik2 Deutsch3 Sport4 Geschicklichkeit1';

$count = preg_match_all('/\b([a-zA-Z]++):?([a-zA-Z\d]++)\b/', $str, $matches);
$result = array();
for ($i = 0; $i < $count; ++$i) {
	$result[$matches[1][$i]] = $matches[2][$i];
}

print_r($result);

?>
 
Also das mit dem Array wusste ich -.-
Muss leider zugeben, dass ich in letzter Zeit hier im Forum ausm Kopf den Code nur schreibe ^^ und dann eigentlich nicht so aufpasse, denn die entsprechende Person kann sich ja über die Funktionen informieren ...

Die Warheit ist, ja es entsteht ein Array, tja hab ich jetzt auch geändert ^^ aber im Grunde sollte es dann auch gehen ... wobei ich das mit den Punkten nicht weiß, weiß nur das man bestimmte Zeichen escapen muss aber an und für sich funktioniert das Ganze, ist halt nicht besonders schön und muss leider zugeben, dass ich mich selbst nicht so sonder prächtig mit regulären ausdrücken auskenne und daher diesen mist auch selbst mal genutzt habe ^^
 
Zurück