[RISOLTO] (GDRCD 5.2) Peso Oggetti
[RISOLTO] (GDRCD 5.2) Peso Oggetti postato il 10/02/2022 13:18:06 nel forum programmazione, open source e hosting e modificato da staff shadowland il 12/02/2022 12:34:59
Salve a tutti, ho cercato in forum ma non ho trovato nulla che richiamasse a qualcosa di simile.
Il mio intento è quello di sommare il peso di ogni oggetto Equipaggiato e presente nello zaino così da avere un unico valore che indichi quanto peso il personaggio si porta dietro.
Ho inserito un campo specifico per il Peso degli oggetti all'interno della tabella oggetto e clgpersonaggiooggetto (proprio come quelli di cariche, difesa ecc.)
Non ho nessun problema ad ottenere il valore in scheda singolarmente, fino a qui tutto funziona, però mi sono bloccata nel richiamare il peso di ogni singolo oggetto equipaggiato ed in zaino e far sì che questi valori singoli si sommino con il risultato di un totale.
Suggerimenti su come fare o qualche esempio in riferimento? Ve ne sarei grata!
Grazie per l'attenzione :)
EDIT***
Condivido qui la soluzione nel caso in cui potesse essere utile ad altri. Ringrazio molto anneth per l'aiuto =)
1° STEP
Inserire in DB in oggetto il campo peso con i seguenti parametri:
tipo: INT
lunghezza valori: 8 (ma voi mettete quelli che pensate possano servirvi)
Come definito: 0
2° STEP
Inserite nella pagina gestione_mercato (o comunque quella che gestisce gli oggetti in genere) tutti i richiami inerenti il nuovo campo creato, ovvero 'peso'. Vi consiglio di prendere in esempio uno dei campi già presenti in oggetto (protezione, attacco, ecc.)
Nel mio caso li ho inseriti in questo modo (non posso dare indicazioni di stringa poichè le mie pagine sono modificate e non corrispondono a quelle originali)
La prima va in // se è stato richiesto di modificare un oggetto //
peso=".gdrcd_filter('num',$_POST['peso_oggetto']).",
la seconda in // se è stato richiesto di modificare un oggetto //
peso
e sul termine della stessa riga a seguito degli altri campi
".gdrcd_filter('num',$_POST['peso_oggetto'])."
(occhio che se li inserite nel mezzo va inserita una virgola alla fine. Es: peso, / ".gdrcd_filter('num',$_POST['peso_oggetto']).",)
Nella stessa pagina, dove sono presenti gli altri campi di compilazione, va inserito:
<div class='form_label'>
Peso
</div>
<div class='form_field'>
<input type="text" name="peso_oggetto" value="<?php echo (int)$loaded_item['peso']; ?>" />
</div>
3° STEP
Andate nella pagina scheda_equip che richiama appunto gli oggetti equipaggiati ed inserite il campo 'peso' dove richiesto (seguite l'esempio fatto in precedenza, vi basta seguire la linea di cariche, protezione, ecc.)
Fatto questo, inserite questa stringa dove volete sia visibile il totale del peso degli oggetti. Ho apportato una modifica al richiamo del Pg così che possa essere visualizzato anche dallo Staff in caso di apertura scheda.
- Totale peso tutti oggetti -
<?php
$result = gdrcd_query("SELECT oggetto.id_oggetto, oggetto.nome, oggetto.peso, clgpersonaggiooggetto.numero FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".gdrcd_filter('in',$_REQUEST['pg'])."' AND clgpersonaggiooggetto.posizione > 'ZAINO' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0) ORDER BY oggetto.nome", 'result');
$tot=0;
while($row=gdrcd_query($result, 'fetch')){
$tot+=$row['peso']*$row['numero'];
}
echo $tot;
gdrcd_query($result, 'free');
?>
Se vi interessa avere un elenco più dettagliato, dovete aggiungere quanto segue:
- Oggetti e peso corrispondente -
<?php
$result = gdrcd_query("SELECT oggetto.id_oggetto, oggetto.nome, oggetto.peso, clgpersonaggiooggetto.numero FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".gdrcd_filter('in',$_REQUEST['pg'])."' AND clgpersonaggiooggetto.posizione > 'ZAINO' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0) ORDER BY oggetto.nome", 'result'); ?>
<?php while($row=gdrcd_query($result, 'fetch')){ ?>
<option value="<?php echo $row['id_oggetto'].'-'.$row['peso'].'-' .$row['numero']. '-' .gdrcd_filter('out',$row['nome']); ?>">
<?php echo $row['nome'] .' / Peso singolo oggetto: '. $row['peso'] .' / Numero oggetti: '. $row['numero'] .' / Peso Tot oggetti: '. $row['peso']*$row['numero']; ?>
</option>
<?php }//while
gdrcd_query($result, 'free');
?>
poi modificate secondo le vostre esigenze, questo è tutto! Spero di non aver tralasciato nulla :D
Pagine → 1 2
11/02/2022 09:33:43
Ciao!
allor, non so bene come sia messo il db della 5.2, e se gli oggetti dello zaino ed inventario si trovino sulla stessa tabella (penso? cambia solo la posizione, giusto?).
Quel che mi verrebbe di suggerirti, se devi fare una somma, è una select di questo tipo, da cambiare con i dati poi che hai effettivamente sul tuo db.
SELECT SUM(peso) FROM tabella WHERE personaggio='$personaggio'
Dove tabella è la tabella su cui sono messi tutti gli oggetti equipaggiati e $personaggio è la variabile da poi sostituire in base a come passi nel codice quel valore. Se metti il risultato di quella query in una variabile, dovresti avere la somma di tutti gli oggetti equipaggiati.
Vorrei essere più precisa, ma non conosco la struttura della tabella.
11/02/2022 10:04:42 e modificato da staff shadowland il 11/02/2022 10:04:59
Ciao! Grazie per il suggerimento! Ieri ci ho lavorato un pochino e sono riuscita ad ottenere la restituzione di: Nome oggetto e Peso (vengono visualizzati solo gli oggetti con l'indicazione del peso che non sia 0) per gli oggetti equipaggiati/indossati. Non mi resta che provare il suggerimento per la loro somma =)
// ---------------Conteggio oggetti e peso.
<?php
$result = gdrcd_query("SELECT oggetto.id_oggetto, oggetto.nome, oggetto.peso, clgpersonaggiooggetto.numero FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0) ORDER BY oggetto.nome", 'result'); ?>
<?php while($row=gdrcd_query($result, 'fetch')){ ?>
<option value="<?php echo $row['id_oggetto'].'-'.$row['peso'].'-'.gdrcd_filter('out',$row['nome']); ?>">
<?php echo $row['nome'] .' / '. $row['peso']*$row['numero']; ?>
</option>
<?php }//while
gdrcd_query($result, 'free');
?>
Per quanto riguarda le tabelle, ho apportato una correzione, togliendo da clgpersonaggio l'indicazione del peso che avevo aggiunto poiché andava in conflitto con la tabella oggetto.
Fondamentalmente la struttura della tabella oggetto di Gdrcd 5.2 non dovrebbe essere così diversa da quella della versione attuale, ho comunque apportato delle modifiche al codice ma sostanzialmente i campi principali sono:
Oggetto: id_oggetto, nome, cariche, descrizione, commento, posizione, difesa, ecc.
clgpersonaggiooggetto: id_oggetto, numero, nome, cariche ...
11/02/2022 10:08:44
Capito!
beh, se la tabella è semplicemente quella, ti basta fare la SUM come sopra, sistemando i vari riferimenti ed al limite i controlli sia sul personaggio che sullo slot in cui si trova (se equipaggiato o in inventario).
11/02/2022 11:39:12
Niente, credo sia una modifica fuori dalla mia portata, non riesco a scrivere la parte di codice in maniera corretta ç__ç
11/02/2022 11:50:32
prendendo la query che mi hai scritto su, ho provato a far questo:
$peso = gdrcd_query("SELECT SUM(oggetto.peso) as peso FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0)", 'result');
se fai un
echo $peso['peso']
dovresti vedere il risultato
11/02/2022 12:53:02
mi restituisce
Fatal error: Cannot use object of type mysqli_result as array in /membri/pm/pages/scheda_og.inc.php on line 693
11/02/2022 13:59:51
staff shadowland ha scritto: mi restituisce
Fatal error: Cannot use object of type mysqli_result as array in /membri/pm/pages/scheda_og.inc.php on line 693
ok, credo sia il metodo di esecuzione della query. Essendo un solo risultato, 'result' nn va bene. prova con 'query'
$peso = gdrcd_query("SELECT SUM(oggetto.peso) as peso FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0)", 'query');
o anche solo
$peso = gdrcd_query("SELECT SUM(oggetto.peso) as peso FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0)");
11/02/2022 15:10:00
Ragionandoci sono arrivata ad aver QUASI risolto.
"Quasi" perchè ho solo un piccolo intoppo con il ricavare il totale dal peso derivante da oggetti dello stesso tipo di cui se ne possiede più di 1
Se potete darmi una manina per l'ultimo step, direi che la tabella per il peso oggetti può ritenersi completa.
Allego qui sotto lo schemino ripulito con tanto di riferimenti qualora potesse essere utile ad altri.
- Oggetti e peso corrispondente -
<?php
$result = gdrcd_query("SELECT oggetto.id_oggetto, oggetto.nome, oggetto.peso, clgpersonaggiooggetto.numero FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0) ORDER BY oggetto.nome", 'result'); ?>
<?php while($row=gdrcd_query($result, 'fetch')){ ?>
<option value="<?php echo $row['id_oggetto'].'-'.$row['peso'].'-' .$row['numero']. '-' .gdrcd_filter('out',$row['nome']); ?>">
<?php echo $row['nome'] .' / Peso singolo oggetto: '. $row['peso'] .' / Numero oggetti: '. $row['numero'] .' / Peso Tot oggetti: '. $row['peso']*$row['numero']; ?>
</option>
<?php }//while
gdrcd_query($result, 'free');
?>
- Totale peso singoli oggetti-
<?php
$totale = gdrcd_query("SELECT SUM(oggetto.peso) AS peso, clgpersonaggiooggetto.numero, oggetto.id_oggetto, oggetto.nome FROM clgpersonaggiooggetto JOIN oggetto ON clgpersonaggiooggetto.id_oggetto = oggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".$_SESSION['login']."' AND (oggetto.peso IS NOT NULL AND oggetto.peso>0) ORDER BY oggetto.nome", 'result'); ?>
<?php while($row=gdrcd_query($totale, 'fetch')){ ?>
<option value="<?php echo $row['id_oggetto'].'-'.$row['peso'].'-' .$row['numero']. '-' .gdrcd_filter('out',$row['nome']); ?>">
<?php echo $row['peso']; ?>
</option>
<?php }//while
gdrcd_query($result, 'free');
?>
11/02/2022 16:29:58
Ok, giusto per comprendere il quesito: devi effettuare la somma di tutti gli oggetti equipaggiati, tenendo presente anche la quantità. Devi fare il totale, corretto?
11/02/2022 17:34:22
anneth ha scritto: Ok, giusto per comprendere il quesito: devi effettuare la somma di tutti gli oggetti equipaggiati, tenendo presente anche la quantità. Devi fare il totale, corretto?
Somma del peso di tutti gli oggetti equipaggiati tenendo anche presente la quantità. Esatto, il totale.
Es: 2 ampolle / peso 2 (l'una) -> Tot. Peso 4
Es: 3 baule / peso 4 (l'uno) -> Tot. Peso 12
Peso complessivo -> 16
Fino ad ora sono riuscita ad ottenere quanto su descritto in Es. ma non sono riuscita ad ottenere il peso complessivo >.<
Discussione seguita da
Pagine → 1 2
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
AlterEgo ↗
Fallen Gods ↗
World of the Sea Battle ↗
World of Warship ↗
Sea of Conquest ↗
Tibia ↗
Cafuné ↗
Neverness to Everness ↗
War Thunder ↗