GDR CD 5.5 Abilità per gilda
GDR CD 5.5 Abilità per gilda postato il 03/02/2021 10:56:01 nel forum programmazione, open source e hosting e modificato da nobara il 03/02/2021 14:51:39
Buongiorno!
Gentilmente avrei bisogno di una mano con il codice relativo alle abilità per le gilde. Ho seguito alcune discussioni precedenti, ma mi sono purtroppo arenata quando si tratta di far vedere le abilità nella Scheda del personaggio.
Ho creato le varie tabelle nel db su altervista relative alle capacità (così ho deciso di battezzare le abilità legate ad una gilda), basandomi su quelle delle abilità di razza. Ho creato la pagina gestione_capacita per creare le varie skill e funziona. Purtroppo dopo aver creato la pagina scheda_capacita non riesco a capire perchè non mi stampi le varie skill di gilda come invece fa per quelle di razza.
Il sistema mi da questo errore quando provo ad andare sulla pagina corrispondente:
GDRCD MySQLi Error [File: scheda_cap.inc.php; Line: 260]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near " at line 1
Error Detail: SELECT COUNT(*) FROM cap WHERE id_gilda=-1 OR id_gilda=
Ho fatto varie prove cambiando i valori di id_gilda per venirne a capo, ma non sono riuscita a far funzionare il tutto.
Qualche anima pia può aiutarmi a capire cosa non va nel codice, per favore? Di seguito riporto il codice incriminato.
Grazie in anticipo!
<div class="pagina_scheda">
<?php /*HELP: E' possibile modificare la scheda agendo su scheda.css nel tema scelto, oppure sostituendo il codice che segue la voce "Scheda del personaggio"*/ ?>
<?php
/********* CARICAMENTO PERSONAGGIO ***********/
//Se non e' stato specificato il nome del pg
if (isset($_REQUEST['pg'])===FALSE){
echo '<div class="error">'.gdrcd_filter('out',$MESSAGE['error']['unknown_character_sheet']).'</div>';
} else {
$query = "SELECT personaggio.*, razza.sing_m, razza.sing_f, razza.id_razza, razza.bonus_car0, razza.bonus_car1, razza.bonus_car2, razza.bonus_car3 FROM personaggio LEFT JOIN razza ON personaggio.id_razza=razza.id_razza WHERE personaggio.nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'";
$result = gdrcd_query($query, 'result');
//Se non esiste il pg
if (gdrcd_query($result, 'num_rows')==0){echo '<div class="error">'.gdrcd_filter('out',$MESSAGE['error']['unknown_character_sheet']).'</div>';}
else {
$record = gdrcd_query($result, 'fetch');
gdrcd_query($result, 'free');
$bonus_oggetti = gdrcd_query("SELECT SUM(oggetto.bonus_car0) AS BO0, SUM(oggetto.bonus_car1) AS BO1, SUM(oggetto.bonus_car2) AS BO2, SUM(oggetto.bonus_car3) AS BO3 FROM oggetto JOIN clgpersonaggiooggetto ON oggetto.id_oggetto = clgpersonaggiooggetto.id_oggetto WHERE clgpersonaggiooggetto.nome = '".gdrcd_filter('in',$_REQUEST['pg'])."' AND clgpersonaggiooggetto.posizione > ".ZAINO."");
/*Controllo esilio, se esiliato non visualizzo la scheda*/
if($record['esilio']>strftime('%Y-%m-%d')){
echo '<div class="warning">'.gdrcd_filter('out',$record['nome']).' '.gdrcd_filter('out',$record['cognome']).' '.gdrcd_filter('out',$MESSAGE['warning']['character_exiled']).' '.gdrcd_format_date($record['esilio']).' ('.$record['motivo_esilio'].' - '.$record['autore_esilio'].')</div>';
if ($_SESSION['permessi']>=GAMEMASTER){?>
<div class="panels_box"><div class="form_gioco">
<form action="main.php?page=scheda_modifica&pg=<?php echo gdrcd_filter('url',$_REQUEST['pg']) ?>" method="post">
<input type="hidden" value="<?php echo strftime('%Y'); ?>" name="year" />
<input type="hidden" value="<?php echo strftime('%m'); ?>" name="month" />
<input type="hidden" value="<?php echo strftime('%d'); ?>" name="day" />
<input type="hidden" value="<?php gdrcd_filter('out',$MESSAGE['interface']['sheet']['modify_form']['unexile']); ?>" name="causale" />
<input type="hidden" value="exile" name="op" />
<div class="form_label">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['modify_form']['unexile']); ?>
</div>
<div class="form_submit">
<input type="submit"
value="<?php echo gdrcd_filter('out',$MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
</div></div>
<?php }
} else {
$px_totali_pg=$record['esperienza'];
//carico le sole capacità del pg
$result=gdrcd_query("SELECT id_cap, grado FROM clgpersonaggiocap WHERE nome='".gdrcd_filter('in',$_REQUEST['pg'])."'", 'result');
$px_spesi=0;
while ($row=gdrcd_query($result, 'fetch')){
/*Costo in px della singola capacità*/
$px_abi=$PARAMETERS['settings']['px_x_rank']*(($row['grado']*($row['grado']+1))/2);
/*Costo totale*/
$px_spesi+=$px_cap;
$ranks[$row['id_cap']]=$row['grado'];
}
gdrcd_query($result, 'free');
/*Incremento skill*/
if((gdrcd_filter('get',$_REQUEST['op'])=='addskill') && (($_SESSION['login']==gdrcd_filter('out',$_REQUEST['pg']))||($_SESSION['permessi']>=MODERATOR))){
$px_necessari=$PARAMETERS['settings']['px_x_rank']*($ranks[$_REQUEST['what']]+1);
if(($px_totali_pg-$px_spesi)>=$px_necessari){
$px_spesi+=$px_necessari;
if ($px_necessari==$PARAMETERS['settings']['px_x_rank']){
$query="INSERT INTO clgpersonaggiocap (id_cap, nome, grado) VALUES (".gdrcd_filter('num',$_REQUEST['what']).", '".gdrcd_filter('in',$_REQUEST['pg'])."', 1)";
$ranks[$_REQUEST['what']]=1;
#echo $query;
} else {
$ranks[$_REQUEST['what']]++;
$query="UPDATE clgpersonaggiocap SET grado = ".$ranks[$_REQUEST['what']]." WHERE id_cap = ".gdrcd_filter('num',$_REQUEST['what'])." AND nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'";
}//else
gdrcd_query($query);
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['warning']['modified']).'</div>';
}//if
}//if
/*Decremento skill*/
if((gdrcd_filter('get',$_REQUEST['op'])=='subskill') && ($_SESSION['permessi']>=MODERATOR)){
if ($ranks[$_REQUEST['what']]==1){
$query="DELETE FROM clgpersonaggiocap WHERE id_cap = ".$_REQUEST['what']." AND nome = '".gdrcd_filter('in',$_REQUEST['pg'])."' LIMIT 1";
$ranks[$_REQUEST['what']]=0;
} else {
$ranks[$_REQUEST['what']]--;
$query="UPDATE clgpersonaggiocap SET grado = ".$ranks[$_REQUEST['what']]." WHERE id_cap = ".$_REQUEST['what']." AND nome = '".gdrcd_filter('in',$_REQUEST['pg'])."'";
}//else
gdrcd_query($query);
echo '<div class="warning">'.gdrcd_filter('out',$MESSAGE['warning']['modified']).'</div>';
}//if
if (isset($_REQUEST['op'])===FALSE){
?>
<!--- SCHEDA DEL PERSONAGGIO --->
<div class="page_title">
<div style=" border: 1px solid #968e6a;
background-image: url(/themes/advanced/imgs/sfondino.png);
margin-bottom: 3px;
font-family: 'Alegreya Sans SC', sans-serif;
box-shadow: 1px 1px #968e6a;
text-align: center;
color: #968e6a;
text-shadow: 1px 1px #000;"><!-- Menu scheda -->
<?php include ('scheda/menu.inc.php'); ?>
</div>
</div>
<div class="page_body">
<?php
/** * Controllo e avviso che è ora di cambiare password
* @author Blancks
*/
if ($PARAMETERS['mode']['alert_password_change']=='ON')
{
$six_months = 15552000;
$ts_signup = strtotime($record['data_iscrizione']);
$ts_lastpass = (int)strtotime($record['ultimo_cambiopass']);
if ($ts_lastpass+$six_months < time() && $record['nome'] == $_SESSION['login'])
{
echo '<div class="warning">';
if ($ts_signup+$six_months < time())
echo $MESSAGE['warning']['changepass'];
else
echo $MESSAGE['warning']['changepass_signup'];
echo '</div>';
}
}
?>
<?php if($PARAMETERS['mode']['skillsystem']=='ON'){ //solo se è attiva la modalità skillsystem?>
<div class="elenco_abilita"><!-- Elenco capacità -->
<div class="titolo_box">
<?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['box_title']['skills']); ?>
</div>
<?php
//conteggio le capacità
$row=gdrcd_query("SELECT COUNT(*) FROM cap WHERE id_gilda=-1 OR id_gilda= ".$record['id_gilda']."");
$num=$row['COUNT(*)'];
//carico l'elenco delle capacità
$result=gdrcd_query("SELECT nome, car, id_cap, tipo, descrizione FROM cap WHERE id_gilda=-1 OR id_gilda= ".$record['id_gilda']." ORDER BY id_gilda DESC, nome", 'result');
$count=0;
$total=0;?>
<div class="form_info"><?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['avalaible_xp']).': <span id="skillpoints">'. ($px_totali_pg-$px_spesi) .'</span>'; ?><br>
<?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['info_skill_cost']);?></div>
</div>
<div class="div_colonne_cap_scheda">
<table class="colonne_cap_scheda" style="
text-align: justify; border-collapse: collapse;
"><tr>
<?php while($row=gdrcd_query($result, 'fetch')){
if ($count==0){echo '<td>';}?>
<tr style=" font-style: italic; font-family: Tahoma; background: #480b1594; text-shadow: 1px 1px #32090e; border: 1px solid #968e6a;">
<td style="padding: 2px;"><div class="cap_scheda_nome"><?php echo gdrcd_filter('out',$row['tipo']); ?>: <?php echo gdrcd_filter('out',$row['nome']); ?></div>
</td>
<td >
<div class="cap_scheda_car">
<?php echo '('.gdrcd_filter('out',$PARAMETERS['names']['stats']['car'.$row['car']]).')'; ?>
</div>
</td>
<td style="padding: 2px;"><div class="cap_scheda_tank"><span class="skill" data-skillcurvalue="<?php echo 0+gdrcd_filter('out',$ranks[$row['id_cap']]); ?>" data-skillid="<?php echo $row['id_cap'] ?>">Livello: <?php echo 0+gdrcd_filter('out',$ranks[$row['id_cap']]); ?></span></div></td>
<td style="padding: 2px;">
<div class="cap_scheda_sub">
<?php /*Stampo il form di incremento se il pg ha abbastanza px*/
if((((($ranks[$row['id_cap']]+1)*$PARAMETERS['settings']['px_x_rank'])<=($px_totali_pg-$px_spesi))&&
(gdrcd_filter('get',$_REQUEST['pg'])==$_SESSION['login'])&&
($ranks[$row['id_cap']]<$PARAMETERS['settings']['skills_cap']))||
($_SESSION['permessi']>=MODERATOR)){ ?>
[<a href="main.php?page=scheda_cap&pg=<?php echo gdrcd_filter('url',$_REQUEST['pg']) ?>&op=addskill&what=<?php echo $row['id_cap'] ?>">+</a>]
<?php if(($_SESSION['permessi']>=MODERATOR)&&
($ranks[$row['id_cap']]>0)){ ?>
[<a href="main.php?page=scheda_cap&pg=<?php echo gdrcd_filter('url',$_REQUEST['pg']) ?>&op=subskill&what=<?php echo $row['id_cap'] ?>">-</a>]
<?php } ?>
<?php } else { echo ' ';} ?>
</div>
</td>
</tr>
<tr><td class="casella_elemento" style="padding:5px;" colspan="4"><div><?php echo gdrcd_filter('out',$row['descrizione']); ?></div><br></td></tr>
<?php $count++; $total++;
if (($count>=ceil($num/2))||($total>=$num)){$count=0; echo '</td></tr>';}
}//while
gdrcd_query($result, 'free');
?>
</table>
</div>
</div><!-- Elenco capacità -->
<script type="text/javascript">
var gdrcdSkills = new gdrcdSkills(
'#skillpoints',
'.skill',
'.skill_incr',
'.skill_decr',
function(rank) {
return <?php echo gdrcd_filter('num', $PARAMETERS['settings']['px_x_rank']); ?> * rank;
}
);
<?php if ($_SESSION['permessi']>=MODERATOR) { ?>
gdrcdSkills.allowMasterDecrement(true);
<?php } ?>
var skillsInput = document.getElementById('skillsinput'),
skillsSaveButton = document.getElementById('saveskills'),
defaultSkillsValue = gdrcdSkills.exportSkillsValue();
gdrcdSkills.onSkillChange(function() {
var newSkillsValue = gdrcdSkills.exportSkillsValue();
skillsInput.value = newSkillsValue;
if (newSkillsValue !== defaultSkillsValue) {
skillsSaveButton.removeAttribute('disabled');
} else {
skillsSaveButton.setAttribute('disabled', '');
}
});
</script>
<?php } ?>
<!--- AREA ADMIN --->
<?php if($_SESSION['permessi']>=MODERATOR){ ?>
<div class="log_report">
<?php /*report*/ ?>
</div>
<?php } ?>
</div>
<?php
} else { ?>
<!-- Link a piè di pagina -->
<div class="link_back">
<a href="main.php?page=scheda_cap&pg=<?php echo gdrcd_filter('url',$_REQUEST['pg']); ?>"><?php echo gdrcd_filter('out',$MESSAGE['interface']['sheet']['link']['back']); ?></a>
</div>
<?php }//else
}//else
/********* CHIUSURA SCHEDA **********/
}//else
?>
<?php }//else?>
<!-- embed src="<?php //echo gdrcd_bbcoder(gdrcd_filter('out',$record['url_media'])); ?>" height="0" width="0"-->
<?php
//Impedisci XSS nella musica
$record['url_media']=gdrcd_filter('fullurl',$record['url_media']);
if ($PARAMETERS['mode']['allow_audio'] == 'ON' && !$_SESSION['blocca_media'] && !empty($record['url_media']))
{
?>
<object data="<?php echo $record['url_media']; ?>" type="<?php echo $PARAMETERS['settings']['audiotype']['.'.strtolower(end(explode('.', $record['url_media'])))]; ?>" autostart="true">
<embed src="<?php echo $record['url_media']; ?>" autostart="true" hidden="true" />
</object>
<!--[if IE9]>
<embed src="<?php echo $record['url_media']; ?>" autostart="true" hidden="true" />
<![endif]-->
<?php
}
?>
</div><!-- Pagina -->
Pagine → 1
04/02/2021 10:31:23
Error Detail: SELECT COUNT(*) FROM cap WHERE id_gilda=-1 OR id_gilda=
Ma id_gilda può essere impostato a -1? Non è un campo univoco?
04/02/2021 22:44:41
hunt ha scritto: [quote]nobara ha scritto: ...
potrebbe quindi esserti di aiuto un richiamo del genere:
<?php //cerco le gilde a cui è affiliato il personaggio
$guilds=gdrcd_query("SELECT ruolo.nome_ruolo, ruolo.gilda, ruolo.immagine, gilda.visibile, gilda.nome, gilda_id_gilda AS nome_gilda FROM clgpersonaggioruolo LEFT JOIN ruolo ON ruolo.id_ruolo = clgpersonaggioruolo.id_ruolo LEFT JOIN gilda ON ruolo.gilda = gilda.id_gilda WHERE clgpersonaggioruolo.personaggio = '".gdrcd_filter('in',$record['nome'])."'", 'result');
while ($row_guilds = gdrcd_query($guilds, 'fetch')){
//conteggio le capacità
$row=gdrcd_query("SELECT COUNT(*) FROM cap WHERE id_gilda=-1 OR id_gilda= ".$row_guilds['id_gilda']."");
$num=$row['COUNT(*)'];
}
prova a vedere se così risolvi la situazione[/quote]
Prima di tutto grazie per la risposta! E' da una settimana che ci sbatto la testa, ma anche col tuo aiuto non sono riuscita a trovare una soluzione y.y
Pur integrando il codice che mi hai dato, con qualche piccola modifica, il codice non vuole collaborare e mi ridà questo errore:
GDRCD MySQLi Error [File: scheda_cap.inc.php; Line: 160]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Error Detail: SELECT COUNT(*) FROM cap WHERE id_gilda=-1 OR id_gilda=
Come hai detto tu, l'inghippo dovrebbe stare in quel pezzetto di codice per richiamare le gilde. Ho fatto alcune prove, ma sono state infruttuose, purtroppo.
nobara ha replicato, in sostanza, la tabella delle abilità sostituendo il valore id_razza che può essere -1 quando non è assegnato a nessuna razza; id_razza=numero, quando si ha una razza a cui è dedicato.
Deve aver fatto la stessa cosa ma con le gilde, mi pare di aver compreso. Quindi in sostanza non è un campo univoco
Esatto, è esattamente quello che ho fatto, visto che in questo caso le capacità devono essere legate alle gilde e non alla razza del personaggio. Nei post sul forum che ho consultato si parlava appunto di replicare la struttura delle tabelle abilità e dei file collegati.
Qualche suggerimento su come poter far funzionare il codice?
05/02/2021 09:07:04
hunt ha scritto: Ti direi, a questo punto, di togliere le condizioni per il COUNT delle abilità, a meno che tu non voglia aver il numero di abilità disponibile.
Quello, provvisoriamente, toglierebbe l'errore; almeno prova a vedere se per caso compromette la funzionalità della pagina, se non dovesse compromettere la funzionalità della pagina, prova a lasciarlo così in attesa di qualcuno con una soluzione. Mi spiace non essere stata utile 😟
Niente, ho fatto varie prove e ancora non vuole funzionare y.y
Grazie comunque, sei stata molto gentile <3
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
World of Warship ↗
Imperion ↗
CRSED: F.O.A.D. ↗
Storie di Agarthi ↗