GDRCD 5.6 - Errore default value
GDRCD 5.6 - Errore default value postato il 04/09/2023 09:15:47 nel forum programmazione, open source e hosting e modificato da mag18 il 19/09/2023 12:31:20
Ciaoooo a tutti, mi sono appena iscritta e perdonatemi se sono stata generica nel titolo, ma non sono una programmatrice e dopo una lunga ricerca del problema, mi sono resa conto che non ne ho idea di come risolverlo. Dunque, eccomi qua! Se non dico una stupidata, sospetto che possa essere un problema relativo al campo ultimo_oggetto nel mio database, ma non ne sono sicura. Qualcuno potrebbe, gentilmente aitarmi, per favore? Ve ne sarei davvero infinitamente grata.
Io sto usando l'ultima versione del pacchetto gdrcd 5.6, ho installato alcuni pacchetti per avere delle funzioni aggiuntive, ma a parte qualche piccolo errore che dovrei correggere... :( La land sembra stabile e funzionante, se non fosse che in questi giorni mi sono accorta di questo problema, relativo all'invio del modulo di registrazione del nuovo pg.

Se può essere di maggiore aiuto posto anche i codici delle pagine che credo mi diano l'errore.
1) Nella pagina iscrizione.inc.php:
<div class="pagina_iscrizione">
<div class="page_title">
<h2>
<?php echo gdrcd_filter('out', $MESSAGE['register']['page_name']); ?>
</h2>
</div>
<div class="page_body">
<?php /**** Fase 0 ****/
switch (gdrcd_filter('get', $_POST['fase'])) {
case false: ?>
<div class="panels_box">
<!-- condizioni d'uso -->
<div class="disclaimer_iscrizione">
<?php echo gdrcd_filter('out', $MESSAGE['register']['disclaimer']); ?>
</div>
<div class="disclaimer_iscrizione">
<?php echo gdrcd_filter('out', $MESSAGE['register']['rules_read']); ?>
</div>
<!-- Accetto le condizioni -->
<div class="form_gioco">
<form action="<?php echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING']; ?>"
method="post">
<div class="form_submit">
<input type="hidden" name="fase" value="1"/>
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['accept']); ?>"/>
</div>
</form>
</div>
<!-- Non accetto le condizioni -->
<div class="form_gioco">
<form action="index.inc.php" method="post">
<div class="form_submit">
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['refuse']); ?>"/>
</div>
</form>
</div>
</div>
<?php break;
case 1: ?>
<div class="panels_box">
<div class="form_gioco">
<form action="<?php echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING']; ?>"
method="post">
<!-- EMail -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['email']); ?>
</div>
<div class="form_field">
<input name="email" value="<?php echo gdrcd_filter('email', $_POST['email']); ?>"/>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['email_info']); ?>
</div>
<!-- Nome PG -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['name']); ?>
</div>
<div class="form_field">
<input name="nome" value="<?php echo gdrcd_filter('out', $_POST['nome']); ?>"/>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['name_info']); ?>
</div>
<!-- Cognome PG -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['lastname']); ?>
</div>
<div class="form_field">
<input name="cognome" value="<?php echo gdrcd_filter('out', $_POST['cognome']); ?>"/>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['name_info']); ?>
</div>
<!-- Genere -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['gender']); ?>
</div>
<div class="form_field">
<select name="genere">
<option value="m" <?php if (gdrcd_filter('get', $_POST['genere']) == 'm') {
echo 'SELECTED';
} ?> >
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['gender_m']); ?>
</option>
<option value="f" <?php if (gdrcd_filter('get', $_POST['genere']) == 'f') {
echo 'SELECTED';
} ?> >
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['gender_f']); ?>
</option>
</select>
</div>
<!-- Razza -->
<div class="form_label">
<?php echo gdrcd_filter('out', $PARAMETERS['names']['race']['sing'] . ' ' . $MESSAGE['register']['fields']['race']); ?>
</div>
<?php $result = gdrcd_query("SELECT id_razza, nome_razza FROM razza WHERE iscrizione=1 ORDER BY nome_razza", 'result'); ?>
<div class="form_field">
<select name="razza">
<?php while ($row = gdrcd_query($result, 'fetch')) { ?>
<option value="<?php echo $row['id_razza']; ?>" <?php if (gdrcd_filter('get', $_POST['razza']) == $row['id_razza']) {
echo 'SELECTED';
} ?>>
<?php echo gdrcd_filter('out', $row['nome_razza']); ?>
</option>
<?php } ?>
</select>
</div>
<?php if ($PARAMETERS['mode']['racialinfo'] == 'ON') { ?>
<div class="form_info">
<a href="index.php?page=user_razze" target="_new">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['race_info']); ?>
</a>
</div>
<?php } ?>
<!-- Caratteristiche -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['stats']); ?>
</div>
<div class="form_field">
<table>
<tr>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car0']); ?>
<br/>
<select name="car0">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car0']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car1']); ?>
<br/>
<select name="car1">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car1']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car2']); ?>
<br/>
<select name="car2">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car2']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car3']); ?>
<br/>
<select name="car3">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car3']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car4']); ?>
<br/>
<select name="car4">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car4']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car5']); ?>
<br/>
<select name="car5">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car5']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<tr>
</table>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['stats_info'] . ' ' . $PARAMETERS['settings']['cars_sum']); ?>
</div>
<!-- Invio -->
<div class="form_submit">
<input type="hidden" name="fase" value="2"/>
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['next']); ?>"/>
</div>
</form>
</div>
<div class="form_gioco">
<form action="index.php" method="post">
<div class="form_submit">
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['abort']); ?>"/>
</div>
</form>
</div>
</div>
<?php break;
case 2:
$ok = true; ?>
<div class="panels_box">
<!-- Qui continua il codice -->
<?php break;
case 3: ?>
<div class="panels_box">
<!-- Ulteriori controlli, se necessari, prima di finalizzare l'iscrizione -->
<?php
// Esegui ulteriori controlli, se necessario
// Se tutto è a posto, procedi con l'iscrizione
if ($ok) {
// Crea il personaggio
$query = "INSERT INTO personaggio (
nome, cognome, razza, email, sesso, livello, ultima_modifica,
data_iscrizione, razza_corte, razza_lunga, razza_titolo, privacy
) VALUES (
'" . gdrcd_db_quote($_POST['nome']) . "',
'" . gdrcd_db_quote($_POST['cognome']) . "',
" . gdrcd_db_quote($_POST['razza']) . ",
'" . gdrcd_db_quote($_POST['email']) . "',
'" . gdrcd_db_quote($_POST['genere']) . "',
1,
NOW(),
NOW(),
'',
'',
'',
0
)";
gdrcd_query($query);
// Ottieni l'ID appena inserito
$pg_id = gdrcd_db_last_insert_id();
// Inserisci le caratteristiche del personaggio
$stats_query = "INSERT INTO personaggio_stat (id_personaggio, car0, car1, car2, car3, car4, car5) VALUES (
" . gdrcd_db_quote($pg_id) . ",
" . gdrcd_db_quote($_POST['car0']) . ",
" . gdrcd_db_quote($_POST['car1']) . ",
" . gdrcd_db_quote($_POST['car2']) . ",
" . gdrcd_db_quote($_POST['car3']) . ",
" . gdrcd_db_quote($_POST['car4']) . ",
" . gdrcd_db_quote($_POST['car5']) . "
)";
gdrcd_query($stats_query);
// Mostra il messaggio di successo
echo '<div class="success">' . gdrcd_filter('out', $MESSAGE['register']['success']) . '</div>';
} else {
// Se ci sono errori, torna alla fase precedente
echo '<div class="error">' . gdrcd_filter('out', $MESSAGE['register']['error']['generic']) . '</div>';
?>
<div class="form_gioco">
<form action="<?php echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING']; ?>" method="post">
<div class="form_submit">
<input type="hidden" name="fase" value="2"/>
<input type="hidden" name="email" value="<?php echo gdrcd_filter('out', $_POST['email']) ?>"/>
<input type="hidden" name="nome" value="<?php echo gdrcd_filter('out', $_POST['nome']) ?>"/>
<input type="hidden" name="cognome" value="<?php echo gdrcd_filter('out', $_POST['cognome']) ?>"/>
<input type="hidden" name="genere" value="<?php echo gdrcd_filter('out', $_POST['genere']) ?>"/>
<input type="hidden" name="razza" value="<?php echo gdrcd_filter('num', $_POST['razza']) ?>"/>
<input type="hidden" name="car0" value="<?php echo gdrcd_filter('num', $_POST['car0']) ?>"/>
<input type="hidden" name="car1" value="<?php echo gdrcd_filter('num', $_POST['car1']) ?>"/>
<input type="hidden" name="car2" value="<?php echo gdrcd_filter('num', $_POST['car2']) ?>"/>
<input type="hidden" name="car3" value="<?php echo gdrcd_filter('num', $_POST['car3']) ?>"/>
<input type="hidden" name="car4" value="<?php echo gdrcd_filter('num', $_POST['car4']) ?>"/>
<input type="hidden" name="car5" value="<?php echo gdrcd_filter('num', $_POST['car5']) ?>"/>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['back']); ?>"/>
</div>
</form>
</div>
<?php
// ... (previous code)
$email = strtolower(gdrcd_filter_email($_POST['email']));
$result = gdrcd_query("SELECT email FROM personaggio", 'result');
foreach ($result as $pg) {
if (gdrcd_password_check($email, $pg['email'])) {
$ok = false;
echo '<div class="error">' . gdrcd_filter('out', $MESSAGE['register']['error']['email_taken']) . '</div>';
break;
}
}
if (empty($email) || (strpos($email, '@') === false) || (strpos($email, '.') === false)) {
$ok = false;
echo '<div class="error">' . gdrcd_filter('out', $MESSAGE['register']['error']['email_needed']) . '</div>';
}
// ... (rest of your code)
?>
2) Functions.inc.php:
<?php
/**
* Funzioni di core di gdrcd
* Il file contiene una revisione del core originario introdotto in GDRCD5
* @version 5.4
* @author Breaker
*/
/**
* Funzionalità di dialogo col database
* Set di funzioni da core che implementano il dialogo gestito col db
*/
/**
* Connettore al database MySql
*/
function gdrcd_connect()
{
static $db_link = false;
#$db = mysql_connect($db_host, $db_user, $db_pass)or die(gdrcd_mysql_error());
#mysql_select_db($db_name)or die(gdrcd_mysql_error($db_error));
$db_link = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
mysqli_set_charset($db_link, "utf8");
if (mysqli_connect_errno()) {
gdrcd_mysql_error($db_error);
}
}
return $db_link;
}
/**
* Chiusura della connessione col db MySql
* @param resource $db : una connessione mysqli
*/
function gdrcd_close_connection($db)
{
mysqli_close($db);
}
/**
* Gestore delle query, offre una basilare astrazione del database per la maggior parte delle funzionalità del database più usate.
* @param string|mysqli_result $sql : il codice SQL da inviare al database o una risorsa risultato di MySqli
* @param string $mode : La modalità con cui eseguire la query. Default "query"
* Modalità accettate:
* query: esegue la query e ritorna come risultato la prima riga del resultset
* result: esegue la query e ritorna la risorsa MySql associata al risultato
* num_rows: accetta come parametro una risorsa mysqli e ritorna il numero di righe nel resultset
* fetch: accetta come parametro una risorsa mysqli e ritorna il successivo risultato dal resultset come array
* object: uguale a fetch, eccetto che ritorna un oggetto al posto di un array
* free: libera la memoria occupata dalla risorsa mysqli passata in $sql
* last_id: ritorna l'id del record generato dall'ultima query, se non era una INSERT o UPDATE ritorna 0. In questo caso $sql non viene considerato
* affected: ritorna il numero di record toccati dall'ultima query (INSERT, UPDATE, DELETE o SELECT). In questo caso $sql non viene considerato
* @return un booleano in caso di esecuzione di query non SELECT e modalità 'query'. Altrimenti ritorna come specificato nella descrizione di $mode
*/
function gdrcd_query($sql, $mode = 'query', $throwOnError = false)
{
$db_link = gdrcd_connect(); // Presumo che gdrcd_connect sia una funzione che gestisce la connessione al database.
switch (strtolower(trim($mode))) {
case 'query':
$result = mysqli_query($db_link, $sql);
if ($result === false) {
if ($throwOnError) {
throw new Exception("Query DB Fallita: " . $sql . "\n\n" . mysqli_error($db_link));
} else {
return gdrcd_mysql_error($sql); // Utilizza gdrcd_mysql_error per gestire gli errori.
}
}
return $result;
case 'num_rows':
$result = gdrcd_query($sql, 'query'); // Esegue una query per ottenere il risultato.
return (int)mysqli_num_rows($result);
case 'fetch':
$result = gdrcd_query($sql, 'query'); // Esegue una query per ottenere il risultato.
return mysqli_fetch_array($result, MYSQLI_BOTH);
case 'assoc':
$result = gdrcd_query($sql, 'query'); // Esegue una query per ottenere il risultato.
return mysqli_fetch_array($result, MYSQLI_ASSOC);
case 'object':
$result = gdrcd_query($sql, 'query'); // Esegue una query per ottenere il risultato.
return mysqli_fetch_object($result);
case 'free':
return gdrcd_query($sql, 'query'); // Esegue una query per ottenere il risultato.
break;
case 'last_id':
return mysqli_insert_id($db_link);
case 'affected':
return (int)mysqli_affected_rows($db_link);
}
}
/*
* Prepared Statements
* @param string $sql: il codice SQL da inviare al database
* @param array $binds: array dei parametri associati alla query
*
* E' obbligatorio specificare nell'indice zero dell'array binds i tipi delle variabili che si stanno immettendo nella query
* Tali tipi sono i seguenti:
* i corrispondente ai valori integer
* d corrispondente ai valori float/double
* s corrispondente alle stringhe
* b corrispondende a valori di tipo blob
*
* @return mysqli_result
*/
function gdrcd_stmt($sql, $binds = array())
{
$db_link = gdrcd_connect();
if ($stmt = mysqli_prepare($db_link, $sql)) {
if (!empty($binds)) {
#> E' necessario referenziare ogni parametro da passare alla query
#> MySqli è suscettibile in proposito.
$ref = array();
foreach ($binds as $k => $v) {
if ($k > 0) {
$ref[$k] = &$binds[$k];
} else {
$ref[$k] = $v;
}
}
array_unshift($ref, $stmt);
call_user_func_array('mysqli_stmt_bind_param', $ref);
}
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$stmtError = mysqli_stmt_error($stmt);
if (!empty($stmtError))
die(gdrcd_mysql_error($stmtError));
mysqli_stmt_close($stmt);
return $result;
} else {
die(gdrcd_mysql_error('Failed when creating the statement.'));
}
}
/**
* Funzione di recupero delle colonne e della loro dichiarazione della tabella specificata.
* Si usa per la verifica dell'aggiornamento db da vecchie versioni di gdrcd5
* @param string $table : il nome della tabella da controllare
* @return un oggetto contenente la descrizione della tabella negli attributi
*/
$i = 0;
$uscita = [];
// Itera attraverso le colonne della tabella
while ($field = gdrcd_query($describe, 'object')) {
$defInfo = mysqli_fetch_field_direct($result, $i);
// Verifica se la colonna è auto-increment
$field->auto_increment = (strpos($field->Extra, 'auto_increment') !== false ? 1 : 0);
$field->definition = $field->Type;
// Aggiunge NOT NULL se la colonna non può essere NULL
if ($field->Null == 'NO' && $field->Key != 'PRI') {
$field->definition .= ' NOT NULL';
}
// Aggiunge il valore di default se presente
if ($field->Default !== null) {
$field->definition .= " DEFAULT '" . mysqli_real_escape_string(gdrcd_connect(), $field->Default) . "'";
}
// Aggiunge AUTO_INCREMENT se la colonna è auto-increment
if ($field->auto_increment) {
$field->definition .= ' AUTO_INCREMENT';
}
// Gestisce i tipi di chiavi (PRIMARY KEY, UNIQUE KEY, KEY)
switch ($field->Key) {
case 'PRI':
$field->definition .= ' PRIMARY KEY';
break;
case 'UNI':
$field->definition .= ' UNIQUE KEY';
break;
case 'MUL':
$field->definition .= ' KEY';
break;
}
$field->len = $defInfo->length;
$output[$field->Field] = $field;
++$i;
unset($defInfo);
}
// Libera il risultato della query delle colonne
gdrcd_query($describe, 'free');
return $output;
}
// Itera attraverso le colonne della tabella
while ($field = gdrcd_query($describe, 'object')) {
$defInfo = mysqli_fetch_field_direct($result, $i);
// Verifica se la colonna è auto-increment
$field->auto_increment = (strpos($field->Extra, 'auto_increment') !== false ? 1 : 0);
$field->definition = $field->Type;
// Aggiunge NOT NULL se la colonna non può essere NULL
if ($field->Null == 'NO' && $field->Key != 'PRI') {
$field->definition .= ' NOT NULL';
}
// Aggiunge il valore di default se presente
if ($field->Default !== null) {
$field->definition .= " DEFAULT '" . mysqli_real_escape_string(gdrcd_connect(), $field->Default) . "'";
}
// Aggiunge AUTO_INCREMENT se la colonna è auto-increment
if ($field->auto_increment) {
$field->definition .= ' AUTO_INCREMENT';
}
// Gestisce i tipi di chiavi (PRIMARY KEY, UNIQUE KEY, KEY)
switch ($field->Key) {
case 'PRI':
$field->definition .= ' PRIMARY KEY';
break;
case 'UNI':
$field->definition .= ' UNIQUE KEY';
break;
case 'MUL':
$field->definition .= ' KEY';
break;
}
$field->len = $defInfo->length;
$output[$field->Field] = $field;
++$i;
unset($defInfo);
}
// Libera il risultato della query delle colonne
gdrcd_query($describe, 'free');
return $output;
}
/**
* Gestione degli errori tornati dalle query
* @param string $details : una descrizione dell'errore avvenuto
* @return una stringa HTML che descrive l'errore riscontrato
*/
function gdrcd_mysql_error($details = false)
{
$backtrace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 50);
foreach($backtrace as $v) {
if($v['function'] == 'gdrcd_query') {
$base = $v;
}
$history .= '<strong>FILE: </strong>: ' . $v['file'] . ' - ';
$history .= '<strong>LINE: </strong>: ' . $v['line'] . '</br />';
}
$error_msg = '<div class="error mysql">';
$error_msg .= '<strong>GDRCD MySQLi Error</strong>:</br>';
if ($details !== false) {
$error_msg .= '<strong>QUERY: </strong>: ' . $details . '</br>';
}
$error_msg .= '<strong>ERROR [' . mysqli_errno(gdrcd_connect()) . ']</strong>: ' . mysqli_error(gdrcd_connect()) .'<br />';
$error_msg .= '<strong>FILE: </strong>: ' . $base['file'] . ' - ';
$error_msg .= '<strong>LINE: </strong>: ' . $base['line'] . '<br />';
$error_msg .= '<details>';
$error_msg .= '<summary>Dettagli</summary>';
$error_msg .= $history;
$error_msg .= '</details>';
$error_msg .= '</div>';
return $error_msg;
}
/**
* Funzionalità di escape
* Set di funzioni escape per filtrare i possibili contenuti introdotti da un utente ;-)
*/
/**
* Funzione di hashing delle password.
* @param string $str : la password o stringa di cui calcolare l'hash
* @return l'hash calcolato a partire da $str con l'algoritmo specificato nella configurazione
*/
function gdrcd_encript($str)
{
require_once(dirname(__FILE__) . '/PasswordHash.php');
$hasher = new PasswordHash(8, true);
return $hasher->HashPassword($str);
}
function gdrcd_password_check($pass, $stored)
{
require_once(dirname(__FILE__) . '/PasswordHash.php');
$hasher = new PasswordHash(8, true);
return $hasher->CheckPassword($pass, $stored);
}
/**
* TODO Controllo della validità della password
* Funzione work in progress, da implementare.
* Deve essere disabilitabile da config
* Funzionalità da ON/OFF:
* - numero di caratteri minimo scelto dall'utente
* - non accettazione di password contenenti lettere accentate
* - non accettazione di password troppo semplici (ad esempio uguali al nickname del personaggio)
* @param string $str : la password da controllare
* @return true se la password è valida, false altrimenti
*/
function gdrcd_check_pass($str)
{
return true;
}
/**
* Funzione di filtraggio di codici malevoli negli input utente
* @param string $what : modalità da utilizzare per controllare la stringa. Sono opzioni valide: in o get, num, out, addslashes, email, includes
* @param string $str : la stringa da controllare
* @return una versione filtrata di $str
*/
function gdrcd_filter($what, $str)
{
switch (strtolower($what)) {
case 'in':
case 'get':
$str = addslashes(str_replace('\\', '', $str));
break;
case 'num':
$str = (int)$str;
break;
case 'out':
$str = gdrcd_html_filter(htmlentities($str, ENT_QUOTES, "UTF-8"));
break;
case 'addslashes':
$str = addslashes($str);
break;
case 'email':
$str = (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$#is", $str)) ? $str : false;
break;
case 'includes':
$str = (preg_match("#[^:]#is")) ? htmlentities($str, ENT_QUOTES) : false;
break;
case 'url':
$str = urlencode($str);
break;
case 'fullurl':
$str = filter_var(str_replace(' ', '%20', $str), FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED);
break;
}
return $str;
}
/**
* Funzioni di alias per gdrcd_filter()
*/
function gdrcd_filter_in($str)
{
return gdrcd_filter('in', $str);
}
function gdrcd_filter_out($str)
{
return gdrcd_filter('out', $str);
}
function gdrcd_filter_get($str)
{
return gdrcd_filter('get', $str);
}
function gdrcd_filter_num($str)
{
return gdrcd_filter('num', $str);
}
function gdrcd_filter_addslashes($str)
{
return gdrcd_filter('addslashes', $str);
}
function gdrcd_filter_email($str)
{
return gdrcd_filter('email', $str);
}
function gdrcd_filter_includes($str)
{
return gdrcd_filter('includes', $str);
}
function gdrcd_filter_url($str)
{
return gdrcd_filter('url', $str);
}
/**
* Funzione basilare di filtraggio degli elementi pericolosi in html
* Serve a consentire l'uso di html e css in sicurezza nelle zone editabili della scheda
* Il livello di filtraggio viene controllato da config: $PARAMETERS['settings']['html']
* @param string $str : la stringa da filtrare
* @return $str con gli elementi illegali sosituiti con una stringa di errore
*/
function gdrcd_html_filter($str)
{
$notAllowed = [
"#<script(.*?)>(.*?)</script>#is" => "Script non consentiti",
"#(<iframe.*?\/?>.*?(<\/iframe>)?)#is" => "Frame non consentiti",
"#(<object.*?>.*?(<\/object>)?)#is" => "Contenuti multimediali non consentiti",
"#(<embed.*?\/?>.*?(<\/embed>)?)#is" => "Contenuti multimediali non consentiti",
"#\bon([a-z]*?)=(['|\"])(.*?)\\2#mi" => " ",
"#(javascript:[^\s\"']+)#is" => ""
];
if ($GLOBALS['PARAMETERS']['settings']['html'] == HTML_FILTER_HIGH) {
$notAllowed = array_merge($notAllowed, [
"#(<img.*?\/?>)#is" => "Immagini non consentite",
"#(url\(.*?\))#is" => "none",
]);
}
return preg_replace(array_keys($notAllowed), array_values($notAllowed), $str);
}
/**
* Controlli di routine di gdrcd sui personaggi
* Set di funzione per semplificare controlli frequenti sui personaggi nell'engine
*/
/**
* Check validità della sessione utente
*/
function gdrcd_controllo_sessione()
{
if (empty($_SESSION['login'])) {
echo '<div class="error">', $GLOBALS['MESSAGE']['error']['session_expired'], '<br />', $GLOBALS['MESSAGE']['warning']['please_login_again'], '<a href="', $GLOBALS['PARAMETERS']['info']['site_url'], '">Homepage</a></div>';
die();
}
}
/**
* Controlla se l'utente è esiliato o meno
* @param string $pg : il nome del pg da ricercare
* @return true se il pg è esiliato, false altrimenti
*/
function gdrcd_controllo_esilio($pg)
{
$exiled = gdrcd_query("SELECT autore_esilio, esilio, motivo_esilio FROM personaggio WHERE nome='" . gdrcd_filter('in', $pg) . "' LIMIT 1");
if (strtotime($exiled['esilio']) > time()) {
echo '<div class="error">', gdrcd_filter_out($pg), ' ', gdrcd_filter_out($GLOBALS['MESSAGE']['warning']['character_exiled']), ' ', gdrcd_format_date($exiled['esilio']), ' (', $exiled['motivo_esilio'], ' - ', $exiled['autore_esilio'], ')</div>';
return true;
}
return false;
}
/**
* Controlla se l'utente possiede i permessi indicati
* @param string $permesso : il permesso da controllare
* @return true se il pg possiede i permessi, false altrimenti
*/
function gdrcd_controllo_permessi($permesso)
{
return (bool)$_SESSION['permessi'] >= $permesso;
}
/**
* Funzione controllo permessi forum
* @param int $tipo
* @param mixed $proprietari
* @return bool
*/
function gdrcd_controllo_permessi_forum($tipo, $proprietari = '')
{
$tipo = gdrcd_filter('num', $tipo);
$perm = gdrcd_filter('num', $_SESSION['permessi']);
$razza = gdrcd_filter('num', $_SESSION['id_razza']);
$gilda = gdrcd_filter('out', $_SESSION['gilda']);
switch ($tipo) {
case PERTUTTI:
case INGIOCO:
return true;
case SOLORAZZA:
return (($razza == $proprietari) || ($perm >= MODERATOR));
case SOLOGILDA:
if (empty($proprietari)) {
return false;
} else {
return (strpos($gilda, '*' . $proprietari . '*') || ($perm >= MODERATOR));
}
case SOLOMASTERS:
return ($perm >= GAMEMASTER);
case SOLOMODERATORS:
return ($perm >= MODERATOR);
default:
return ($perm >= SUPERUSER);
}
}
/**
* Controlla se l'utente è loggato da pochi minuti. Utile per l'icona entra/esce
* @param string $time : data in un formato leggibile da strtotime()
* @return int
*/
function gdrcd_check_time($time)
{
$time_hours = date('H', strtotime($time));
$time_minutes = date('i', strtotime($time));
if ($time_hours == date('H')) {
return date('i') - $time_minutes;
} elseif ($time_hours == (date('H') - 1) || $time_hours == (strftime('H') + 11)) {
return date('i') - $time_minutes + 60;
}
return 61;
}
/**
* Utilità
* Set di funzioni di utilità generica per l'engine
*/
/**
* Provvede al caricamento degli elementi nell'interfaccia
* E' approssimata ma funziona, se qualcuno vuol far di meglio si faccia avanti
* @param string $path : il percorso filesystem del file da includere
* @param array $params : un array di dati aggiuntivi passabili al modulo
*/
function gdrcd_load_modules($page, $params = [])
{
global $MESSAGE;
global $PARAMETERS;
// Costruisco i parametri del modulo
$MODULE = $params;
// Sostituisco i __ con i /
$page = gdrcd_pages_format($page);
try {
// Controllo la tipologia di informazione passata (file o page) e poi determino il percorso del modulo
$modulePath = is_file($page) ? $page : gdrcd_pages_path($page);
if(!file_exists($modulePath)) {
throw new Exception($MESSAGE['interface']['layout_not_found']);
}
// Includo il modulo
include($modulePath);
}
catch(Exception $e) {
echo $e->getMessage();
}
}
/**
* Formatto il nome della pagina per consentire la ricerca
* @param string $page il nome della pagina
* @return string
*/
function gdrcd_pages_format($page)
{
$page = str_replace('\\',DIRECTORY_SEPARATOR, $page);
//converte la combinaizone di caratteri __ nel separatore di directory
$page = str_replace('__',DIRECTORY_SEPARATOR, $page);
//
return gdrcd_filter('include', $page);
}
/**
* Eseguo un controllo sul contenuto della cartella /pages
* e cerco una corrispondenza tra i moduli e i file presenti
* @param string $page il nome della pagina da cercare
* @return string
* @throws Exception
*/
function gdrcd_pages_path($page)
{
global $MESSAGE;
// Controllo che sia stato attribuito un valore a page
if(empty($page)) {
throw new Exception($MESSAGE['interface']['page_missing']);
}
// Inizializzo le variabili del metodo
$pagesPath = dirname(__FILE__) . DIRECTORY_SEPARATOR. '..'.DIRECTORY_SEPARATOR.'pages';
$pageFormatted = gdrcd_pages_format($page);
// Imposto i possibili percorsi che posso caricare
$routes = [
'.inc.php',
DIRECTORY_SEPARATOR.'index.inc.php'
];
// Inizializzo la variabile contenitore dei moduli
$modules = [];
// Scorro i percorsi impostati per individuare corrispondenze
foreach ($routes AS $route) {
$file = implode(DIRECTORY_SEPARATOR, [$pagesPath, $pageFormatted.$route]);
// Se esiste la corrispondenza, allora inserisco
if(file_exists($file)) {
$modules[] = $file;
}
}
// Controllo che sia stata trovata almeno una corrispondenza
if(empty($modules)) {
throw new Exception($MESSAGE['interface']['page_not_found']);
}
// Se sono state trovate piu corrispondenze, blocco il caricamento
if(count($modules) > 1) {
throw new Exception($MESSAGE['interface']['multiple_page_found']);
}
// Ritorno il modulo
return $modules[0];
}
/**
* Funzione di formattazione per la data nel formato italiano
* @param string $date_in : la data in un formato leggibile da strtotime()
* @return la data nel formato dd/mm/yyyy
*/
function gdrcd_format_date($date_in)
{
return date('d/m/Y', strtotime($date_in));
}
/**
* Funzione di formattazione del tempo nel formato italiano
* @param string $time_in : la data-ora in un formato leggibile da strtotime()
* @return l'ora nel formato hh:mm
*/
function gdrcd_format_time($time_in)
{
return date('H:i', strtotime($time_in));
}
/**
* Funzione di formattazione data completa nel formato italiano
* @param $datetime_in : la data e ora in formato leggibile da strtotime()
* @return string la data/ora nel formato DD/MM/YYYY hh:mm
*/
function gdrcd_format_datetime($datetime_in)
{
return date('d/m/Y H:i', strtotime($datetime_in));
}
/**
* Funzione di formattazione data completa nel formato standard del database
* @param string $datetime_in : la data e ora in formato leggibile da strtotime()
* @return string la data/ora nel formato YYYY-MM-DD hh:mm
*/
function gdrcd_format_datetime_standard($datetime_in)
{
return date('Y-m-d H:i', strtotime($datetime_in));
}
/**
* Funzione di formattazione data completa nel formato ita per nome file da catalogare
* @param string $datetime_in : la data e ora in formato leggibile da strtotime()
* @return data ora formattata nel formato YYYYMMDD_hhmm
*/
function gdrcd_format_datetime_cat($datetime_in)
{
return date('Ymd_Hi', strtotime($datetime_in));
}
/**
* Trasforma la prima lettera della parola in maiuscolo
* @param string $word : la parola da manipolare
* @return $word con solo la prima lettera maiuscola
*/
function gdrcd_capital_letter($word)
{
return ucwords(strtolower($word));
}
function gdrcd_safe_name($word)
{
return trim(gdrcd_capital_letter(gdrcd_filter_in($word)));
}
/**
* Genera una password casuale, esclusivamente alfabetica con lettere maiuscole
* @return una stringa casuale lunga 8 caratteri
*/
function gdrcd_genera_pass()
{
$pass = '';
for ($i = 0; $i < 8; ++$i) {
$pass .= chr(mt_rand(0, 24) + ord("A"));
}
return $pass;
}
/**
* BBcode nativo di GDRCD
* Secondo me, questo bbcode presenta non poche vulnerabilità.
* TODO Andrebbe aggiornata per essere più sicura
* @param string $str : la stringa con i bbcode da tradurre, dovrebbe già essere stata filtrata per l'output su pagina web
* @return $str con i tag bbcode tradotti in html
* @author Blancks
*/
function gdrcd_bbcoder($str)
{
global $MESSAGE;
$str = gdrcd_close_tags('quote', $str);
$search = [
'#\n#',
'#\[BR\]#is',
'#\[B\](.+?)\[\/B\]#is',
'#\[i\](.+?)\[\/i\]#is',
'#\[U\](.+?)\[\/U\]#is',
'#\[center\](.+?)\[\/center\]#is',
'#\[img\](.+?)\[\/img\]#is',
'#\[redirect\](.+?)\[\/redirect\]#is',
'#\[url=(.+?)\](.+?)\[\/url\]#is',
'#\[color=(.+?)\](.+?)\[\/color\]#is',
'#\[quote(?::\w+)?\]#i',
'#\[quote=(?:"|"|\')?(.*?)["\']?(?:"|"|\')?\]#i',
'#\[/quote(?::\w+)?\]#si'
];
$replace = [
'<br />',
'<br />',
'<span style="font-weight: bold;">$1</span>',
'<span style="font-style: italic;">$1</span>',
'<span style="border-bottom: 1px solid;">$1</span>',
'<div style="width:100%; text-align: center;">$1</div>',
'<img src="$1">',
'<meta http-equiv="Refresh" content="5;url=$1">',
'<a href="$1">$2</a>',
'<span style="color: $1;">$2</span>',
'<div class="bb-quote">' . $MESSAGE['interface']['forums']['link']['quote'] . ':<blockquote class="bb-quote-body">',
'<div class="bb-quote"><div class="bb-quote-name">$1 ha scritto:</div><blockquote class="bb-quote-body">',
'</blockquote></div>'
];
return preg_replace($search, $replace, $str);
}
/**
* Aggiunge la chiusura dei tag BBCode per impedire agli utenti di rompere l'HTML del sito
* @param array|string $tag : il tag da controllare, senza le parentesi quadre, può essere un array di tag
* @param $body : il testo in cui controllare
* @return Il testo corretto
* TODO aggiunge correttamente i tag non chiusi, ma non fa nulla se ci sono troppi tag di chiusura
*/
function gdrcd_close_tags($tag, $body)
{
if (is_array($tag)) {
foreach ($tag as $value) {
$body = gdrcd_close_tags($value, $body);
}
} else {
$opentags = preg_match_all('/\[' . $tag . '/i', $body);
$closed = preg_match_all('/\[\/' . $tag . '\]/i', $body);
$unclosed = $opentags - $closed;
for ($i = 0; $i < $unclosed; $i++) {
$body .= '[/' . $tag . ']';
}
}
return $body;
}
/**
* Fa il redirect della pagina, diretto ocon delay
* @param $url : l'URL verso cui fare redirect
* @param $tempo : il numero di secondi da attendere prima di fare redirect. Se non attendere impostare a 0 o false
*/
function gdrcd_redirect($url, $tempo = false)
{
if (!headers_sent() && $tempo == false) {
header('Location:' . $url);
} elseif (!headers_sent() && $tempo != false) {
header('Refresh:' . $tempo . ';' . $url);
} else {
if ($tempo == false) {
$tempo = 0;
}
echo "<meta http-equiv=\"refresh\" content=\"" . $tempo . ";" . $url . "\">";
}
}
/**
* Sostituisce eventuali parentesi angolari in coppia in una stringa con parentesi quadre
* @param string $str : la stringa da controllare
* @return string $str con la coppie di parentesi angolari sostituite con parentesi quadre
*/
function gdrcd_angs($str)
{
$search = [
'#\<(.+?)\>#is',
'#\<(.+?)>#is',
];
$replace = [
'[$1]',
'[$1]',
];
return preg_replace($search, $replace, $str);
}
/**
* Colora in HTML le parti di testo comprese tra parentesi angolari o parentesi quadre
* Si usa in chat
* @param string $str : la stringa da controllare
* @return $str con la parti colorate
*/
function gdrcd_chatcolor($str)
{
$search = [
'#\<(.+?)\>#is',
'#\[(.+?)\]#is',
];
$replace = [
'<span class="color2"><$1></span>',
'<span class="color2"><$1></span>',
];
return preg_replace($search, $replace, $str);
}
/**
* Sottolinea in HTML una stringa presente in un testo. Usata per sottolineare il proprio nome in chat
* @param string $user : la stringa da sottolineare, in genere un nome utente
* @param string $str : la stringa in cui cercare e sottolineare $user
* @return $str con tutte le occorrenze di $user sottolineate
*/
function gdrcd_chatme($user, $str, $master = false)
{
$search = "|\\b" . preg_quote($user, "|") . "\\b|si";
if (!$master) {
$replace = '<span class="chat_me">' . gdrcd_filter('out', $user) . '</span>';
} else {
$replace = '<span class="chat_me_master">' . gdrcd_filter('out', $user) . '</span>';
}
return preg_replace($search, $replace, $str);
}
/**
* Crea un campo di autocompletamento HTML5 (<datalist>) per vari contenuti
* @param string $str : specifica il soggetto di cui creare la lista. Attualmente è supportato solo 'personaggi', che crea una lista di tutti gli utenti del gdr
* @return string il tag html <datalist> già pronto per essere stampato sulla pagina
*/
function gdrcd_list($str)
{
switch (strtolower($str)) {
case 'personaggi':
$list = '<datalist id="personaggi">';
$query = "SELECT nome FROM personaggio ORDER BY nome";
$characters = gdrcd_query($query, 'result');
while ($option = gdrcd_query($characters, 'fetch')) {
$list .= '<option value="' . $option['nome'] . '" />';//TODO escape HTMl del nome!
}
gdrcd_query($characters, 'free');
$list .= '</datalist>';
break;
}
return $list;
}
/**
* Mostro in modo leggibile le informazioni di una variabile, tra cui il suo contenuto
* @param string $object Variabile da consultare
* @return void Mostra a schermo il contenuto della variabile, formattato
*/
function gdrcd_dump($object)
{
echo '<xmp style="text-align: left;font-size:13px;">';
print_r($object);
echo '</xmp><br />';
}
/**
* Raccolgo le informazioni di una variabile e le mostro in modo leggibile
* @param mixed $args Variabile da consultare
* @return void Mostra a schermo il contenuto della variabile, formattato
* @usage gdrcd_debug($var); gdrcd_debug($var1, $var2, ...);
*/
function gdrcd_debug($args)
{
$args = func_get_args();
foreach ($args as $arg) {
gdrcd_dump($arg);
}
}
/**
* Raccolgo le informazioni di una variabile e le mostro in modo leggibile, poi interrompo il caricamento della pagina
* @param mixed $args Variabile da consultare
* @return void Mostra a schermo il contenuto della variabile, formattato
* @usage gdrcd_brute_debug($var); gdrcd_brute_debug($var1, $var2, ...);
*/
function gdrcd_brute_debug($args)
{
$args = func_get_args();
foreach ($args as $arg) {
gdrcd_dump($arg);
}
die('FINE');
}
/**
* Calcolo lo stipendio da accreditare in base al grado dell'abilità corrispondente
* @param int $grado Grado abilità
* @return int Stipendio corrispondente
*/
function gdrcd_calcola_stipendio_abilita($grado){
// Inizializzo lo stipendio
$stipendio = 500;
// In base al grado, ottengo lo stipendio
switch($grado){
default:
case '0':
$stipendio += 1000;
break;
case '1':
$stipendio += 2000;
break;
case '2':
$stipendio += 3000;
break;
}
return $stipendio;
}
3) Index.php:
<?php
header('Content-Type:text/html; charset=UTF-8');
// Includo i parametri, la configurazione, la lingua e le funzioni
require_once('includes/required.php');
// Eseguo la connessione al database
$handleDBConnection = gdrcd_connect();
/**
* Nel caso stessi utilizzando un sistema di protezione per il sito, prevedo il caricamento della pagina
* @author Breaker
*/
if ($PARAMETERS['settings']['protection'] == 'ON') {
require 'protezione.php';
}
if (DbMigrationEngine::dbNeedsInstallation()) {
/*
* Fix per installare il database la prima volta.
*/
gdrcd_redirect("installer.php");
}
/*
* Definizione pagina da visualizzare
*/
$page = (!empty($_GET['page']) && $_GET['page'] != 'homepage') ? 'homepage__' . gdrcd_filter('include', $_GET['page']) : 'homepage';
/*
* Definizione dell'eventuale contenuto interno
* Utile se si vuol mantenere la struttura della homepage quando si aprono i link
*/
$content = (!empty($_GET['content'])) ? gdrcd_filter('include', $_GET['content']) : 'home';
/**
* Avvio la costruzione dei contenuti della pagina
* @author Kasa
*/
?>
<!-- Force IE6 into quirks mode with this comment tag -->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!-- IE9: mi stai ampiamente rompendo i maroni. -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<link rel="shortcut icon" href="imgs/favicon.ico" type="image/png"/>
<link rel="stylesheet" href="themes/homepage/<?= $PARAMETERS['themes']['homepage']; ?>/homepage.css"
type="text/css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css"/>
<title>
<?php echo $PARAMETERS['info']['site_name']; ?>
</title>
</head>
<body class="main_body">
<?php
// Includo la pagina
if (isset($page) && isset($content)) {
gdrcd_load_modules($pagina, ['contenuto' => $contenuto]);
}
require 'footer.inc.php';
?>
4) Infine, in index.inc.php:
<?php
/** Homepage
* Markup e procedure della homepage
* @author Blancks
*/
/*
* Includo i Crediti
*/
require 'includes/credits.inc.php';
/*
* Conteggio utenti online
*/
$users = gdrcd_query("SELECT COUNT(nome) AS online FROM personaggio WHERE ora_entrata > ora_uscita AND DATE_ADD(ultimo_refresh, INTERVAL 4 MINUTE) > NOW()");
?>
<div id="main">
<div id="site_width">
<div id="header">
<div class="titlecontent">
<h1><a href="index.php"><?php echo $MESSAGE['homepage']['main_content']['site_title']; ?></a></h1>
<div class="subtitle"><?php echo $MESSAGE['homepage']['main_content']['site_subtitle']; ?></div>
</div>
<div class="logincontent">
<div class="login_form">
<form action="login.php" id="do_login" method="post"
<?php if ($PARAMETERS['mode']['popup_choise'] == 'ON') { echo ' onsubmit="check_login(); return false;"';} ?>
>
<div>
<span class="form_label"><label for="username"><?php echo $MESSAGE['homepage']['forms']['username']; ?></label></span>
<input type="text" id="username" name="login1"/>
</div>
<div>
<span class="form_label"><label for="password"><?php echo $MESSAGE['homepage']['forms']['password']; ?></label></span>
<input type="password" id="password" name="pass1"/>
</div>
<?php if (!empty($PARAMETERS['themes']['available']) and count($PARAMETERS['themes']['available']) > 1): ?>
<div>
<span class="form_label"><label for="theme"><?= gdrcd_filter('out', $MESSAGE['homepage']['forms']['theme_choice']) ?></label></span>
<select name="theme" id="theme">
<?php
foreach ($PARAMETERS['themes']['available'] as $k => $name) {
echo '<option value="' . gdrcd_filter('out', $k) . '"';
if ($k == $PARAMETERS['themes']['current_theme']) {
echo ' selected="selected"';
}
echo '>' . gdrcd_filter('out', $name) . '</option>';
}
?>
</select>
</div>
<?php endif; ?>
<?php if ($PARAMETERS['mode']['popup_choise'] == 'ON') { ?>
<div>
<span class="form_label"><label for="allow_popup"><?php echo $MESSAGE['homepage']['forms']['open_in_popup']; ?></label></span>
<input type="checkbox" id="allow_popup"/>
<input type="hidden" value="0" name="popup" id="popup">
</div>
<?php } ?>
<input type="submit" value="<?php echo $MESSAGE['homepage']['forms']['login']; ?>"/>
</form>
</div>
</div>
</div>
<div id="content">
<div class="sidecontent">
<ul>
<li>
<a href="index.php?page=homepage&content=iscrizione"><?php echo $MESSAGE['homepage']['registration']; ?></a>
</li>
<li>
<a href="index.php?page=homepage&content=user_regolamento"><?php echo $MESSAGE['homepage']['rules']; ?></a>
</li>
<li>
<a href="index.php?page=homepage&content=user_ambientazione"><?php echo $MESSAGE['homepage']['storyline']; ?></a>
</li>
<li>
<a href="index.php?page=homepage&content=user_razze"><?php echo $MESSAGE['homepage']['races']; ?></a>
</li>
</ul>
<div class="side_modules">
<strong><?php echo $users['online'], ' ', gdrcd_filter('out', $MESSAGE['homepage']['forms']['online_now']); ?></strong>
</div>
<div class="side_modules">
<?php
// Include il modulo di reset della password
include (__DIR__ . '/reset_password.inc.php');
?>
</div>
<div class="side_modules">
<?php
// Include le statistiche del sito
include (__DIR__ . '/user_stats.inc.php');
?>
</div>
</div>
<div class="content_body">
<?php
gdrcd_load_modules('homepage__'.$MODULE['content']);
?>
</div>
<br class="blank"/>
</div>
<div id="footer">
<div>
<p><?=$REFERENCES?></p>
<p><?=$CREDITS,' ',$LICENCE?></p>
</div>
</div>
</div>
</div>
Spero che questo possa aiutarvi ad aiutarmi, intanto, vi ringrazio infinitamente per tutto, ciaooo!!!!
Moderazione: Cerchiamo di dare dei titoli chiari alle discussioni così che possano essere utile a tutti le soluzioni proposte. Titoli come "vari errori" non aiutno gli altri a ritrovare la problematica con semplicità. Grazie
Pagine → 1 2
04/09/2023 10:04:32
manca una valore di default al campo ultimo_oggetto, devi andare sul database, cercare quel campo nella tabella e modificarlo impostandogli un NULL come valore di default.
ciao
04/09/2023 10:14:22
Ciao!
Hai aggiunto alla tabella personaggio il campo "ultimo_oggetto" ma non le hai assegnato alcun valore di default.
Quindi, eseguendo la query di insert senza specificare un valore per ultimo_oggetto lui non sa cosa mettergli e ti da quell'errore.
nel file iscrizione.inc.php devi quindi andare a modificare la query di inserimento (verso la riga 544) aggiungendo sia alla Value list , sia ai valori il campo ultimo oggetto
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza $lastpasschange_field , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " $lastpasschange_value, -1)");
In questo modo , se non hai aggiunto altri campi alla tabella del personaggio, dovrebbe funzionare.
L'alternativa è andare a modificare il valore di default del campo sul DB, tramite il pannello phpMyAdmin , seleziona la tabella personaggio, vai a modificare il campo "ultimo_oggetto" e nel valore clicchi la tendina "come definito" e nella casella di input che appare sotto inserisci il valore -1.
SPero di essere stato chiaro :D
08/09/2023 11:35:20
Ciao a tutti!
Siete stati gentilissimi e chiari, se non sono riuscita è solo colpa mia, per questo vi ringrazio. :)
Allora io credo di aver fatto le modifiche che mi avete suggerito.
Questa è la modifica del database, però mi è sorto un dubbio, devo aggiungere degli altri campi?
.png)
Qui ho inserito la stringa di codice che mi avevi mostrato, ma adesso, mi porta un unico errore alla linea 306. Però, in quella riga non c'è nulla, essendo la fine della pagina, quindi, è come se mancasse una chiusura o non capisco cosa...

Perdonatemi! Grazie mille di tutto!
08/09/2023 12:15:55
Qual è il testo dell'errore?
08/09/2023 15:36:18
cbr89 ha scritto: Qual è il testo dell'errore?
Ciao, questo è il testo:
Parse error: syntax error, unexpected end of file in /membri/elysium/pages/homepage/iscrizione.inc.php on line 306
13/09/2023 08:58:31
prova così, senza il file originale faccio fatica
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza {$lastpasschange_field} , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " {$lastpasschange_value}, -1)");
13/09/2023 14:11:42
cbr89 ha scritto: prova così, senza il file originale faccio fatica
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza {$lastpasschange_field} , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " {$lastpasschange_value}, -1)");
Intanto ti ringrazio infinitamente! Ma per file originale intendi quello non modificato da me e del GDRCD? Perchè se ti riferisci al file modificato, l'ho caricato nel mio primo post e per intero... :)
13/09/2023 14:18:45
mag18 ha scritto: [quote]cbr89 ha scritto: prova così, senza il file originale faccio fatica
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza {$lastpasschange_field} , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " {$lastpasschange_value}, -1)");
Intanto ti ringrazio infinitamente! Ma per file originale intendi quello non modificato da me e del GDRCD? Perchè se ti riferisci al file modificato, l'ho caricato nel mio primo post e per intero... :)[/quote]
Io ho provato a sostituire il codice che mi hai suggerito, ma adesso l'errore lo indica alla linea 306. Nel dubbio ti carico il codice di tutta la pagina iscrizione.inc.php sperando che ti possa essere utile, grazie mille!
<div class="pagina_iscrizione">
<div class="page_title">
<h2>
<?php echo gdrcd_filter('out', $MESSAGE['register']['page_name']); ?>
</h2>
</div>
<div class="page_body">
<?php /**** Fase 0 ****/
switch (gdrcd_filter('get', $_POST['fase'])) {
case false: ?>
<div class="panels_box">
<!-- condizioni d'uso -->
<div class="disclaimer_iscrizione">
<?php echo gdrcd_filter('out', $MESSAGE['register']['disclaimer']); ?>
</div>
<div class="disclaimer_iscrizione">
<?php echo gdrcd_filter('out', $MESSAGE['register']['rules_read']); ?>
</div>
<!-- Accetto le condizioni -->
<div class="form_gioco">
<form action="<?php echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING']; ?>"
method="post">
<div class="form_submit">
<input type="hidden" name="fase" value="1"/>
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['accept']); ?>"/>
</div>
</form>
</div>
<!-- Non accetto le condizioni -->
<div class="form_gioco">
<form action="index.inc.php" method="post">
<div class="form_submit">
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['refuse']); ?>"/>
</div>
</form>
</div>
</div>
<?php break;
case 1: ?>
<div class="panels_box">
<div class="form_gioco">
<form action="<?php echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING']; ?>"
method="post">
<!-- EMail -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['email']); ?>
</div>
<div class="form_field">
<input name="email" value="<?php echo gdrcd_filter('email', $_POST['email']); ?>"/>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['email_info']); ?>
</div>
<!-- Nome PG -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['name']); ?>
</div>
<div class="form_field">
<input name="nome" value="<?php echo gdrcd_filter('out', $_POST['nome']); ?>"/>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['name_info']); ?>
</div>
<!-- Cognome PG -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['lastname']); ?>
</div>
<div class="form_field">
<input name="cognome" value="<?php echo gdrcd_filter('out', $_POST['cognome']); ?>"/>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['name_info']); ?>
</div>
<!-- Genere -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['gender']); ?>
</div>
<div class="form_field">
<select name="genere">
<option value="m" <?php if (gdrcd_filter('get', $_POST['genere']) == 'm') {
echo 'SELECTED';
} ?> >
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['gender_m']); ?>
</option>
<option value="f" <?php if (gdrcd_filter('get', $_POST['genere']) == 'f') {
echo 'SELECTED';
} ?> >
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['gender_f']); ?>
</option>
</select>
</div>
<!-- Razza -->
<div class="form_label">
<?php echo gdrcd_filter('out', $PARAMETERS['names']['race']['sing'] . ' ' . $MESSAGE['register']['fields']['race']); ?>
</div>
<?php $result = gdrcd_query("SELECT id_razza, nome_razza FROM razza WHERE iscrizione=1 ORDER BY nome_razza", 'result'); ?>
<div class="form_field">
<select name="razza">
<?php while ($row = gdrcd_query($result, 'fetch')) { ?>
<option value="<?php echo $row['id_razza']; ?>" <?php if (gdrcd_filter('get', $_POST['razza']) == $row['id_razza']) {
echo 'SELECTED';
} ?>>
<?php echo gdrcd_filter('out', $row['nome_razza']); ?>
</option>
<?php } ?>
</select>
</div>
<?php if ($PARAMETERS['mode']['racialinfo'] == 'ON') { ?>
<div class="form_info">
<a href="index.php?page=user_razze" target="_new">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['race_info']); ?>
</a>
</div>
<?php } ?>
<!-- Caratteristiche -->
<div class="form_label">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['stats']); ?>
</div>
<div class="form_field">
<table>
<tr>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car0']); ?>
<br/>
<select name="car0">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car0']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car1']); ?>
<br/>
<select name="car1">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car1']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car2']); ?>
<br/>
<select name="car2">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car2']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car3']); ?>
<br/>
<select name="car3">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car3']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car4']); ?>
<br/>
<select name="car4">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car4']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<td>
<?php echo gdrcd_filter('out', $PARAMETERS['names']['stats']['car5']); ?>
<br/>
<select name="car5">
<?php for ($i = 1; $i <= $PARAMETERS['settings']['initial_cars_cap']; $i++) { ?>
<option value="<?php echo $i; ?>" <?php if (gdrcd_filter('num', $_POST['car5']) == $i) {
echo 'SELECTED';
} ?> >
<?php echo $i; ?>
</option>
<?php } ?>
</select>
</td>
<tr>
</table>
</div>
<div class="form_info">
<?php echo gdrcd_filter('out', $MESSAGE['register']['fields']['stats_info'] . ' ' . $PARAMETERS['settings']['cars_sum']); ?>
</div>
<!-- Invio -->
<div class="form_submit">
<input type="hidden" name="fase" value="2"/>
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['next']); ?>"/>
</div>
</form>
</div>
<div class="form_gioco">
<form action="index.php" method="post">
<div class="form_submit">
<input type="submit"
value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['abort']); ?>"/>
</div>
</form>
</div>
</div>
<?php break;
case 2:
$ok = true; ?>
<div class="panels_box">
<!-- Qui continua il codice -->
<?php break;
case 3: ?>
<div class="panels_box">
<!-- Ulteriori controlli, se necessari, prima di finalizzare l'iscrizione -->
<?php
// Esegui ulteriori controlli, se necessario
// Se tutto è a posto, procedi con l'iscrizione
if ($ok) {
// Crea il personaggio
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza {$lastpasschange_field} , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " {$lastpasschange_value}, -1)");
gdrcd_query($query);
// Ottieni l'ID appena inserito
$pg_id = gdrcd_db_last_insert_id();
// Inserisci le caratteristiche del personaggio
$stats_query = "INSERT INTO personaggio_stat (id_personaggio, car0, car1, car2, car3, car4, car5) VALUES (
" . gdrcd_db_quote($pg_id) . ",
" . gdrcd_db_quote($_POST['car0']) . ",
" . gdrcd_db_quote($_POST['car1']) . ",
" . gdrcd_db_quote($_POST['car2']) . ",
" . gdrcd_db_quote($_POST['car3']) . ",
" . gdrcd_db_quote($_POST['car4']) . ",
" . gdrcd_db_quote($_POST['car5']) . "
)";
gdrcd_query($stats_query);
// Mostra il messaggio di successo
echo '<div class="success">' . gdrcd_filter('out', $MESSAGE['register']['success']) . '</div>';
} else {
// Se ci sono errori, torna alla fase precedente
echo '<div class="error">' . gdrcd_filter('out', $MESSAGE['register']['error']['generic']) . '</div>';
?>
<div class="form_gioco">
<form action="<?php echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING']; ?>" method="post">
<div class="form_submit">
<input type="hidden" name="fase" value="2"/>
<input type="hidden" name="email" value="<?php echo gdrcd_filter('out', $_POST['email']) ?>"/>
<input type="hidden" name="nome" value="<?php echo gdrcd_filter('out', $_POST['nome']) ?>"/>
<input type="hidden" name="cognome" value="<?php echo gdrcd_filter('out', $_POST['cognome']) ?>"/>
<input type="hidden" name="genere" value="<?php echo gdrcd_filter('out', $_POST['genere']) ?>"/>
<input type="hidden" name="razza" value="<?php echo gdrcd_filter('num', $_POST['razza']) ?>"/>
<input type="hidden" name="car0" value="<?php echo gdrcd_filter('num', $_POST['car0']) ?>"/>
<input type="hidden" name="car1" value="<?php echo gdrcd_filter('num', $_POST['car1']) ?>"/>
<input type="hidden" name="car2" value="<?php echo gdrcd_filter('num', $_POST['car2']) ?>"/>
<input type="hidden" name="car3" value="<?php echo gdrcd_filter('num', $_POST['car3']) ?>"/>
<input type="hidden" name="car4" value="<?php echo gdrcd_filter('num', $_POST['car4']) ?>"/>
<input type="hidden" name="car5" value="<?php echo gdrcd_filter('num', $_POST['car5']) ?>"/>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['register']['forms']['back']); ?>"/>
</div>
</form>
</div>
<?php
// ... (previous code)
$email = strtolower(gdrcd_filter_email($_POST['email']));
$result = gdrcd_query("SELECT email FROM personaggio", 'result');
foreach ($result as $pg) {
if (gdrcd_password_check($email, $pg['email'])) {
$ok = false;
echo '<div class="error">' . gdrcd_filter('out', $MESSAGE['register']['error']['email_taken']) . '</div>';
break;
}
}
if (empty($email) || (strpos($email, '@') === false) || (strpos($email, '.') === false)) {
$ok = false;
echo '<div class="error">' . gdrcd_filter('out', $MESSAGE['register']['error']['email_needed']) . '</div>';
}
// ... (rest of your code)
?>
14/09/2023 08:47:32
Credo che l'errore principale sia qui (in grassetto):
// Crea il personaggio
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza {$lastpasschange_field} , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " {$lastpasschange_value}, -1)");
che dovrebbe invece essere, da quello che ho capito:
ultimo_oggetto
Inoltre ti potrebbe dare errore (o essere comunque sporcizia/inesattezza) il campo "{$lastpasschange_field}" che viene preso nella query di inserimento ma non sembra essere inizializzato e tanto meno aggiornato. Per caso hai rimosso le sue precedenti inizializzazioni?
Kasa.
15/09/2023 13:23:13
kasa ha scritto: Credo che l'errore principale sia qui (in grassetto):
// Crea il personaggio
gdrcd_query("INSERT INTO personaggio (nome, cognome, pass, data_iscrizione, email, sesso, id_razza, car0, car1, car2, car3, car4, car5, salute, salute_max, soldi, esperienza {$lastpasschange_field} , ultimo oggetto)
VALUES ('" . gdrcd_safe_name($_POST['nome']) . "', '" . gdrcd_safe_name($_POST['cognome']) . "', '" . gdrcd_encript($pass) . "', NOW(), '" . gdrcd_encript($email) . "', '" . gdrcd_filter('in', $_POST['genere']) . "', " . gdrcd_filter('num', $_POST['razza']) . ", " . gdrcd_filter('num', $_POST['car0']) . ", " . gdrcd_filter('num', $_POST['car1']) . ", " . gdrcd_filter('num', $_POST['car2']) . ", " . gdrcd_filter('num', $_POST['car3']) . ", " . gdrcd_filter('num', $_POST['car4']) . ", " . gdrcd_filter('num', $_POST['car5']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['max_hp']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_money']) . ", " . gdrcd_filter('num', $PARAMETERS['settings']['first_px']) . " {$lastpasschange_value}, -1)");
che dovrebbe invece essere, da quello che ho capito:
ultimo_oggetto
Inoltre ti potrebbe dare errore (o essere comunque sporcizia/inesattezza) il campo "{$lastpasschange_field}" che viene preso nella query di inserimento ma non sembra essere inizializzato e tanto meno aggiornato. Per caso hai rimosso le sue precedenti inizializzazioni?
Kasa.
Ciao!!
Ho apportato la modifica che mi hai suggerito, ma non è cambiato nulla. :( Per quanto, riguarda la parte che si riferisce alla query, credo di aver cancellato tutto o in parte e l'ho sostituita con quella suggerita...
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!
Enlisted ↗
Storie di Agarthi ↗
State of Survival ↗
Wuthering Waves ↗
AlterEgo ↗
Tibia ↗
War Thunder ↗
CRSED: F.O.A.D. ↗