Radiobuttons richtig auswerten

Godstyle

Erfahrenes Mitglied
Moin Leute

habe irgendwie eine denkblockade oder einfach mal keine Ahnung, wie auch immer es ist ich komme nicht weiter.

Ich habe eine html Tabelle mit 59 Zeilen

Jede Zeile hat 1 Wort und 6 radio Buttons, bsp:

PHP:
    <tr>
    	<td width="280">Älter:</td>
        <td align="center" width="50"><input type="radio" name="aelter[]" value="unbedingt" /></td>
        <td align="center" width="50"><input type="radio" name="aelter[]" value="mag ich" /></td>
        <td align="center" width="50"><input type="radio" name="aelter[]" value="gelegentlich" /></td>
        <td align="center" width="50"><input type="radio" name="aelter[]" value="eher nicht" /></td>
        <td align="center" width="50"><input type="radio" name="aelter[]" value="gar nicht" /></td>
        <td align="center" width="50"><input type="radio" name="aelter[]" value="keine Angabe"/></td>
    </tr>

nun, wenn das formular nun gesendet wird kann ich mir ja ausgeben lassen was ausgewählt wurde.

Was ich jedoch nun erreichen will ist, Das ich in der Ausgabe folgenden aufbau habe:

Mag ich

_________

Ältere * Jüngere


eher nicht
___________

schule * arbeit


usw. Also ich würde gerne das die auswahl des Radio Buttons bestimmt unter felschem Punkt der eintrag gelistet wird.

Ich habe einige Denkansätze gehabt die aber alle im Sande verlaufen sind, ich hoffe man versteht mein Problem und weiß rat.

Ich könnte natürlich unter jedem feld (Mag ich / eher nicht /...) immer mit in_array abfragen nur bin ich sicher das php eine einfachere Lösung bietet.

Dann dachte ich daran das ich vlt irgendwie alle array in 1 Packe und dann irgendwie alles dort sortieren lassen kann um es dann geziel auszugeben?

Nunja, egal wie ich denke, ich bekomme es nicht hin das ich es richtig ausgegeben bekomme.

Hoffe auf euren Rat.

lg
 
Wenn ich deine Frage richtig interpretiere, dann zum Beispiel so:

PHP:
<?php

$e = function ($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); };

$categories = array(
    0 => 'Älter',
    1 => 'Jünger',
    2 => 'Größer',
    3 => 'Kleiner'
);

if (count($_POST) > 0) {
    $grouped = array();

    foreach ($_POST['data'] as $k => $v) {
        if (!array_key_exists($v, $grouped)) {
            $grouped[$v] = array();
        }
        $grouped[$v][] = $k;
    }

    foreach ($grouped as $rating => $entries) {
        echo '<h1>' . $e($rating) . '</h1>';
        $separator = '';
        foreach ($entries as $id) {
            echo $separator . $e($categories[$id]);
            $separator = ' * ';
        }
    }

    echo '<hr>';
}

?>

<form method="post" action="<?=$e(basename(__FILE__))?>">

    <table>
    <?php foreach ($categories as $id => $name) : ?>
    <tr>
        <td width="280"><?=$e($name)?>:</td>
        <td align="center" width="50"><input type="radio" name="data[<?=$e($id)?>]" value="unbedingt" /></td>
        <td align="center" width="50"><input type="radio" name="data[<?=$e($id)?>]" value="mag ich" /></td>
        <td align="center" width="50"><input type="radio" name="data[<?=$e($id)?>]" value="gelegentlich" /></td>
        <td align="center" width="50"><input type="radio" name="data[<?=$e($id)?>]" value="eher nicht" /></td>
        <td align="center" width="50"><input type="radio" name="data[<?=$e($id)?>]" value="gar nicht" /></td>
        <td align="center" width="50"><input type="radio" name="data[<?=$e($id)?>]" value="keine Angabe"/></td>
    </tr>
    <?php endforeach; ?>
    </table>

    <input type="submit">

</form>
 
Guten morgen,

du hast die frage richtig erkannt und ich danke dir vielmals für die antwort, sie hat mich schonmal ein ganzes Stück weiter gebracht.

Jetzt sind nur 2 Dinge offen, da es sich umUser eingaben handelt sollten die Buttens nach seinen eingaben vorselektiert sein, dazu müssen diese in einer db über PDO gespeichert werden.

bevorzugt dachte ich, dass man einfach das ganze POST ergebniss in eine Spalte der db packt

wenn also nun der zugehörige User die Seite aufruft erscheinen die Radiobuttens und seine vorselektierten werte, bei einem anderen User dann nur die geordneten Begriffe. Wurde vom User nichts gewählt steht immer: "keine Angabe" als vorselektiert. und keine Angabe sollte nicht in der Ordnung sichtbar sein.

lg


// EDIT

PHP:
    foreach ($grouped as $rating => $entries) {
        if($rating !== 'keine Angabe') {
        echo '<h1>' . $e($rating) . '</h1>';
        $separator = '';
        foreach ($entries as $id) {
            echo $separator . $e($categories[$id]);
            $separator = ' * ';
        }
}


hat schonmal die ausgabe gelöst und keine Angabe wird nicht mehr angezeigt. Nun noch das vorselektieren und die Speicherung in der DB, wobei ich grade ausprbiere mit serialize den Post in einen string umzuwandeln und dann in der DB zu speichern und anschliesend wieder in ein array umwandeln.


//EDIT 2 die speicherung in der DB und die richtige darstellung funktioniert nun ebenfalls.

offen ist noch wie ich die richtigen werte vorselektiere die der USer zuletzt getroffen hat
 
Zuletzt bearbeitet:
PHP:
foreach ($data as $k => $v) {
          if (!array_key_exists($v, $grouped)) {
                    $grouped[$v] = array();
                }
                $grouped[$v][] = $k;
            }

            foreach ($grouped as $rating => $entries) {
		if($rating !== 'keine Angabe') { 
                	echo '<h1>' . $e($rating) . '</h1>';
                	$separator = '';
                	foreach ($entries as $id) {
                	    echo $separator . $e($categories[$id]);
                 	   $separator = ' * ';
                	}
		}
				
            }

So, ich habe alle Probleme lösen können, es werden die richtigen Radio Buttons auch vorselektiert.

Ich habe nur noch ein kleines Problem, die Ausgabe erfolgt in der falschen Reihen folge, er sagt:


eher nicht
Mag ich
gelegentlich
gar nicht
unbedingt

Wie kann ich diese Reihenfolge noch fest bestimmen?

Es soll so aussehen:

unbedingt
mag ich
gelegentlich
eher nicht
gar nicht

lg
 
Initialisiere zum Beispiel $grouped entsprechend.

PHP:
$grouped = array(
    'unbedingt' => array(),
    'mag ich' => array(),
    // ...
);
 
das habe ich versucht, dann liefert er mir zwar die richtige reihenfolge, jedoch sortiert er nur die überschriften und nicht die werte die dazu gehören.

Hatte irgendwie was verdreht sry, klar deine Lösung jetzt geht natürlich, nur zeigt er mir dann natürlich die überschrift auch dann an, wenn keine einträge vorhanden sind.
 
Zuletzt bearbeitet:
Zurück