Intereting Posts

Только PHP Code Calculator с Clickable Button в качестве входа

Я пытаюсь закодировать калькулятор только с PHP и HTML-кодом.

Калькулятор должен выглядеть как настоящий, а кнопки должны быть интерактивными.

Прямо сейчас, я застрял в объединении 2 чисел, это означает, что я нажимаю одну кнопку, номер будет показан. Но после того, как я нажму вторую кнопку, первое значение исчезнет из-за type="submit" .

Мой вопрос: как я могу сохранить значение и показать все нажатые кнопки вместе?

Я знаю, что могу сделать это со скрытым вводом, но я не знаю, как правильно их использовать.

И как я могу вычислить целое выражение после этого?

Я знаю, что javascript или любой другой клиентский язык будет лучше, но я хочу найти способ сделать это исключительно с PHP и HTML.

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Taschenrechner</title> <link href="Stylesheets/Stylesheets.css" rel="stylesheet" type="text/css"> </head> <body> <?php if(isset($_POST['zahl'])){ $zahl1 = $_POST['zahl']; }else{ $zahl1 = 0; } ?> <form name="rechner" action="rechner.php" method="post"> <input id="feld1" type="hidden" name="zahl1" value=""> <input id="feld2" type="hidden" name="opera" value=""> <input id="feld3" type="hidden" name="zahl2" value=""> <input id="feld4" type="hidden" name="zwischerg" value=> <table align="center" style="width:300px; height:450px; border:solid thick black;"> <tr> <td align="center"> <input id="display" type="text" name="bildschirm" readonly="readonly" style="text-align: center; height: 50px; width: 216px;" value=<?php echo $zahl1; $op; $zahl2 ?>> </td> </tr> <tr> <td> <table align="center"> <tr> <td> <input class="taste" type="submit" name="zahl" value="1" > </td> <td> <input class="taste" type="submit" name="zahl" value="2"> </td> <td> <input class="taste" type="submit" name="zahl" value="3"> </td> <td> <input class="taste" type="submit" name="operator" value="+"> </td> </tr> <tr> <td> <input class="taste" type="submit" name="zahl" value="4"> </td> <td> <input class="taste" type="submit" name="zahl" value="5"> </td> <td > <input class="taste" type="submit" name="zahl" value="6"> </td> <td> <input class="taste" type="submit" name="operator" value="-"> </td> </tr> <tr> <td> <input class="taste" type="submit" name="zahl" value="7"> </td> <td> <input class="taste" type="submit" name="zahl" value="8"> </td> <td> <input class="taste" type="submit" name="zahl" value="9"> </td> <td> <input class="taste" type="submit" name="operator" value="*"> </td> </tr> <tr> <td> <input class="taste" type="submit" name="clear" value="C"> </td> <td> <input class="taste" type="submit" name="zahl" value="0"> </td> <td> <input class="taste" type="submit" name="zahl" value="."> </td> <td> <input class="taste" type="submit" name="operator" value="/"> </td> </tr> <tr> <td colspan="4"> <input type="submit" name="gleich" value="=" style=" width: 215px; height: 50px;"> </td> </tr> </table> </td> </tr> </table> </form> </body> </html> 

Это моя по-настоящему базовая, почти стильная, чистая PHP-калькулятор:

 <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Basic PHP Calculator</title> </head> <body> <?php //var_export($_POST); //echo "<br>"; $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<br>"; if($pressed=='C'){ $display=''; }elseif($pressed=='=' && preg_match('~^\d*\.?\d+(?:[*/+-]\d*\.?\d+)*$~',$stored)){ $display.=eval("return $stored;"); } echo "<form action=\"\" method=\"POST\">"; echo "<table style=\"width:300px;border:solid thick black;\">"; echo "<tr>"; echo "<td colspan=\"4\">$display</td>"; echo "</tr>"; foreach(array_chunk($buttons,4) as $chunk){ echo "<tr>"; foreach($chunk as $button){ echo "<td",(sizeof($chunk)!=4?" colspan=\"4\"":""),"><button name=\"pressed\" value=\"$button\">$button</button></td>"; } echo "</tr>"; } echo "</table>"; echo "<input type=\"hidden\" name=\"stored\" value=\"$display\">"; echo "</form>"; ?> </body> </html> 

Вот скриншот, когда я тестировал:

введите описание изображения здесь

Вы можете видеть, что я сделал каждую кнопку кнопкой отправки с тем же именем, но разными значениями. Я использую один скрытый ввод для сохранения встроенного выражения. Там будет много улучшений и соображений, выходящих за рамки этой демонстрации, вам решать, как далеко зайти в эту кроличью нору.


PS Для всех, кто просто прилепил их штурмовой костяк, прищурился один глаз и строго сказал: « Эй, мы не любезно относимся к таким людям, как вы называете eval() в этих частях! ». Ну, я попытался адекватно проверить строку, которую нужно оценить. Если есть известное отверстие, пожалуйста, дайте мне знать, и я попытаюсь это исправить. В качестве альтернативы, это моя попытка повторно изобрести процесс eval() с помощью BOMDAS:

Код: ( Демо )

 $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 в $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 в $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 в $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 в $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