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
 

tony1

Utente Attivo
8 Ago 2010
32
0
0
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.
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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.
 

tony1

Utente Attivo
8 Ago 2010
32
0
0
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:
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Ma la versione di PHP che hai su Seven è la stessa che hai su Ubuntu?
 

tony1

Utente Attivo
8 Ago 2010
32
0
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
@alex: c'è un piccolo erroretto

($_SESSION['value1'] / $_SESSION['value2'])

e se $_SESSION['value2'] uguale a 0 cosa succede?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
leggi tutta la discussione, in particolare la parte dove si intercetta e modifica il valore della sessione
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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”.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
N Problema con position absolute e overflow HTML e CSS 4
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
K [PHP] Problema con variabili concatenate. PHP 1
O problema con query PHP 4
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
M Problema con Try Catch PHP 0
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
R problema con else PHP 0
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema con eccessiva nitidezza apertura Camera Raw Photoshop 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 5
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
S Problema con mysqli_num_rows PHP 18
grgfede Problema javascript con aruba Javascript 1

Discussioni simili