Script operatori matematici

leon-kennedy

Utente Attivo
19 Mag 2010
147
0
0
Ciao ho fatto questo script che deve permettermi di acquistare un giocatore.

PHP:
<?
//connessione al database
include('connect.php');

//cash della squadra
$team = $_SESSION['username'];
$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'";
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
$cash = $row['cash'];

//prezzo giocatore
$query = "SELECT * FROM GIOC_giovani";
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
$id = $row['id'];
$costo = $row['costo'];

//il cash non è sufficiente...
if($cash < $costo){
echo "Non hai abbastanza soldi per acquistare il giocatore.";
}else{    //...altrimenti procedo con l'acquisto
//togliamo i soldi dal conto
$operazione = ($cash - $costo);
$query="UPDATE GIOC_giovani SET squadra='$team' WHERE id='$id'";
$result = mysql_query($query) or die (mysql_error());
}
?>

Il problema è che esce sempre il messaggio "Non hai abbastanza soldi....." cosa impossibile dato che 10 milioni è maggiore di 300 mila.
Ho sbagliato ad assegnare il valore a $cash e $costo

Grazie per le risposte0:)
 
ciao alex, mi hai preceduto.
l'unico caso forse in cui 300 mila è maggiore di 10 milioni (visto che sta controllando delle stringhe) è che i numeri siano in formato americano
es. 300,000.00 e 10,000,000.00
ma seccondo me dipende da cosa c'è dentro le due variabili
 
ciao
fatta una piccola verifica, se i numeri sono scritti con i punti o le virgole delle migliaia i risultati sono assurdi
forse all'inserimento inserisce i valori con number_format

PHP:
<?php
$costo="300.000,00";
$cash="10.000.000,00";
if($costo < $cash){
	echo "1) il costo $costo è minore di cassa $cash<br>";
}else{
	echo "1) il costo $costo è maggiore di cassa $cash<br>";
}

$costo="300000.00";
$cash="10000000.00";
if($costo < $cash){
	echo "2) il costo $costo è minore di cassa $cash<br>";
}else{
	echo "2) il costo $costo è maggiore di cassa $cash<br>";
}
$costo=300000.00;
$cash=10000000.00;
if($costo < $cash){
	echo "3) il costo $costo è minore di cassa $cash<br>";
}else{
	echo "3) il costo $costo è maggiore di cassa $cash<br>";
}
$costo="300,000.00";
$cash="10,000,000.00";
if($costo < $cash){
	echo "4) il costo $costo è minore di cassa $cash<br>";
}else{
	echo "4) il costo $costo è maggiore di cassa $cash<br>";
}
/*
NOTA:
la pos 1 e 4 da errore di risultato, la 2 e la 3 sono giuste
*/
?>
 
Ciao,ho usato var_dump e mi sono accorto che il valore ci cash era NULL...mi ero scordato di inserire la sessione per cui $_SESSION['username'] non aveva valore!

Ho risolto!:)
 
Scusate ancora,ma mi si è presentato un altro problema:
PHP:
<?
session_start();
//la classe per il paging
class Paging {
    private $totPag; //Totale Pagine nella tabella
    private $pagCorr; //Pagina corrente
    private $totRighe; //Totale righe nella tabella
    private $righePerPagina; //Numero di righe per pagina da ottenere

    //Facilita l'accesso all'array dell'intervallo
    const kIntervalloInizio='inizio';
    const kIntervalloLunghezza='lunghezza';

    // Il costruttore chiede quale sia la pagina corrente, il totale delle
    // righe in tabella e quante righe per pagina interessano
    public function __construct($pagCorr,$totRighe,$righePerPagina) {
        $this->pagCorr=$pagCorr;
        $this->totRighe=$totRighe;
        $this->righePerPagina=$righePerPagina;
        $this->totPag=$this->contaPagine($totRighe, $righePerPagina);
    }

    // Consente di modificare la pagina corrente con un'altra dopo
    // l'esecuzione del construct
    public function vaiAPagina($pagina){
        if($pagina==self::kUltimaPagina)
            $this->pagCorr=$this->totPag;
        elseif(is_numeric($pagina) and $pagina>1 and $pagina<$this->totPag)
            $this->pagCorr=$pagina;
        else
            $this->pagCorr=1;
    }

    //Indica in quante pagine viene divisa la tabella
    public function contaPagine($totRighe, $righePerPagina) {
        return ceil($totRighe / $righePerPagina);
    }

    //Restituisce un array indicante la posizione del primo record e quante
    //righe occorre scorrere
    public function dammiIntervallo() {
        return array(
            self::kIntervalloInizio => ($this->pagCorr-1) * $this->righePerPagina,
            self::kIntervalloLunghezza => $this->righePerPagina
        );
    }

    //Ritorna il numero per la prossima pagina
    public function prossimaPagina(){
        if($this->totPag==0)
                return 1;
        return ($this->pagCorr>=$this->totPag)?$this->totPag:$this->pagCorr+1;
    }

    //Ritorna il numero per la pagina precedente
    public function precedentePagina(){
        return ($this->pagCorr<=1)?1:$this->pagCorr-1;
    }

}

//PREPARA L'OGGETTO PAGING E LO RITORNA
function CostruisciOggettoPaging($sql) {
    if (!isset($_GET['p']))
        $pagCorr = 1;
    else
        $pagCorr=$_GET['p'];
    $res = mysql_query($sql) or die('Err3');
    $totRighe = mysql_num_rows($res);
    mysql_free_result($res);
    $righePerPagina = 25;
    return new Paging($pagCorr, $totRighe, $righePerPagina);
}

//REALIZZA LA TABELLA E LA RITORNA SOTTO FORMA DI STRINGA
function CostruisciTabella($p,$sql) {
    $inter=$p->dammiIntervallo();
    $res = mysql_query("$sql limit {$inter[Paging::kIntervalloInizio]},{$inter[Paging::kIntervalloLunghezza]}") or die('Err4');
    ob_start();
    //Definizione della tabella
    echo <<<END
<table border="0" cellpadding="7px">
    <tr>
        <th>Nome</th>
        <th>Cognome</th>
        <th>Ruolo</th>
        <th>Et&agrave;</th>
        <th>Costo</th>
        <th>Squadra</th>
        <th>Tuffo</th>
        <th>Respinta</th>
        <th>Presa</th>
        <th>Reattivit&agrave;</th>
        <th>Resistenza</th>
    </tr>
END;
    while ($row = mysql_fetch_assoc($res)) {
    $id = $row['id'];
    $_SESSION['id_giocatori'] =  $id;
    $costo = number_format($row['costo'], "0", "", "."); 
    echo <<<END
    <tr>
        <td>{$row['nome']}</td>
        <td>{$row['cognome']}</td>
        <td>{$row['ruolo']}</td>
        <td>{$row['età']}</td>
        <td>$costo €</td>
        <td>{$row['squadra']}</td>
        <td>{$row['tuffo']}</td>
        <td>{$row['respinta']}</td>
        <td>{$row['presa']}</td>
        <td>{$row['reattività']}</td>
        <td>{$row['resistenza']}</td>
        <td><a href="azione_compra_port.php"><img src="immagini/icona_compra.jpg"></a></td>
    </tr>
END;
    }
    //Link di navigazione
    echo <<<END
    <th colspan="2">
        <a href="{$_SERVER['PHP_SELF']}?p={$p->precedentePagina()}">Indietro</a> |
        <a href="{$_SERVER['PHP_SELF']}?p={$p->prossimaPagina()}">Avanti</a>
    </th>
</table>
END;
     mysql_free_result($res);
     return ob_get_clean();
}

//connessione al database
include('../connect.php');

//estrazione dei giocatori
$sql="SELECT * FROM GIOC_giovani_port WHERE squadra='Senza contratto.' ORDER BY nome ASC";

$p = CostruisciOggettoPaging($sql);
$tabella_dati = CostruisciTabella($p,$sql);

mysql_close($conn);

echo $tabella_dati;
?>

azione_compra_port.php
PHP:
<?
session_start();
$id = $_SESSION['id_giocatori'];

//connessione al database
include('connect.php');

//sessione
include('sessione.php');

//cash della squadra
$team = $_SESSION['username'];
$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'";
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
$cash = $row['cash'];

//prezzo giocatore
$query = "SELECT * FROM GIOC_giovani_port";
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
$id = $row['id'];
$costo = $row['costo'];

//il cash non è sufficiente...
if($cash < $costo){
echo "Non hai abbastanza soldi per acquistare il giocatore.";
}else{    //...altrimenti procedo con l'acquisto

//cambiamo squadra al giocatore
$query="UPDATE GIOC_giovani_port SET squadra='$team' WHERE id='$id'";
$result = mysql_query($query) or die (mysql_error());

//togliamo i soldi dal conto
$operazione = ($cash - $costo);
$query="UPDATE SQUADRA_dati SET cash='$operazione' WHERE team='$team'";
$result = mysql_query($query) or die (mysql_error());
}


?>
La parte riguardante l'operazione per togliere i soldi dal conto funziona,il problema è che il giocatore che acquisto tramite lo script non cambia squadra come invece dovrebbe.Alla fine del codice ho messo echo $_SESSION['id_giocatori']; per vedere il risultato dell'id e mi sono accorto che rimane sempre uguale,quindi ho sbagliato ad assegnare il valore!

Vi ringrazio per la pazienza :)
 
Ultima modifica:
ciao
metti il solito var_dump

PHP:
//.....
$query="UPDATE GIOC_giovani_port SET squadra='$team' WHERE id='$id'";
var_dump($query);
$result = mysql_query($query) or die (mysql_error()); 
//....
così verifichi sia che la query sia giusta che il valore di $team
 
Ciao:

string(62) "UPDATE GIOC_giovani_port SET squadra='Super Stars' WHERE id=''9"

La squadra è giusta,il problema è che non mi salva l' id del giocatore da comprare,anzi mi salva un id a caso perchè in realtà l'id del giocatore che ho acquistato non è 9,bensì 26! :\

Come posso risolvere?E' da un pò che ci sono sopra! :\
 
Ultima modifica:
ciao
allora non ti rimane che una cosa da fare:
cospargi a pioggia i var_dump prima e dopo dove dovresti avere il benedetto id e vedi in che punto hai l'errore
 
ciao
forse ho visto
tu fai una query e ricavi l'id
//prezzo giocatore
$query = "SELECT * FROM GIOC_giovani";
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
$id = $row['id']; $costo = $row['costo'];

c'è un "pccolo" particolare nella select
$query = "SELECT * FROM GIOC_giovani";
secondo te data una tabella con dentro es. 987 giocatori una select e quindi query quale id estrae?

per estrarre un perticolare id la query deve avere un WHERE altrimenti come fa a sapere quale id estrarre?
 
Guarda il codice è questo,ma continua a non funzionare:
PHP:
<?php
//connessione al database
include('connect.php');

//sessione
include('sessione.php');

//cash della squadra
$team = $_SESSION['username'];
$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
$cash = $row['cash'];
}

//prezzo giocatore
$query = "SELECT * FROM GIOC_giovani_port WHERE id='$id'";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
$id = $row['id'];
$costo = $row['costo'];
}

//il cash non è sufficiente...
if($cash < $costo){
echo "Non hai abbastanza soldi per acquistare il giocatore.";
}else{    //...altrimenti procedo con l'acquisto

//cambiamo squadra al giocatore
$query="UPDATE GIOC_giovani_port SET squadra='$team' WHERE id='$id'";
var_dump($query);
$result = mysql_query($query) or die (mysql_error());

//togliamo i soldi dal conto
$operazione = ($cash - $costo);
$query="UPDATE SQUADRA_dati SET cash='$operazione' WHERE team='$team'";
$result = mysql_query($query) or die (mysql_error());
}
?>
 
ciao
fai queste prova, guarda cosa ho scritto nei commenti

PHP:
<?php
//connessione al database
include('connect.php');
//sessione
include('sessione.php');
//metti un var dump per verificare l'id
var_dump($id);
//cash della squadra
$team = $_SESSION['username'];
$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'";
$result = mysql_query($query) or die (mysql_error());
//ogni squadra è unica e quindi la sua cassa è unica quindi inutile whilare
$row = mysql_fetch_array($result);
$cash = $row['cash'];
//continua a verificare l'id
var_dump($id);
//prezzo giocatore
$query = "SELECT * FROM GIOC_giovani_port WHERE id='$id'";
//il prezzo di un giocatore è unico quindi inutile whilare (almeno dovrebbe)
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result);
$costo = $row['costo'];
//il cash non è sufficiente...
if($cash < $costo){
	echo "Non hai abbastanza soldi per acquistare il giocatore.";
}else{    //...altrimenti procedo con l'acquisto
	//riverifica l'id
	//cambiamo squadra al giocatore
	var_dump($id);
	$query="UPDATE GIOC_giovani_port SET squadra='$team' WHERE id='$id'";
	var_dump($query);
	$result = mysql_query($query) or die (mysql_error());
	//e verifica non tanto l'errore ma l'uppaggio
	var_dump($result);//dovrebbe darti (resource) se ti da (NULL) c'è un errore nella query
	//togliamo i soldi dal conto
	$operazione = ($cash - $costo);
	$query="UPDATE SQUADRA_dati SET cash='$operazione' WHERE team='$team'";
	$result = mysql_query($query) or die (mysql_error());
}
?>
poi cosa hai in sessione.php? se solo la session_start() ti conviene metterla alli'inizio, prima dell'include di connessione e togliere il realtivo include (tra l'altro è meglio che tu usi include_once)

PHP:
<?php
if(!isset($_SESSION)){session_start()};
//.........
?>
posta poi (se non funzia) le varie risposte dei var_dump
 
Ciao ecco il risultato:
NULL NULL NULL string(62) "UPDATE GIOC_giovani_port SET squadra='Super Stars' WHERE id=''" bool(true)

la pagina sessione.php controlla se l'utente ha effettuato il log in,in caso contrario viene rimandato alla home del sito.
 
ciao
vedi che non trasmetti l'id del giocatore?
NULL NULL NULL
poi
"UPDATE GIOC_giovani_port SET squadra='Super Stars' WHERE id=''"
e che quindi il where non funzia, uppando qualcosa a caso
 
Adesso ho modificato mettendo:
PHP:
<?php 
session_start();
$id = $_SESSION['id_giocatore'];
//connessione al database 
include('connect.php'); 
//sessione 
include('sessione.php'); 
//metti un var dump per verificare l'id 
var_dump($id); 
//cash della squadra 
$team = $_SESSION['username']; 
$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'"; 
$result = mysql_query($query) or die (mysql_error()); 
//ogni squadra è unica e quindi la sua cassa è unica quindi inutile whilare 
$row = mysql_fetch_array($result); 
$cash = $row['cash']; 
//continua a verificare l'id 
var_dump($id); 
//prezzo giocatore 
$query = "SELECT * FROM GIOC_giovani_port WHERE id='$id'"; 
//il prezzo di un giocatore è unico quindi inutile whilare (almeno dovrebbe) 
$result = mysql_query($query) or die (mysql_error()); 
$row = mysql_fetch_array($result); 
$costo = $row['costo']; 
//il cash non è sufficiente... 
if($cash < $costo){ 
    echo "Non hai abbastanza soldi per acquistare il giocatore."; 
}else{    //...altrimenti procedo con l'acquisto 
    //riverifica l'id 
    //cambiamo squadra al giocatore 
    var_dump($id); 
    $query="UPDATE GIOC_giovani_port SET squadra='$team' WHERE id='$id'"; 
    var_dump($query); 
    $result = mysql_query($query) or die (mysql_error()); 
    //e verifica non tanto l'errore ma l'uppaggio 
    var_dump($result);//dovrebbe darti (resource) se ti da (NULL) c'è un errore nella query 
    //togliamo i soldi dal conto 
    $operazione = ($cash - $costo); 
    $query="UPDATE SQUADRA_dati SET cash='$operazione' WHERE team='$team'"; 
    $result = mysql_query($query) or die (mysql_error()); 
} 
?>

$_SESSION['id_giocatore'] è uguale a $row['id'] che riprendo da
paginazione_portieri.php:
PHP:
while ($row = mysql_fetch_assoc($res)) {
    $costo = number_format($row['costo'], "0", "", "."); 
    $_SESSION['id_giocatore'] = $row['id'];
    echo <<<END
    <tr>
        <td>{$row['nome']}</td>
        <td>{$row['cognome']}</td>
        <td>{$row['ruolo']}</td>
        <td>{$row['età']}</td>
        <td>$costo €</td>
        <td>{$row['squadra']}</td>
        <td>{$row['tuffo']}</td>
        <td>{$row['respinta']}</td>
        <td>{$row['presa']}</td>
        <td>{$row['reattività']}</td>
        <td>{$row['resistenza']}</td>
        <td><a href="azione_compra_port.php"><img src="immagini/icona_compra.jpg"></a></td>
    </tr>
END;
Con i var_dump mi restituisce sempre lo stesso id,il problema è che non corrisponde a quello del giocatore in questione.E' strano! :\
 
ciao
ecco l'inghippo (almeno così mi sembra).
il sistema funziona in questo modo?
si clicca su icona_compra.jpg scegliendo il giocatore da acquistare
e si va alla pagina azione_compra_port.php dove (previa verifica se uno è ricco) acquista il giocatore che "dovrebbe" cambiare squadra
è giusto?
se è così
primo: mettendo l'istruzione
$_SESSION['id_giocatore'] = $row['id'];
dove l'hai messa tu, al primo giro del while la sessione conterrà il primo id, al secondo il secondo, ecc...
quindi NON saprai mai quale giocatore deve essere acuistato
per trasmettere l'id coretto devi "spedirlo" via get
quindi prova a fare queste modifiche

PHP:
<?php
while ($row = mysql_fetch_assoc($res)) { 
    $costo = number_format($row['costo'], "0", "", ".");  
    echo <<<END 
    <tr> 
        <td>{$row['nome']}</td> 
        <td>{$row['cognome']}</td> 
        <td>{$row['ruolo']}</td> 
        <td>{$row['età']}</td> 
        <td>$costo €</td> 
        <td>{$row['squadra']}</td> 
        <td>{$row['tuffo']}</td> 
        <td>{$row['respinta']}</td> 
        <td>{$row['presa']}</td> 
        <td>{$row['reattività']}</td> 
        <td>{$row['resistenza']}</td>
        <td><a href="azione_compra_port.php?id_acq={$row['id']}"><img src="immagini/icona_compra.jpg"></a></td> 
    </tr> 
END; 
?>
poi nell'altra pagina ricevi

PHP:
<?php  
session_start(); 
//connessione al database  
include('connect.php');  
//sessione  
include('sessione.php');  


if(isset($_GET['id_acq'])){
	//e altri controlli sul get, per esempio se è un numero
	$id=$_GET['id_acq'];
	var_dump($id); 
	//cash della squadra  
	$team = $_SESSION['username'];
	$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'";  
	
	//ecc....ecc.....
} //fine if del isset get
?>
 
Grazie finalmente l'url corrisponde all'id sul database,ma ancora non funziona perchè sicuramente ho sbagliato qualcosa nella pagina azione_compra_port.php:

PHP:
<?php 
//connessione al database 
include('connect.php'); 

//sessione 
include('sessione.php'); 

if(isset($_GET['id_acq'])){ 
//e altri controlli sul get, per esempio se è un numero 
$id = $_GET['id_acq']; 
var_dump($id);  

//cash della squadra   
$team = $_SESSION['username'];
$query = "SELECT * FROM SQUADRA_dati WHERE team='$team'"; 
$result = mysql_query($query) or die (mysql_error());
$row = mysql_fetch_array($result); 
$cash = $row['cash'];    

//continua a verificare l'id 
var_dump($id); 

//prezzo giocatore 
$query = "SELECT * FROM GIOC_giovani_port WHERE id='$id'"; 

//il prezzo di un giocatore è unico quindi inutile whilare (almeno dovrebbe) 
$result = mysql_query($query) or die (mysql_error()); 
$row = mysql_fetch_array($result); 
$costo = $row['costo']; 

//il cash non è sufficiente... 
if($cash < $costo){ 
echo "Non hai abbastanza soldi per acquistare il giocatore."; 
}else{    //...altrimenti procedo con l'acquisto 
//riverifica l'id 
var_dump($id); 
    
//cambiamo squadra al giocatore
$query="UPDATE GIOC_giovani_port SET squadra='$team' WHERE id='$id'"; 
var_dump($query); 
$result = mysql_query($query) or die (mysql_error()); 

//e verifica non tanto l'errore ma l'uppaggio 
var_dump($result);//dovrebbe darti (resource) se ti da (NULL) c'è un errore nella query 

//togliamo i soldi dal conto 
$operazione = ($cash - $costo); 
$query="UPDATE SQUADRA_dati SET cash='$operazione' WHERE team='$team'"; 
$result = mysql_query($query) or die (mysql_error()); 
} 
} //fine if del isset get 
?>
 

Discussioni simili