Visualizzazione risultati 1 fino 7 di 7

Discussione: il mercato di un gdr php

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

    Predefinito il mercato di un gdr php

    Ciao a tutti,
    sto creando un browser-game GDR medievale
    nelle varie città/castelli
    c'è il mercato che funziona in questo modo ci sono 11 livelli più alto è il livello più è la capacità di immagazzinamento dei vari prodotti, inoltre non esiste la compra-vendita tra i giocatori ma è istantanea al mercato tipo come la borsa valori (poi ci sono anche i negozi ma è un sistema diverso in cui il proprietario decide lui il prezzo)
    nel mercato quando compri il prezzo aumenta e quando vendi il prezzo si abbassa
    ma mentre lo provavo (il codice non è completo) mi fa questo errore:
    Fatal error: Unsupported operand types in /membri/ilmondonliner/ILMONDODEICASTELLI/mercato_compra.php on line 45 Ho sospettato che sia quando ho fatto
    “$$oggetto = $o;” ma è l’unico modo per recuperare il prezzo e la quantità disponibile al mercato, se è questo voi cosa mi consigliate di fare per ottenerle?
    Ecco il codice:
    Codice PHP:
    <?php
    require "parte1.php";
    $o =$_GET['o'];
    $qtac =$_POST['qtac'];
    $qtav =$_POST['qtav'];


    // 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;


    //l'oggetto
    //l'inventario oggetto
    $inv = "a" . $o;
    //il prezzo oggetto
    $pr = "p" . $o;
    //tutto
    $$oggetto = $o;
    $
    $oinv = $inv;
    $
    $opr = $pr;
    // L'acquisto
    if (($qtac != '') Or ($qtac != '0')) {
    //presa dell'oggetto
    $ni = $i + $qtac;
    //retrazione dal mercato
    $no = $og - $qtac;
    //modifica del prezzo del mercato


    }

    require
    "parte2.php";
    ?>

  2. #2
    Guest

    Predefinito

    Il sistema da te utilizzato non è il massimo, lo riscriverei da capo perché non è per niente sicuro ed è abbastanza "pesante", perché va a creare e valorizzare variabili inutilmente.

    Comunque il tuo problema è relativo alla somma:
    Codice PHP:
    //presa dell'oggetto
    $ni = $i + $qtac;
    $i non è definita come numero, bensì come array dei risultati della query nel foreach.


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

    Predefinito

    ah è vero non l'avevo notato, grazie

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

    Predefinito

    Lo sistemato adesso è molto meglio manca ancora la parte della modifica del database per il resto va bene se non fosse che mi fa questo errore:
    Parse error: syntax error, unexpected '}' in /membri/ilmondonliner/LASPADANELLAROCCIA/mercato_compra.php on line 99
    ho cercato la parentesi in più ma non lo trovata voi la riuscite a vedere?

    Codice PHP:
    <?php
    require "parte1.php";
    $o =$_GET['o'];
    $qtac =$_POST['qtac'];
    $qtav =$_POST['qtav'];
    $sic =$_SESSION['sic'];
    //controllo di sicurezza
    if ($sic == '1') {
    //disattivazione immediata della chiave di sicurezza
    $_SESSION['sic']= '0';
    // 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
    $oggetto = $og[$o];
    $oinv = $i[$inv];
    $opr = $p[$pr];

    // L'acquisto
    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 * $oggetto);
    } else {
    $npr = $opr + (10 * $oggetto);
    }} else {$npr = $opr;}
    if ($soldi => $npr) {
    echo "Vuoi veramente comprare " . $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 hai abbastanza soldi nel tuo portafoglio per comprarlo"; }}

    // La vendita
    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 * $oggetto);
    } else {
    $npr = $opr - (10 * $oggetto);
    }} else {
    $npr = $opr;}
    if (
    $limit => $no) {
    echo
    "Vuoi veramente vendere " . $oggetto . $o . " per il prezzo di " . $npr . " denari?<br>";
    } else {echo
    "Non puoi vendere questo prodotto qua adesso perchè il limite di immagazzinamento di qusto prodotto consentito dall'odierno livello del mercato è stato raggiunto"; }
    }
    ?>
    <a href="?conf=si">Sì</a><br><a href="?conf=no">No</a><br>
    <?
    }
    $conf =$_GET['conf'];
    if (
    $conf == 'si') {

    }
    if (
    $conf == 'no') {
    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";}
    require
    "parte2.php";
    ?>

  5. #5
    Guest

    Predefinito

    }} else {$npr = $opr;}
    non capisco perchè usi il doppio }
    Codice:
    // L'acquisto 
    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 * $oggetto); 
    } else { 
    $npr = $opr + (10 * $oggetto); 
    }} else {$npr = $opr;}

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Oltre a ciò già segnalato da gamecity, la graffa in più andrebbe dopo l'else.
    Poi, hai piazziato il delimitatore che indica la fine del codice php ( ?> ) inutilmente.

    Codice PHP:
    if ($mercato == 11) {
    $limit = 200;
    //liv 11
    }?><!-- qui
    Rimuovilo, altrimenti il codice successivo non verrà interpretato.

    Se usassi un buon editor (che evidenzia la sintassi) e indentassi il codice, non commetteresti tali errori ;)
    Ultima modifica di javascripter : 22-03-2012 alle ore 18.22.11

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

    Predefinito

    Inanzi tutto ringrazio gamecity e javascripter,
    adesso funziona!!
    Non mi ero accorto di questi errori, uso l'editor di Altervista ma apparte questo episodio e quando ero agli inizi del imparare il php sono riuscito a individuarli,
    comunque vi ringrazio senza la comunità di Altervista non sarei riuscito ad andare avanti.
    Ultima modifica di ilmondonliner : 23-03-2012 alle ore 19.50.05

Regole di scrittura

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