Jump to content
Sign in to follow this  
saidatom

Funcao Eval()

Recommended Posts

saidatom

Bom dia,

alguem me pode dizer como criar um calculadora com a função EVAL().

anexo do exemplo da calculadora

53398586.png

Cumprimentos

Share this post


Link to post
Share on other sites
HappyHippyHippo

tratas os eventos dos botões para adicionar ao texto da calculadora e depois é só correr o texto da calculadora como parâmetro da função eval ...

eval("\$result = $texto_calc;");


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
saidatom

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><link rel="stylesheet" type="text/css" href="style.css"/>
<script type="text/javascript" language="javascript" src="jquery.js"></script>
<script type="text/javascript" language="javascript">
$(function($) {
// Quando clicado em algum botão da calculadora (Exceto o de igual e limpar)
$("#painel button:not(.igual, .clear)").click(function() {
	// Coloca o valor na área de calculos e da foco no campo
	$("#expressao").val($("#expressao").val() + this.value);
	$("#expressao").focus();
});
// Quando enviado expressão
$("#calcular, .igual").click(function() {
	// Armazena valores
	var expressao = $("#expressao").val();
	var round = document.getElementById("round").checked;
	// Se a expressão não estiver vazia
	if (expressao != "") {
		// Envia para o processamento
		$.post("calcular.php", {expressao: expressao, round: round}, function(resultado) {
			// Quando retorna, exibe o resultado
			$("#resultados").prepend("<div class='resultado' ondblclick='$(this).fadeOut();'>" + expressao + " = " + resultado + "<\/div>");	
		});	
	}
});
// Quando clicando no botão de limpar
$(".clear").click(function() {
	$("#expressao").val("");	
});
// Quando clicando nas caixas de valores da ajuda e manual
$("#ajuda .resultado, #manual .resultado").click(function() {
	$("#expressao").val(this.lang);
	$("#expressao").focus();
});
});
</script>
<title>Projecto Calculadora</title>
</head>

<body>


<form action="javascript:func()" method="post">
<p> 
</p>
<p>
<input class="TextField"type="text" id="expressao" /> 


  
   
</p>
<p>
    		<button value="1">1</button>
		<button value="2">2</button>
		<button value="3">3</button>
            <button value="*">*</button>
            <button value="/">/</button>
          </p>
          <p>
		<button value="4">4</button>
		<button value="5">5</button>
            <button value="6">6</button>
		<button value="+">+</button>
            <button value="-">-</button>
		</p>
		<p>
		<button value="7">7</button>
		<button value="8">8</button>
		<button value="9">9</button>
		<button value="0">0</button>
		<button value="=" class="igual">=</button>
</p>
</form>

</body>
</html>

Eu tenho isto. ele insere os valores na input e depois coloco a eval no value da input?

É isso?

Share this post


Link to post
Share on other sites
HappyHippyHippo

// Envia para o processamento
$.post("calcular.php", {expressao: expressao, round: round}, function(resultado) {
   ...

este código envia a expressão para o script calcular.php

a úncia coisa que precisas é ter o script calcular.php :

eval("echo {$_POST['expressao']};");


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg

O eval() é muito perigoso se usado com expressões introduzidas pelo utilizador.

Deves sempre validar se a expressão é segura.

Uma maneira mais ou menos válida para a funcionalidade de calculadora é remover tudo o que não sejá válido

$expression = preg_replace('/^[-/*+0-9]/g', '', $_POST['expression']);
if ($expression != $_POST['expression']) /* attempted crack */;


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
saidatom

Pronto isto já esta a funcionar!

Depois de apresentar o resultado, eu faço outra conta mas ele nao apaga o que esta no ecra, qual e a propriedade?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.