Visualizzazione risultati 1 fino 5 di 5

Discussione: Query mal funzionante

  1. #1
    ilmondonliner non è connesso Utente giovane
    Data registrazione
    05-12-2011
    Messaggi
    44

    Predefinito Query mal funzionante

    Ciao ragazzi,
    mi è insorto un problema nella applicazione di una query nel senso che invece di applicarmi il risultato di una operazione mi cambia il dato in 0

    Vi posto tutto il codice in questione che ha il compito di eseguire le operazioni di un marcato per un gdr php
    anche se forse il malfunzionamento sta nelle operazioni matematiche ma magari c'è anche qualcosa d'altro quindi ve lo posto tutto:
    Codice PHP:
    <?php
    require "parte1.php";
    $modo = 'c';
    $o =$_GET['o'];

    $qtac =$_POST['qtac'];
    $qtav =$_POST['qtav'];
    $sic =$_SESSION['sic'];
    //controllo di sicurezza
    if ($sic == '1') {

    // recupero dei dati del mercato
    $quer = "SELECT * FROM mercato " .
    "WHERE posizione = '$posizione' ";
    $resul = mysql_query($quer) or die (mysql_error());
    $og = mysql_fetch_array($resul);
    foreach(
    $og as $chiave=>$valore)
    $
    $chiave = $valore;


    $quero = "SELECT * FROM mercato_prezzi " .
    "WHERE pposizione = '$posizione' ";
    $resulo = mysql_query($quero) or die (mysql_error());
    $p = mysql_fetch_array($resulo);
    foreach(
    $p as $chiave=>$valore)
    $
    $chiave = $valore;


    $quers = "SELECT * FROM user_inventario2 " .
    "WHERE id = '$id' ";
    $resuls = mysql_query($quers) or die (mysql_error());
    $i = mysql_fetch_array($resuls);
    foreach(
    $i as $chiave=>$valore)
    $
    $chiave = $valore;

    //Il massimo del magazzino del mercato per i vari livelli
    if ($mercato == 1) {
    $limit = 15;
    //liv1 e 2
    }
    if (
    $mercato > 2) {
    $limit = 20;
    //liv 3
    }
    if (
    $mercato > 3) {
    $limit = 35;
    //liv 4
    }
    if (
    $mercato > 4) {
    $limit = 45;
    //liv 5
    }
    if (
    $mercato > 5) {
    $limit = 55;
    //liv 6 e 7
    }
    if (
    $mercato > 7) {
    $limit = 80;
    //liv 8
    }
    if (
    $mercato > 8) {
    $limit = 100;
    //liv 9
    }
    if (
    $mercato > 9) {
    $limit = 150;
    //liv 10
    }
    if (
    $mercato == 11) {
    $limit = 200;
    //liv 11
    }

    //l'oggetto
    //l'inventario oggetto
    $inv = 'a' . $o;
    //il prezzo oggetto
    $pr = 'p' . $o;
    //tutto
    $env = $inv;
    $oggetto = $og[$o];
    $oinv = $i[$inv];
    $opr = $p[$pr];

    // L'acquisto
    if ($modo == 'c') {
    if ((
    $qtac != '') && ($qtac != '0')) {
    //presa dell'oggetto
    $ni = $oinv + $qtac;
    //retrazione dal mercato
    $no = $oggetto - $qtac;
    if ((
    $opr != '1') && ($opr != '1000')) {
    //modifica del prezzo del mercato
    if (($o != 'oro') && ($o != 'ferro') && ($o != 'acciaio') && ($o != 'legno') && ($o != 'sale')&& ($o != 'bastone') && ($o != 'aratro') && ($o != 'armatura')&& ($o != 'spada')&& ($o != 'ariete')&& ($o != 'trabocco') && ($o != 'catapulta') && ($o != 'cannone') && ($o != 'vaso') && ($o != 'tazze')) {
    $npr = $opr + (1 * $qtac);
    } else {
    $npr = $opr + (10 * $qtac);
    }
    } else {
    $npr = $opr;}
    if (
    $soldi >= $npr) {
    if (
    $oggetto >= $qtac) {
    $nsoldi = $npr * $qtac;
    echo
    "Vuoi veramente comprare " . $qtac . " $o " . " per il prezzo di " . $npr . " denari?<br>";?>
    <a href="?conf=si&o=<? echo $o; ?>">Sì</a><br><a href="?conf=no">No</a><br><?
    } else {echo "Ehm come dire... Non ne abbiamo così tanti quanti ne avete richiesto mio cliente";}
    } else {echo
    "Non hai abbastanza soldi nel tuo portafoglio per comprarlo"; }
    }
    }
    // La vendita
    if ($modo == 'v') {
    if ((
    $qtav != '') && ($qta != '0')) {
    //r dell'oggetto
    $ni = $oinv - $qtac;
    //p dal mercato
    $no = $oggetto + $qtac;
    if ((
    $opr != 1) && ($opr != 1000)) {
    //modifica del prezzo del mercato
    if (($o != 'oro') && ($o != 'ferro') && ($o != 'acciaio') && ($o != 'legno') && ($o != 'sale')&& ($o != 'bastone')&& ($o != 'aratro')&& ($o != 'armatura')&& ($o != 'spada')&& ($o != 'ariete')&& ($o != 'trabocco')&& ($o != 'catapulta') && ($o != 'cannone') && ($o != 'vaso') && ($o != 'tazze')) {
    $npr = $opr - (1 * $qtav);
    } else {
    $npr = $opr - (10 * $qtav);

    }}
    } else {
    $npr = $opr;}

    $nsoldi = $npr * $qtav;
    if (
    $limit > $no) {
    if (
    $oinv >= $qtav) {
    echo
    "<br>Vuoi veramente vendere " . $oggetto . $o . " per il prezzo di " . $npr . " denari?<br>";

    ?>
    <a href="?conf=si">Sì</a><br><a href="?conf=no">No</a><br>
    <?
    } else {echo "Non ne avete così tanti!";}
    } else {echo
    "<br>Non puoi vendere questo prodotto qua adesso perchè il limite di immagazzinamento di questo prodotto consentito dall'odierno livello del mercato è stato raggiunto<br>"; }

    }


    $conf =$_GET['conf'];
    if ((
    $conf == 'si') && ($sic == '1')) {
    //disattivazione immediata della chiave di sicurezza
    $_SESSION['sic']= '0';

    $up99 = "UPDATE `user_inventario2` SET `{$env}` = '{$ni}' WHERE `nome` = '{$user}'";
    $rs99 = mysql_query($up99) or die(mysql_error());
    $up88 = "UPDATE user SET " .
    " soldi = '$nsoldi' " .
    "WHERE user_username = '$user' ";
    $rs88 = mysql_query($up88) or die(mysql_error());
    $up77 = "UPDATE `mercato` SET `{$o}` = '{$no}' WHERE `posizione` = '{$posizione}'";
    $rs77 = mysql_query($up77) or die(mysql_error());
    $up66 = "UPDATE `mercato_prezzi` SET `{$pr}` = '{$npr}' WHERE `pposizione` = '{$posizione}'";
    $rs98 = mysql_query($up66) or die(mysql_error());
    echo
    "Affare fatto!";
    }
    if (
    $conf == 'no') {
    //disattivazione immediata della chiave di sicurezza
    $_SESSION['sic']= '0';
    echo
    "Hai detto al venditore che non compravi quell'oggetto, forse ci sarà rimasto un po' male ma<br> pazienza...<br>
    <i>State tornando al mercato</i><br>"
    ;
    header ("Refresh: 3; URL= mercato.php");
    }
    } else {echo
    "Errore di trasferimento dei dati,rifare l'operazione per favore";
    //disattivazione immediata della chiave di sicurezza
    $_SESSION['sic']= '0';
    }
    //disattivazione immediata della chiave di sicurezza


    require "parte2.php";
    ?>
    Voi avete qualche spiegazione del perché mi modifica tutti i risultati in 0?

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Ci sono cinque query di update li dentro, tutte con nomi incomprensibili, che prendono parametri con nomi incomprensibili, e non abbiamo idea di cosa ci finisca dentro. Non è che ci rendi il lavoro facile eh

    Stampa la query invece di eseguirla, e guarda cosa fa.

  3. #3
    ilmondonliner non è connesso Utente giovane
    Data registrazione
    05-12-2011
    Messaggi
    44

    Predefinito

    Ci ho impiegato qualche giorno per vedere la provenienza di tutte le variabili coinvolte e per fare qualche esperimento e sono arrivato a questa conclusione:

    -Le variabili provenienti dal form per decidere la qta da comprare o vendere
    ($qtac & $qtav) sono varchar pur avendo come valore un numero, mentre le altre sono tutte pure int quindi vanno bene le altre.

    -Se si fa qualunque operazione aritmetica mettendo un n1 varchar e n2 int si ottiene sempre un int che vale 0

    -Se provi assegnare un numero direttamente sul codice sorgente invece che le corrispondenti variabili post a $qtac o $qtav allora il mercato funziona tutto alla perfezione.

    QUINDI PER CORREGGERLO BISOGNA CAPIRE COME TRASFORMARE QUELLE VARIABILI POST IN INT
    Voi sapete come si fa esistono tipi di form appositi?

  4. #4
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Basta fare un cast:

    Codice PHP:
    $foo = (int)$foo;


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  5. #5
    ilmondonliner non è connesso Utente giovane
    Data registrazione
    05-12-2011
    Messaggi
    44

    Predefinito

    Ok grazie adesso funziona bene ciaoo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •