Skocz do zawartości
Forum komputerowe

Kalkulator do wprowadzenia działania w jednym polu input


Rekomendowane odpowiedzi

Witam Jestem początkująca .

Chce zrobić kalkulator z jednym polem input, gdzie użytkownik wprowadza działanie np. 2 + 2 = lub 2 + 2 + 2 = itp. Użytkownik może wprowadzić dowolną ilość liczb np. 2 + 2 +  2 + 2 = Po kliknięciu oblicz pokazuje się wynik.

Zrobiłam formularz html, ale nie wiem jak zrobić php. Proszę o pomoc.

<form action="kalkulator2.php" method="post">
<p>Wpisz działanie</p>
    <input type="text" name="oblicz_dane" placeholder="wprowadż działanie">
</form>
 
<p>Wynik</p>
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Najprościej będzie użyć eval() po stronie PHP, no ale najpierw będziesz musiała zastosować jakiś filtr dla danych, bo 'gołe' użycie eval() prowadzi do podatności.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Już mam rozwiązanie

<form action="kalkulator2.php" method="post">
 <table>
 <tr>
 <td>
    <h3>Kalkulator</h3>
    <p>Wpisz działanie :</p>
    <p>Dozwolone znaki: + - * / ( )</p>
    <input type="text"  name="oblicz_dzialanie" style="width: 400px, height: 400px">
	</td>
  </tr>
 </table>
  </form>
<?php
 
    if(isset($_POST['oblicz_dzialanie'])) {
        $oblicz_dzialanie = trim($_POST['oblicz_dzialanie']);
 
        if(! empty($oblicz_dzialanie)) {
            try {
                // https://www.w3schools.com/php/phptryit.asp?filename=tryphp_func_regex_preg_replace
                // Z przysłanego ciągu znakó wywalamy wszystko: litery, spacje ,^, % $ itd.
                // zostawiając liczby i ( ) + * - /
                // testowy: ' (( 7+3.45 ) ) * 3.25sel 7 + a (5-6)[email protected]# $%^&'
                // wynik: (7+3.45)*3.257+(5-6)
                $pattern = '/[a-zA-Z\x20-\x27\x3A-\x40\x5B-\x60\x7B-\x7E]/i';
                    $dzialanie = preg_replace($pattern, '', $oblicz_dzialanie);
                    for($i=42; $i<48; $i++) {
                        // redukujemy dublujące się znaki dozwolone np.: ++ -> +
                        $dzialanie = str_replace(chr($i).chr($i), chr($i), $dzialanie);
                    }
 
                 
                try {
                    ob_start();
                    eval("echo ".$dzialanie.";");
                    $wynik = ob_get_clean();
                } catch (ParseError $e) {
                    $wynik = "<span style='color: red'>nieprawidłowy zapis działania</span>.";
                }
            } catch (Exception $e) {
                $wynik = "<span style='color: red'>nieprawidłowy zapis działania</span>.";
            }
        } else {
            $wynik = "Brak danych do obliczenia";
        }
    } else {
        $wynik = "Brak danych do obliczenia";
    }
 
  
    echo "<p>".$dzialanie." = ".$wynik."</p>";
 
?>
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Podobna zawartość

    • Przez Vast
      Cześć, mam bazę danych z unixowym czasem ich dodania, potrzebuję usunąć z niej rekordy młodsze niż 50 dni (Jeśli były stworzone w przeciągu 50 dni). Jakieś rady? Totalnie nie mam pomysłu.
       
      Dzięki serdeczne za pomoc :).
    • Przez Mięta
      Mam pytanie nie wiem jak zrobić na stronie aby pokazywało styl? Jak dodać zewnętrzny arkusz stylów do HTML?
      Będę wdzięczny za pomoc.
    • Przez Tomik
      FORMATOWANIE I KOLOROWANIE GRUP. POŚWIATA, GWIAZDKI, IKONY I FONT AWESOME
      Paleta kolorów  HTML Color Picker
      Font Awesome  Icons | Font Awesome
      Przykładowe efekty:


      FORMATOWANIE
      Utwórz nowy arkusz CSS o nazwie, np.: ranks.css i dodaj:
      .ranks-NAZWA { background: url(TŁO); color: #KOLOR; text-shadow: 1px 1px 15px #POŚWIATA; font-weight: bold; } W Format loginu dodaj:
      <span class="ranks-NAZWA">{username}</span> Legenda:
      NAZWA – nazwa klasy CSS TŁO – tło KOLOR – kolor nazwy grupy POŚWIATA – kolor poświaty

    • Przez Dazai
      Zajmuje się tworzeniem stron internetowych HTML, landing-page, one-page, strony wizytówki, a także proste szablony pod CMS Wordpress. Oferuje staranność, dokumentacje, nowoczesność a przede wszystkim przejrzysty kod zrozumiały nawet dla laika. 
      Wykonam: strony HTML, landing-page, one-page, multi-page, blogowe szablony WordPress
      Zakres umiejętności:
      HTML5 & CSS3 JavaScript (podstawowy) Bootstrap 3.x UIKit  RWD WordPress Sass & Gulp.js Adobe Photoshop Podstawy UI/UX Chętnych zapraszam do kontaktu a także przejrzenia mojego portfolio, gdzie link dostępny jest na moim profilu forumowym.
      Kontakt: PW na forum lub [email protected]
×
×
  • Dodaj nową pozycję...