Ik probeer een kleurentabel te maken in stappen van 15, want dan kom je mooi uit op 255.
Ik wil de waarden 0, 15,30...255 in een dropdown-list. Hoe krijg ik dat voor elkaar?
Ik heb zoiets geschreven als

<?php
echo <<<FORM
<form method="POST" action="$thisfile">
<label for <?$rr ?>Roodwaarde</label>
<Select>
FORM;
for ($rr=0; $rr<=255; $rr+15) {
	$Achtergrondkleur=$rr;
	$Voorgrondkleur=255-$rr;
	echo "Achtergrondkleur= " $Achtergrondkleur;
	echo "Voorgrondkleur= " $Voorgrondkleur;
	echo "<option". <? $Achtergrondkleur ?>.">";
};
?>


Ik krijg dit dit op mijn scherm:
"Roodwaarde: " met een dropdown-icoon zonder inhoud.

Hoe krijg ik inhoud in de dropdown-list?
Er passen precies 13 stappen van 15 in het rijtje van 0 tot en met 255.

Volgens mijn berekening zijn het er 17 en inclusief de "0"-waarde: 18.

255/15=17.
Hmmm, die getallenstelsels gebruik ik nooit. Snap ook niet helemaal het nut.

@Ad Fundum

Jij gaf deze code:

<?
$per15=[];$n=-10;while($n<111){$per15[]=base_convert($n+=10,15,10);}
foreach($per15 as $rr){print $rr.PHP_EOL;}
?>

Wat is dan het verschil met de onderstaande code?

<?php
$per15 = [];
for ($i=0; $i<=255; $i+=15) {
$per15[] = $i;
}
?>
@ozzie PHP:
zie mijn eerste vraag.
Ik wil een kleurentabel maken met stappen van 15 omdat je dan mooi uitkomt op 255.
Deze veelvouden van 15 wil ik in een dropdown-menu stoppen om de roodwaarde te kiezen.

Dit laatste is mij echter nog niet gelukt.

Ik weet dat deze code lang niet volledig is. Ik weet dat de sluittag voor select er nog niet in staat, maar mijn vraag is:
hoe krijg ik de waarden in het dropdown-menu?

<?php
echo <<<FORM
<form method="POST" action="$thisfile">
<label for "Roodwaarde"</label>
<Select>
FORM;
for ($rr=0; $rr<=255; $rr+=15) {
    $Achtergrondkleur=$rr;
    $Voorgrondkleur=255-$rr;
    echo "Achtergrondkleur= " $Achtergrondkleur;
    echo "Voorgrondkleur= " $Voorgrondkleur;
    echo "<option". <? $Achtergrondkleur ?>.">";
};
?> 

Daarom deze vraag.
Maak eerst eens het dropdown menu gewoon in html code met daarin slecht 2 opties. Dan hebben we een idee hoe het eruit moet komen te zien, en dan kunnen we daarna de php-code erin zetten.
Goede vraag.
Het moet er ongeveer zo uit komen te zien?

<label for "Roodwaarde">Roodwaarde</label>
<select>
<option value="0">0</option>
<option value="15">15</option>
<option value="30">30</option>
</select>


Bij voorbaat dank voor je geduld.

Ronald

Ik zou je html buiten de php-code houden. En dan krijg je bijv. zoiets als dit:



<label for "Roodwaarde">Roodwaarde</label>
<select>
<?php
for ($rr=0; $rr<=255; $rr+=15) {
  echo '<option value="' . $rr . '">' . $rr . '</option>' . PHP_EOL;
}    
?>
</select>

Bedankt ozzie voor je suggestie, maar hij doet het nog steeds niet helemaal.

Ik heb jouw voorbeeld overgenomen en er nog iets bij gezet: name="Roodwaarde".

De complete zoals ik hem nu heb, is:

<html>
<head>
<title>Kleurtabellen per Roodwaarde</title>
</head>
<body>
<form action="$thisfile">
<label for "Roodwaarde">Roodwaarde</label>
<Select>

<?php
for ($rr=0; $rr<=255; $rr+=15) {
	echo '<option name="Roodwaarde" value="' . $rr . '">' . $rr . '</option>'. PHP_EOL;
}
?>
</Select>
</form>
</body>
</html>


Moet er geen ";" achter de sluit-accolade van de for...next-lus?

Heb ik nog iets over het hoofd gezien?
Nee, omdat het een voorwaarde is, net als bij while().

Verder is je HTML niet correct, het is:
<label for="Roodwaarde">Roodwaarde</label>

Verder heeft $thisfile hier geen waarde:
<form action="$thisfile">

En het is wel handig als je select-element een name-attribuut heeft.
Ronald Vos op 24/04/2024 11:08:47

Er passen precies 13 stappen van 15 in het rijtje van 0 tot en met 255.

Volgens mijn berekening zijn het er 17 en inclusief de "0"-waarde: 18.

255/15=17.

Ja, jouw berekening klopt en de mijne niet.
Ik zocht een creatieve manier en kreeg dit rijtje:
0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 225, 240, 255

Op het eerste gezicht leek het goed, maar tussen 135 en 225 horen natuurlijk nog wat meer stappen van 15. Het onjuiste resultaat is de prijs voor het schenden van het KISS-principe. Het is een voorbeeld geworden van hoe het niet moet.

[size=xsmall]Toevoeging op 25/04/2024 10:02:30:[/size]

Ozzie PHP op 24/04/2024 11:49:57

Hmmm, die getallenstelsels gebruik ik nooit. Snap ook niet helemaal het nut.

@Ad Fundum

Jij gaf deze code:

<?
$per15=[];$n=-10;while($n<111){$per15[]=base_convert($n+=10,15,10);}
foreach($per15 as $rr){print $rr.PHP_EOL;}
?>

Wat is dan het verschil met de onderstaande code?

<?php
$per15 = [];
for ($i=0; $i<=255; $i+=15) {
$per15[] = $i;
}
?>

Afgezien van dat alleen onderstaande code het juiste resultaat geeft, is het ook duidelijker en minder creatief. Het is het beste voor code in productie. Ik heb met base_convert() ingewikkeld willen doen om het eens over een andere boeg te gooien. Tegelijk heb ik base_convert() voorheen ook te weinig gebruikt om in eerste instantie te zien dat bij de overgang van 90 naar 100 decimaal een significant verschil optreedt.

Maar de variaties op de for-lus zijn verder wel goed.
Al is het wel even wennen om terug gaan
van: for x in (0..255).step_by(15) { // Rust
naar: for ($i=0; $i<=255; $i+=15) { // PHP
Het ging er in ieder geval om dat het ook een optie is om een look-up table te gebruiken wanneer je vaker met hetzelfde rijtje moet werken. Alleen is het met het geval 15 waarschijnlijk nog efficiënter om dat zonder look-up table te doen, omdat het rijtje "xor", "add" en "jne" (assemblerinstructies voor een loop) sneller werkt dan het telkens dereferencen van gegevens uit een array. Maar voor ingewikkelder berekeningen kan het wel helpen.

Maargoed, wat PHP betreft heb ik me er inmiddels bij neergelegd. Ik ben weer bezig met een aantal websites in PHP 8.2. Dat kost (mij) toch minder moeite met PHP dan met Rust.

Reageren