printf

Nabi

Erfahrenes Mitglied
Hi,
Diese Code fand ich in einem Buch , Mir ist ein bisschen unklar .
Erstens: was Dient checked="checked" in der printf befehl, Warunm ist Ohne "$" geschrieben?.
Zweitens: der Vergleich Parameter (isset($_REQUEST...)...) Warum ist diese Ohne "if", ist das Normal mit printf
dass man ein Vergleichparameter ohne "if" schreiben darf?
Drittens : Was ist diese extra zeichen "/" vor ">" was hat sie für ein Aufgahbe? .
Danke für Jede erklärung in Voraus.
PHP:
<?php
$farben =array(
array('name'=>'grün','value'=>'g'),
array('name'=>'blau','value'=>'b'),
array('name'=>'rot','value'=>'r')
);
foreach ($farben as $element) {

printf('<input type="radio" name="farbe" value="%s" %s/> %s<br />',
$element['value'],
(isset($_REQUEST['farbe']) and $_REQUEST['farbe']==
$element['value']) ? 'checked="checked" ' : '',
$element['name']
);
}
?>
 
checked="checked" ist html Code, also warum mit $ schreiben?


Das (isset(...)) ist eine if-Abfrage in Form des ternary operatpor. Man darf dort kein if(... scheiben, da das eine Anweisung ist. In Ausdrücken bzw Funktionsaufrufen darf man nur Ausdrücke verwenden.
 
Das „checked="checked"“ ist ein HTML-Attribut und dient der Auszeichnung voreingeschalteter Formularelemente.
Die Syntax „<Ausdruck>?<Wahr-Ausdruck>:<Falsch-Ausdruck>“ wird ternär Operator genannt und ist eine Kurzschreibweise eines „if“-Kontrollkonstrukts.
Der Schrägstrich am Ende des Start-Tags ist zur Auszeichnung des Endes eines leeren XHTML-Elements.

Ausführlicher geschrieben, könnte es auch wie folgt aussehen:
PHP:
<?php

	$farben = array(
		array('name'=>'grün', 'value'=>'g'),
		array('name'=>'blau', 'value'=>'b'),
		array('name'=>'rot',  'value'=>'r')
	);

	foreach( $farben as $element ) {
		if( isset($_REQUEST['farbe']) && $_REQUEST['farbe'] == $element['value'] ) {
			echo '<input type="radio" name="farbe" value="'.$element['farbe'].'" checked="checked" />';
		}
			echo '<input type="radio" name="farbe" value="'.$element['farbe'].'" />;
		}
		echo ' '.$element['farbe'].'<br />';
	}

?>
 
Dein Vorschlag habe ich So umgesetzt:
PHP:
<?php

    $farben = array(
        array('name'=>'grün', 'value'=>'g'),
        array('name'=>'blau', 'value'=>'b'),
        array('name'=>'rot',  'value'=>'r')
    );

    foreach( $farben as $element ) {
        if( isset($_REQUEST['farbe']) && $_REQUEST['farbe'] == $element['value'] ) 
				{
            echo "
						<input type=\"radio\" name=\"farbe\" value=\"$element\['name'\]\" checked=\"checked\">
						";
				}
         else {
				 echo "<input type=\"radio\" name=\"farbe\" value=\"$element\['farbe'\]\" >";
				 };
        
     echo ' '.$element['name'].'<br />';
     }
    

?>

Es gibt eine sache die Merkwerdig ist:
Wenn mann die oben geschriebene Arrays in einem Array einmischt also etwa wie:
PHP:
$farben = array('name'=>'grün', 'value'=>'g' ,'name'=>'blau', 'value'=>'b','name'=>'rot',  'value'=>'r');
Dann wird das Ergebnis ganz anderes Aussehen.
 
Das ist auch nichts Merkwürdiges sondern ganz logisch. Denn damit würde es immer nur zwei Elemente geben, da die anderen von den nachfolgenden überschrieben würden. Denn es werden immmer wieder Array-Elemente mit denselben Indizes („name“ und „value“) definiert. Werden diese Wertepaare jedoch jeweils in einem eigenen Array gespeichert, wird nichts überschrieben.
 
Ja, Ich hab auch was falsch im meinem Beispiel geschrieben
So: value=\"$element\['name'\]\" wird nicht richtig funktionieren , Richtig wäre wenn
vorher $EV=$element['value']; schreibe und dann value=\"$EV\"

Wie in diesem Beispiel:
PHP:
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" action="<?php echo $PHP_SELF ?>">

<?php
$farben = array(
        array('name'=>'grün', 'value'=>'g'),
        array('name'=>'blau', 'value'=>'b'),
        array('name'=>'rot',  'value'=>'r')
    );

    foreach( $farben as $element ) {$EV=$element['value'];
		
         
						
				if( isset($_REQUEST['farbe']) && $_REQUEST['farbe'] == $element['value'] ) 
				{
            echo "<input type=\"radio\" name=\"farbe\" value=\"$EV\" checked=\"checked\">";
						
				}
         else {echo "<input type=\"radio\" name=\"farbe\" value=\"$EV\" >";}
				 
        
     echo ' '.$element['name'].'<br />';
     }
    
?>
<input  type="submit" name="submit" value="submit">
<?php
if (isset($_REQUEST['submit'])){
echo"ok";
}
?>
</form>
</body>
</html>
 
Zuletzt bearbeitet:
Arbeite lieber mit dem Zeichenketten-Verkettungsoperator. Und wenn du einfache Anführungszeichen statt doppelte verwendest, müssen die doppelten auch nicht mehr maskiert werden:
PHP:
<?php

	$farben = array(
		array('name'=>'grün', 'value'=>'g'),
		array('name'=>'blau', 'value'=>'b'),
		array('name'=>'rot',  'value'=>'r')
	);

	foreach( $farben as $element ) {
		if( isset($_REQUEST['farbe']) && $_REQUEST['farbe'] == $element['value'] ) {
			echo '<input type="radio" name="farbe" value="'.$element['value'].'" checked="checked">';
		} else {
			echo '<input type="radio" name="farbe" value="'.$element['value'].'">';
		}
		echo ' '.$element['name'].'<br />';
	}

?>
 
Zurück