Apenas a Calculadora de código PHP com botões clicáveis ​​como input

Estou tentando codificar uma calculadora com código PHP e HTML.

A Calculadora deve parecer uma real e os botões devem ser clicáveis.

Agora, estou preso a combinar 2 números, isso significa que eu pressiono um botão, o número será mostrado. Mas depois de pressionar o segundo botão, o primeiro valor desaparece devido ao type="submit" .

Minha pergunta é: como posso salvar o valor e mostrar todos os botões pressionados juntos?

Eu sei que posso fazer isso com uma input escondida, mas não sei como usá-los corretamente.

Também como posso calcular toda a expressão depois de fazer isso?

Eu sei que o javascript ou qualquer outro idioma do lado do cliente seria melhor, mas eu quero encontrar uma maneira de fazê-lo puramente com PHP e HTML.

     Taschenrechner     
<input id="display" type="text" name="bildschirm" readonly="readonly" style="text-align: center; height: 50px; width: 216px;" value=>

Esta é a minha forma de cálculo basicamente básica, quase sem estilo, pura-PHP:

     Basic PHP Calculator   "; $buttons=[1,2,3,'+',4,5,6,'-',7,8,9,'*','C',0,'.','/','=']; $pressed=''; if(isset($_POST['pressed']) && in_array($_POST['pressed'],$buttons)){ $pressed=$_POST['pressed']; } $stored=''; if(isset($_POST['stored']) && preg_match('~^(?:[\d.]+[*/+-]?)+$~',$_POST['stored'],$out)){ $stored=$out[0]; } $display=$stored.$pressed; //echo "$pressed & $stored & $display
"; if($pressed=='C'){ $display=''; }elseif($pressed=='=' && preg_match('~^\d*\.?\d+(?:[*/+-]\d*\.?\d+)*$~',$stored)){ $display.=eval("return $stored;"); } echo "
"; echo ""; echo ""; echo ""; echo ""; foreach(array_chunk($buttons,4) as $chunk){ echo ""; foreach($chunk as $button){ echo ""; } echo ""; } echo "
$display
"; echo ""; echo "
"; ?>

Aqui está uma captura de canvas enquanto eu estava testando:

insira a descrição da imagem aqui

Você pode ver que eu fiz cada botão um botão de envio com o mesmo nome, mas valores diferentes. Uso uma única input oculta para preservar a expressão criada. Haverá muitos aprimoramentos e considerações para além desta demo, depende de você o quão longe esse buraco de coelho.


PS Para quem acabou de remover o seu armário, olhou os olhos e soltou um grito severo: ” Ei, nós não tomamos gentilmente com pessoas como você chamando eval() nestas partes aqui! “. Bem, eu me esforcei para validar adequadamente a string a ser avaliada. Se houver um buraco conhecido, me avise e tentarei corrigi-lo. Alternativamente, esta é a minha tentativa de reinventar o processo eval() com o BOMDAS em mente:

Código: ( Demo )

 $stored="2+3*4/6"; $components=preg_split('~([*/+-])~',$stored,NULL,PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); while(($index=array_search('*',$components))!==false){ array_splice($components,$index-1,3,$components[$index-1]*$components[$index+1]); } while(($index=array_search('/',$components))!==false){ array_splice($components,$index-1,3,$components[$index-1]/$components[$index+1]); } while(($index=array_search('+',$components))!==false){ array_splice($components,$index-1,3,$components[$index-1]+$components[$index+1]); } while(($index=array_search('-',$components))!==false){ array_splice($components,$index-1,3,$components[$index-1]-$components[$index+1]); } echo current($components); // 4 
Intereting Posts