Creazione brevetti (botteghe o simili)
Creazione brevetti (botteghe o simili) postato il 30/07/2020 11:41:28 nel forum programmazione, open source e hosting e modificato da haruka il 30/07/2020 12:06:42
Mi sto perdendo in un bicchier d'acqua. Vi spiego cosa ho fatto e funziona. L'ultimo step mi sta tirando scema.
Allora, nella mia tabella personaggio, c'è una colonna chiamata classe. Se in quella colonna c'è un valore (esempio Alchimista), il personaggio può accedere, dal suo avatar, al suo laboratorio. QUESTA PARTE FUNZIONA
Può creare il suo bel brevetto e può editare tutti i brevetti che ha creato (solo i suoi, ho inserito un check ai permessi per far sì che creatore = '".$_SESSION['login']."' QUESTA PARTE FUNZIONA
Gli oggetti creati finiscono in una nuova tabella chiamata "brevetti" che è identica alla tabella "oggetti". QUESTA PARTE FUNZIONA
Il gestore accede ad una pagina che si chiama gestione_brevetti (uguale a gestione_mercato, ma che si interfaccia con la tabella brevetti, e non con la tabella oggetti). La select degli oggetti carica correttamente, riesco a vedere solo gli oggetti nella tabella brevetti e modificarli. Se faccio una modifica ad un oggetto, ad esempio cambiando il nome del brevetto, il proprietario originale del brevetto accedendo nel suo laboratorio la vede. QUESTA PARTE FUNZIONA.
E ora la parte dolente.
Mettiamo di aver caricato - correttamente - un brevetto e che questo sia pronto a diventare un oggetto. Nel form di assegnazione ho questo codice:
<div class='form_field'>
<?php if(gdrcd_query($characters, 'num_rows') > 0) { ?>
<select name="give_item">
<option value="brevettoapprovato">Assegna agli oggetti</option>
</select>
<?php } ?>
</div>
Nella parte di codice che mi gestisce il db, ho:
/*Se e' stato richiesto di assegnare un brevetto agli oggetti approvati*/
if((gdrcd_filter('get', $_POST['op']) == 'assign') && (gdrcd_filter('num', $_POST['num_oggetti']) > 0)) {
if($_POST['give_item'] == 'brevettoapprovato') {
$result = gdrcd_query("SELECT id_oggetto FROM brevetti WHERE id_oggetto = ".$_POST['id_oggetto']."", 'result');
if(gdrcd_query($result, 'num_rows') > 0) {
gdrcd_query("INSERT INTO oggetto (tipo, nome, urlimg, descrizione, costo, ubicabile, attacco, difesa, cariche, bonus_car0, bonus_car1, bonus_car2, bonus_car3, bonus_car4, bonus_car5, creatore, data_inserimento) VALUES (".gdrcd_filter('in', $_POST['tipo_oggetto']).", '".gdrcd_filter('in', $_POST['nome_oggetto'])."', '".gdrcd_filter('in', $immagine_oggetto)."', '".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', ".gdrcd_filter('num', $_POST['costo_oggetto']).", ".gdrcd_filter('num', $_POST['fit_in']).", ".gdrcd_filter('num', $_POST['attacco_oggetto']).", ".gdrcd_filter('num', $_POST['difesa_oggetto']).", ".gdrcd_filter('num', $_POST['cariche_oggetto']).", ".gdrcd_filter('num', $_POST['car0_oggetto']).", ".gdrcd_filter('num', $_POST['car1_oggetto']).", ".gdrcd_filter('num', $_POST['car2_oggetto']).", ".gdrcd_filter('num', $_POST['car3_oggetto']).", ".gdrcd_filter('num', $_POST['car4_oggetto']).", ".gdrcd_filter('num', $_POST['car5_oggetto']).", '".$_SESSION['login']."', NOW())");
} else
Non copio la parte sotto dell'else, comunque è identica a quella di assegnazione dell'oggetto ad un personaggio, da gestione_mercato, ma il problema non è lì.
Ciò che dovrebbe fare il codice, e non lo fa perché da autodidatta non so dove mettere le mani, è: prendere il brevetto che sto approvando e spostarmelo dalla tabella brevetti alla tabella oggetti. (Io poi accederei da gestione_mercato e da lì andrei ad assegnare quello che era un brevetto, ora diventato oggetto, al mercato).
In pratica, sto cercando di creare un sistema che mi consenta di visualizzare e approvare gli oggetti proposti dai giocatori.
Ma nell'ultimo step, quando imposto quantità 1 del brevetto, da inviare agli oggetti, il sistema restituisce questo errore:
GDRCD MySQLi Error [File: gestione_brevetti.inc.php; Line: 59]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Haruka', NOW())' at line 1
Error Detail: INSERT INTO oggetto (tipo, nome, urlimg, descrizione, costo, ubicabile, attacco, difesa, cariche, bonus_car0, bonus_car1, bonus_car2, bonus_car3, bonus_car4, bonus_car5, creatore, data_inserimento) VALUES (, '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Haruka', NOW())
Non ne vengo a capo. Dove sbaglio?
Edit: da quel poco che riesco a capire dal messaggio di errore, il sistema non sta caricando le specifiche dell'oggetto e quindi quando cerca di spostarlo nella nuova tabella, non gli tornano le colonne? Oppure non va l'incremento... niente, sono bloccata in questo step che poi sarebbe quello conclusivo.
Pagine → 1
30/07/2020 12:59:06
Error Detail: INSERT INTO oggetto (tipo, nome, urlimg, descrizione, costo, ubicabile, attacco, difesa, cariche, bonus_car0, bonus_car1, bonus_car2, bonus_car3, bonus_car4, bonus_car5, creatore, data_inserimento) VALUES (, '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Haruka', NOW())
Ti da l'errore perchè quando inserisci il brevetto nell'oggetto manca il tipo:
VALUES (,
a quanto pare non lo prende qui:
VALUES (".gdrcd_filter('in', $_POST['tipo_oggetto'])
30/07/2020 13:38:17
Sto provando a sistemare e snellire quella parte di codice anche perché ci sono dati che non mi interessa settare in questa fase di approvazione.
Adesso ho:
$result = gdrcd_query("SELECT * FROM brevetti WHERE id_oggetto = ".$_POST['id_oggetto']."", 'result');
if(gdrcd_query($result, 'num_rows') > 0) {
gdrcd_query("INSERT INTO oggetto (tipo, nome, urlimg, descrizione, creatore, data_inserimento) VALUES (".gdrcd_filter('in', $_POST['tipo_oggetto']).", '".gdrcd_filter('in', $_POST['nome_oggetto'])."', '".gdrcd_filter('in', $immagine_oggetto)."', '".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', '".$_SESSION['login']."', NOW())");
}
Ma non cambia.
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' '', '', '', 'Haruka', NOW())' at line 1
Error Detail: INSERT INTO oggetto (tipo, nome, urlimg, descrizione, creatore, data_inserimento) VALUES (, '', '', '', 'Haruka', NOW())
In pratica non legge i valori dal record nella tabella brevetti?
30/07/2020 14:17:29
l'errore è sempre quello di prima, non viene settato
$_POST['tipo_oggetto']
quando invi i dati dal form
30/07/2020 15:46:02
Non so se sto facendo dei piccoli passi in avanti oppure no. Allora, tolto il tipo che dava errore e che comunque, anche lì, posso gestire dopo.
Adesso il codice è
/*Se e' stato richiesto di assegnare un brevetto agli oggetti approvati*/
if((gdrcd_filter('get', $_POST['op']) == 'assign') && (gdrcd_filter('num', $_POST['num_oggetti']) > 0)) {
if($_POST['give_item'] == 'brevettoapprovato') {
$result = gdrcd_query("SELECT * FROM brevetti WHERE id_oggetto = ".$_POST['id_oggetto']."", 'result');
if(gdrcd_query($result, 'num_rows') > 0) {
gdrcd_query($result, 'free');
$query = "INSERT INTO oggetto (nome, urlimg, descrizione, creatore, data_inserimento) VALUES ('".gdrcd_filter('in', $_POST['nome_oggetto'])."', '".gdrcd_filter('in', $immagine_oggetto)."', '".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', '".$_SESSION['login']."', NOW())";
}
gdrcd_query($query);
} else
Non ottengo più errore e in oggetto viene inserito il nuovo record, peccato che a parte i dati inerenti creatore e data_inserimento - che in pratica non sono dati che andrebbero pescati dal record nella tabella brevetti - tutti gli altri siano vuoti.
La parte di codice del form per l'assegnazione è:
<!-- Form di assegnazione oggetti (appare solo se è stato caricato un oggetto) -->
<?php if(isset($loaded_item) == true) { ?>
<div class="panels_box">
<form class="form_gestione" action="main.php?page=gestione_brevetti" method="post">
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['administration']['items']['give_item']); ?>
</div>
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['administration']['items']['number_item']); ?>
</div>
<div class='form_field'>
<input type="text" name="num_oggetti" value="0" />
</div>
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['administration']['items']['destination_item']); ?>
</div>
<div class='form_field'>
<?php if(gdrcd_query($characters, 'num_rows') > 0) { ?>
<select name="give_item">
<option value="brevettoapprovato">Assegna agli oggetti</option>
</select>
<?php } ?>
</div>
<input type="hidden" name="id_oggetto" value="<?php echo $loaded_item['id_oggetto']; ?>" />
<input type="hidden" name="cariche_oggetto" value="<?php echo $loaded_item['cariche']; ?>" />
<input type="hidden" name="op" value="assign" />
<div class='form_submit'>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
</div>
<?php } ?>
30/07/2020 18:32:05 e modificato da haruka il 30/07/2020 18:33:14
Update, ho ulteriormente ripulito il codice. Adesso ho:
if(isset($_POST['op']) === true) {
/*Se e' stato richiesto di caricare un oggetto*/
if($_POST['op'] == 'load') {
$loaded_item = gdrcd_query("SELECT * FROM brevetti WHERE id_oggetto=".gdrcd_filter('num', $_POST['load_item'])."");
$characters = gdrcd_query("SELECT nome FROM personaggio ORDER BY nome", 'result');
}
/*Se e' stato richiesto di modificare un oggetto...*/
if($_POST['op'] == 'update') {
/*...modificando i campi*/
if(isset($_POST['modifica']) === true) {
gdrcd_query("UPDATE brevetti SET tipo=".gdrcd_filter('in', $_POST['tipo_oggetto']).", nome='".gdrcd_filter('in', $_POST['nome_oggetto'])."', urlimg='".gdrcd_filter('in', $_POST['img_oggetto'])."', descrizione='".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', costo=".gdrcd_filter('num', $_POST['costo_oggetto']).", ubicabile=".gdrcd_filter('num', $_POST['fit_in']).", attacco=".gdrcd_filter('num', $_POST['attacco_oggetto']).", difesa=".gdrcd_filter('num', $_POST['difesa_oggetto']).", cariche=".gdrcd_filter('num', $_POST['cariche_oggetto']).", bonus_car0=".gdrcd_filter('num', $_POST['car0_oggetto']).", bonus_car1=".gdrcd_filter('num', $_POST['car1_oggetto']).", bonus_car2=".gdrcd_filter('num', $_POST['car2_oggetto']).", bonus_car3=".gdrcd_filter('num', $_POST['car3_oggetto']).", bonus_car4=".gdrcd_filter('num', $_POST['car4_oggetto']).", bonus_car5=".gdrcd_filter('num', $_POST['car5_oggetto'])." WHERE id_oggetto=".gdrcd_filter('num', $_POST['id_oggetto'])."");
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['warning']['modified']).'</div>';
} /*...eliminandolo*/ else {
if(isset($_POST['elimina']) === true) {
/*Risarcisco gli eventuali possessori */
$rec = gdrcd_query("SELECT costo FROM brevetti WHERE id_oggetto=".gdrcd_filter('num', $_POST['id_oggetto'])." LIMIT 1");
$refound = gdrcd_query("SELECT nome FROM clgpersonaggiooggetto WHERE id_oggetto=".gdrcd_filter('num', $_POST['id_oggetto'])."", 'result');
while($do_refound = gdrcd_query($refound, 'fetch')) {
gdrcd_query("UPDATE personaggio SET soldi = soldi + ".gdrcd_filter('num', $rec['costo'])." WHERE nome = '".gdrcd_filter_in($do_refound['nome'])."'");
}
gdrcd_query($refound, 'free');
/*Elimino l'oggetto*/
gdrcd_query("DELETE FROM brevetti WHERE id_oggetto=".gdrcd_filter('num', $_POST['id_oggetto'])." LIMIT 1");
gdrcd_query("DELETE FROM clgpersonaggiooggetto WHERE id_oggetto=".gdrcd_filter('num', $_POST['id_oggetto']));
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['warning']['modified']).'</div>';
}
}
}
/*Se e' stato richiesto di inserire un oggetto*/
if(gdrcd_filter('get', $_POST['op']) == 'insert') {
if(gdrcd_filter('get', $_POST['img_oggetto']) == '') {
$immagine_oggetto = 'standard_oggetto.png';
} else {
$immagine_oggetto = gdrcd_filter('get', $_POST['img_oggetto']);
}
gdrcd_query("INSERT INTO brevetti (tipo, nome, urlimg, descrizione, costo, ubicabile, attacco, difesa, cariche, bonus_car0, bonus_car1, bonus_car2, bonus_car3, bonus_car4, bonus_car5, creatore, data_inserimento) VALUES (".gdrcd_filter('in', $_POST['tipo_oggetto']).", '".gdrcd_filter('in', $_POST['nome_oggetto'])."', '".gdrcd_filter('in', $immagine_oggetto)."', '".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', ".gdrcd_filter('num', $_POST['costo_oggetto']).", ".gdrcd_filter('num', $_POST['fit_in']).", ".gdrcd_filter('num', $_POST['attacco_oggetto']).", ".gdrcd_filter('num', $_POST['difesa_oggetto']).", ".gdrcd_filter('num', $_POST['cariche_oggetto']).", ".gdrcd_filter('num', $_POST['car0_oggetto']).", ".gdrcd_filter('num', $_POST['car1_oggetto']).", ".gdrcd_filter('num', $_POST['car2_oggetto']).", ".gdrcd_filter('num', $_POST['car3_oggetto']).", ".gdrcd_filter('num', $_POST['car4_oggetto']).", ".gdrcd_filter('num', $_POST['car5_oggetto']).", '".$_SESSION['login']."', NOW())");
echo '<div class="warning">'.gdrcd_filter('out', $MESSAGE['warning']['inserted']).'</div>';
}
/*Se e' stato richiesto di assegnare un brevetto agli oggetti approvati*/
if(gdrcd_filter('get', $_POST['op']) == 'assign') {
gdrcd_query("INSERT INTO oggetto (tipo, nome, urlimg, descrizione, creatore, data_inserimento) VALUES ('".gdrcd_filter('in', $_POST['tipo_oggetto'])."', '".gdrcd_filter('in', $_POST['nome_oggetto'])."', '".gdrcd_filter('in', $immagine_oggetto)."', '".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', '".$_SESSION['login']."', NOW())");
}
echo '<div class="warning">Operazione riuscita</div>';
}
Fa tutto, tranne che copiare il brevetto dalla tabella "brevetti" alla tabella "oggetto".
Se infatti clicco sul pulsante invia che è associato al form assign - premettendo che l'oggetto è stato caricato e il form si è "popolato" correttamente con i valori dell'oggetto che ho caricato dal database - mi inserisce un nuovo record nella tabella "oggetto" ma a parte '".$_SESSION['login']."', NOW())"); gli altri valori sono vuoti.
Tutto il resto, ovvero inserimento e modifica, funziona...
30/07/2020 19:05:05
E l'ho anche provata così...
if(gdrcd_filter('get', $_POST['op']) == 'assign') {
$tipo_oggetto = gdrcd_filter('get', $_POST['tipo_oggetto']);
$nome_oggetto = gdrcd_filter('get', $_POST['nome_oggetto']);
$descrizione_oggetto = gdrcd_filter('get', $_POST['descrizione_oggetto']);
$immagine_oggetto = gdrcd_filter('get', $_POST['img_oggetto']);
gdrcd_query("INSERT INTO oggetto (tipo, nome, urlimg, descrizione, creatore, data_inserimento) VALUES ('".$tipo_oggetto."', '".$nome_oggetto."', '".$immagine_oggetto."', '".$descrizione_oggetto."', '".$_SESSION['login']."', NOW())");
}
echo '<div class="warning">Operazione riuscita</div>';
idem non carica i valori...
31/07/2020 11:52:55
Niente, ho risolto. Posto il codice che magari torna utile a qualcuno.
Ricordo, la base è il file gestione_mercato
al database ho aggiunto una tabella chiamata brevetti, identica alla tabella oggetto.
La nuova pagina che si interfaccia con questa tabella, e che si chiama gestione_brevetti, presenta (al posto della parte contrassegnata come
/*Se e' stato richiesto di assegnare un oggetto al mercato o ad un PG*/ )
/*Se e' stato richiesto di assegnare un brevetto agli oggetti approvati*/
if(gdrcd_filter('get', $_POST['op']) == 'assign') {
gdrcd_query("INSERT INTO oggetto (nome, urlimg, descrizione, creatore, data_inserimento) VALUES ('".gdrcd_filter('in', $_POST['nome_oggetto'])."', '".gdrcd_filter('in', $_POST['urlimg_oggetto'])."', '".gdrcd_filter('in', $_POST['descrizione_oggetto'])."', '".gdrcd_filter('in', $_POST['nome_creatore'])."', NOW())");
}
echo '<div class="warning">Operazione riuscita. Recati in <a href="main.php?page=gestione_mercato">gestione oggetti</a> per completare inserimento e invio al mercato</div>';
}
In fondo, la parte di form assegnata al comando "assign" è:
<!-- Form di assegnazione oggetti (appare solo se è stato caricato un oggetto) -->
<?php if(isset($loaded_item) == true) { ?>
<div class="panels_box">
<form class="form_gestione" id="assegnazioneoggetto" action="main.php?page=gestione_brevetti" method="post">
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['administration']['items']['give_item']); ?>
</div>
<div class='form_field'>
<input type="hidden" type="text" name="num_oggetti" value="1" />
</div>
<div class='form_label'>
Nome oggetto
</div>
<div class='form_field'>
<input type="text" name="nome_oggetto" value="<?php echo $loaded_item['nome']; ?>" />
</div>
<div class='form_label'>
Nome creatore
</div>
<div class='form_field'>
<input type="text" name="nome_creatore" value="<?php echo $loaded_item['creatore']; ?>" />
</div>
<div class='form_label'>
Immagine
</div>
<div class='form_field'>
<input type="text" name="urlimg_oggetto" value="<?php echo $loaded_item['urlimg']; ?>" />
</div>
<div class='form_label'>
<?php echo gdrcd_filter('out', $MESSAGE['interface']['administration']['items']['item_info']); ?>
</div>
<div class='form_field'>
<textarea type="textbox" name="descrizione_oggetto"><?php echo $loaded_item['descrizione']; ?></textarea>
</div>
<div class='form_field'>
<?php if(gdrcd_query($characters, 'num_rows') > 0) { ?>
<select name="give_item">
<option value="brevettoapprovato">Assegna agli oggetti</option>
</select>
<?php } ?>
</div>
<input type="hidden" name="id_oggetto" value="<?php echo $loaded_item['id_oggetto']; ?>" />
<input type="hidden" name="cariche_oggetto" value="<?php echo $loaded_item['cariche']; ?>" />
<input type="hidden" name="op" value="assign" />
<div class='form_submit'>
<input type="submit" value="<?php echo gdrcd_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
</div>
</form>
</div>
<?php } ?>
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!
Neverness to Everness ↗
World of the Sea Battle ↗
Tiles Survive ↗
Exclusive Villa GdR ↗
World of Tanks ↗
AlterEgo ↗
Imperion ↗
Cafuné ↗