problema con $_GET

tony1

Utente Attivo
8 Ago 2010
32
0
0
Per esercizio ho realizzato una calcolatrice in php.Il codice è questo:
Codice:
<?php
$_GET["valUno"];
$_GET["valDue"];
$_GET["op"];

$currentNum = "";
if( isset($_GET["display"]) && ctype_digit($_GET["display"]) ){
    $currentNum .= $_GET["display"];
}
if( isset($_GET["num"]) && ctype_digit($_GET["num"]) ){
    $currentNum .= $_GET["num"];
}

 

switch($_GET["num"])
{
	case "*":
	 $_GET["op"]="*";
	 $_GET["valUno"]=$currentNum;
	$currentNum="";
    
	break;
	case '/':
	 $_GET["op"]='/';
	 $_GET["valUno"]=$currentNum;
	$currentNum="";
    
	break;
	case '+':
	 $_GET["op"]='+';
	$_GET["valUno"]=$currentNum;
	$currentNum="";
	break;
	case '-':
	 $_GET["op"]='-';
	 $_GET["valUno"]=$currentNum;
	$currentNum="";
	break;
	case 'C':
	$currentNum="";
	break;
	case '=':
     $_GET["valDue"]=$currentNum;
         
	if($_GET["op"]=="*")
    {
		$currentNum=$_GET["valUno"]  * $_GET["valDue"];
	}
	elseif($_GET["op"]=='/')
	{
		$currentNum=$_GET["valUno"]/$_GET["valDue"];
	}
	elseif($_GET["op"]=='+')
	{
		$currentNum=$_GET["valUno"]+$_GET["valDue"];
	}
	elseif($_GET["op"]=='-')
	{
		$currentNum=$_GET["valUno"]-$_GET["valDue"];
	}
	break;
}

?>


<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8"/>
    <title>Esempio calcolatrice</title>
</head>
<body>
    <form  method="get" action="" >
<p><input type="text" name="display" value="<?php echo $currentNum; ?>" /></p>
        <p>
            <input type="submit" name="num" value="7"/>
            <input type="submit" name="num" value="8"/>
            <input type="submit" name="num" value="9"/>
            <input type="submit" name="num"  value="*" /><br/>
            <input type="submit" name="num" value="4"/>
            <input type="submit" name="num" value="5"/>
            <input type="submit" name="num" value="6"/>
            <input type="submit" name="num" value="+"/><br/>
            <input type="submit" name="num" value="1"/>
            <input type="submit" name="num" value="2"/>
            <input type="submit" name="num" value="3"/>
            <input type="submit" name="num" value="/"/><br/>
            <input type="submit" name="num" value="C" />
            <input type="submit" name="num" value="0"/>
            <input type="submit" name="num" value="="/>
            <input type="submit" name="num" value="-"/>
            
    </form>
</body>
</html>

Il problema è che non funziona con windows 7.Premetto che ho caricato un applicativo che si chiama AppServ che mi ha installato apache,mysql e php.Lo stesso codice invece funziona con ubuntu dove è già tutto installato il necessario per far girare codice php.Comunque il problema che ho ora è che sembra che adottando $_GET per le variabili sembra che non mantengono il loro valore tra il caricamento di una pagina e un'altro.Dove sbaglio? Grazie
 
Se provi a farla girare vedrai che non funziona.In pratica valUno che è il primo numero che inserisco non memorizza il valore che gli dò.Infatti quando vado a fare l'operazione della somma per esempio valUno non vale niente.Sper di essere stato chiaro.
 
Lo script è strutturato male. Memorizzare le variabili in $_GET come hai fatto tu è una pessima cosa, in quanto $_GET, $_POST e tutti gli array superglobali sono pensati per essere di sola lettura (a parte $_SESSION e qualche altro). Ti consiglio di utilizzare proprio le sessioni. Fai una cosa del genere:
PHP:
<?php
session_start();
var_dump($_POST['value']);

switch($_POST['value'])
{
	case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
		if(isset($_SESSION['operator']))
			$_SESSION['value2'] .= $_POST['value'];
		else
			$_SESSION['value1'] .= $_POST['value'];
		
		$_SESSION['display'] .= $_POST['value'];
		break;
	case '+': case '-': case '*': case '/':
		$_SESSION['display'] .= $_POST['value'];
		$_SESSION['operator'] = $_POST['value'];
		break;
	case 'C':
		echo 'delete';
		$_SESSION['display'] = '';
		unset($_SESSION['value1'], $_SESSION['value2'], $_SESSION['operator']);
		break;
	case '=':
		switch($_SESSION['operator'])
		{
			case '+':
				$_SESSION['display'] = $_SESSION['value1'] + $_SESSION['value2'];
				break;
			case '-':
				$_SESSION['display'] = $_SESSION['value1'] - $_SESSION['value2'];
				break;
			case '*':
				$_SESSION['display'] = $_SESSION['value1'] * $_SESSION['value2'];
				break;
			case '/':
				$_SESSION['display'] = ($_SESSION['value1'] / $_SESSION['value2']) .'.'. ($_SESSION['value1'] % $_SESSION['value2']);
				break;
			default:
				break;
		}
		unset($_SESSION['value1'], $_SESSION['value2'], $_SESSION['operator']);
		break;
	default:
		break;
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8"/>
    <title>Esempio calcolatrice</title>
</head>
<body>
    <form  method="post" action="" >
<p><input type="text" name="display" value="<?php echo $_SESSION['display']; ?>" /></p>
        <p>
            <input type="submit" name="value" value="7"/>
            <input type="submit" name="value" value="8"/>
            <input type="submit" name="value" value="9"/>
            <input type="submit" name="value"  value="*" /><br/>
            <input type="submit" name="value" value="4"/>
            <input type="submit" name="value" value="5"/>
            <input type="submit" name="value" value="6"/>
            <input type="submit" name="value" value="+"/><br/>
            <input type="submit" name="value" value="1"/>
            <input type="submit" name="value" value="2"/>
            <input type="submit" name="value" value="3"/>
            <input type="submit" name="value" value="/"/><br/>
            <input type="submit" name="value" value="C" />
            <input type="submit" name="value" value="0"/>
            <input type="submit" name="value" value="="/>
            <input type="submit" name="value" value="-"/>
            
    </form>
</body>
</html>
Testato e funzionante.
 
Ti ringrazio per la risposta a breve.Ho provato il tuo codice è funziona perfettamente.Mi ci vuole un pò per studiarlo.La cosa che mi manda in bestia è che con ubuntu funzionava tutto.Mi sarebbe piaciuto sapere dov'era l'errore nel mio codice.Ci sto sbattendo la testa da giorni!:incazz2:
 
Ma la versione di PHP che hai su Seven è la stessa che hai su Ubuntu?
 
Credo di si perchè è l'ultimo aggiornato.Se non sbaglio è la 5.Ma perchè cambia qualcosa?Su ubuntu in effetti usavo session_register.Mentre con PhpDesigner me lo deprecava.
 
ciao
in questo caso sono più d'accordo con alex che con eliox.
dalla discussione (ma perchè devono discutere in albionico??!!??) mi è sembrato di capire che fanno così:
PHP:
if($_SESSION['value2']==0){
  $_SESSION['value2']=1;
}
il che, se non ho capito male, è un errore madornale
PHP:
if($_SESSION['value2']==0){
  echo "ERR";
}else{
  //esegui la divisione...
}

p.s.
anche se uno scrive (metto la notazione E)
$_SESSION['value2']= 777E-357 deve dare ERR
 
Ultima modifica:
leggi tutta la discussione, in particolare la parte dove si intercetta e modifica il valore della sessione
 
ciao forse sarebbe da aprirsi un nuovo post su ot.
sarò un poco gnocco, ma guardando la discussione al post #6 un certo foxy posta


PHP:
if ( $variable6 == 0) { 
$variable6 = 1; 
} else { 
$avgBuy = ($variable5 / $variable6); 
}

e, come detto sono gnocco, ma è l’unica soluzione che ho visto (tra l’altro matematicamente errata) se uno volesse essre pignolo per divisore=0 dovrebbe scrivere risultato = ∞.
forse ci sono post successivi, ma non ho trovato (come c’è qui su mrwm) “alla pagina successiva”.
 
Ma no che non sei gnocco, sei solo vecchio :)
Se il divisore è uguale a "0" il dividendo sarà comunque uguale a se stesso (a meno di una divisione per 0 che non è possibile senza un errore), quindi, o rendi uguale il divisore a 1, o rendi il dividendo uguale a 0 in modo da ottenere comunque il risultato di una divisione per 0.
Naturalmente se entrambi sono 0, si farà in modo di evitare la divisione.
 
ciao
@eliox
allora mi ricredo, vecchio si, ma gnocco no, quello che propongono nel post è un madornale errore aritmetico/matematico, la divisione per 0 in aritmetica non si può fare.
in matematica si (con quello che si chiama passaggio al limite) per cui il risultao è infinito, analogamente, sempre in matematica, se entrambi sono 0 non è detto quale è il risultato, puo essere 0 un numero o infinito ( ∞ ).
ribadisco se il divisore è 0 deve dare errore, qualsiasi altra cosa è sbagliata, e avere un'informazione sbagliata è peggio che non averne.

p.s.
quasi quasi lo scrivo nel post che hai indicato (in italiano, visto che qualcuno ogni tanto qui posta in albionico)
 
Ultima modifica:

Discussioni simili