.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ informatica triennale (http://www.dsy.it/forum/forumdisplay.php?forumid=211)
-- progetto da consegnare a settembre. (http://www.dsy.it/forum/showthread.php?threadid=38969)


Posted by carla86 on 02-09-2009 21:39:

progetto da consegnare a settembre.

Io sono alle prime armi cn php e mysql; e devo consegnare il progetto a settembre..
Sono a buon punto ma vorrei avere un parere sulla gestione dei turni.
Mi spiego meglio: Il testo dice ke un giocatore quando non è di turno può visualizzare i suoi dati (la nazione, quanti pi, quante citta e cosi via...) quindi nn lo posso sloggare ma allo stesso tempo gli devo togliere la possibilità d fare azioni..
Cosa avete fatto voi?

GRAZIE


Posted by darkshadow on 03-09-2009 08:21:

 
un bel flag sul db (attivo, non attivo)??? se attivo è il suo turno altrimenti vede solo le statistiche.

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 03-09-2009 09:17:

ok ma quindi tu nn hai considerato i connessi e i nn connessi ma semplicemente tutti..

x fare finire il turno hai messo un semplice bottone o anke una scadenza d tempo della sessione?


Posted by darkshadow on 03-09-2009 11:50:

Originally posted by carla86
ok ma quindi tu nn hai considerato i connessi e i nn connessi ma semplicemente tutti..

x fare finire il turno hai messo un semplice bottone o anke una scadenza d tempo della sessione?


non ho capito.

cmq quello che intendo io è che sulla tabella giocatore o dove vuoi hai un campo attivo. Un utente prima insersce le sue credenziali per giocare. Qui oltre a controllare che nick e psw siano corrette ti prendi anche il valore di attivo. Se è true allora è il suo turno altrimenti vede solo le statistiche. non so se mi sono spiegato meglio.
sull'altro punto credo che oltre al bottone sia necessario inserire un timeout se no un utente può rimanere all'infinito senza far giocare a gli altri.


ds

__________________
by Ð@rk§h@ÐØw


Posted by R1cky` on 03-09-2009 20:27:

Io ho fatto in questo modo:

Il giocatore fa il login e si trova in modalità di sola visualizzazione. Se vuol iniziare il turno preme il bottone "inizio turno". Se non c'è nessun altro giocatore attualmente in turno comincia, altrimenti rimane in coda fino a quando il giocatore che è in turno preme il bottone "termina turno".

Posso confermarti che Montanelli è abbastanza flessibile su questa cosa dei turni, perchè non è prettamente inerente all'sql. Un bottone "termina turno" va più che bene.


Posted by carla86 on 07-09-2009 17:12:

@darkshadow --> Intendevo ke tu hai un solo flag attivo/nn attivo;
nn hai anche un flag connesso nn connesso.
Semplicemente su tutti quelli registrati controlli il flag attivo non attivo...
Io invece volevo mettere un flag x i connessi xo' ho paura d incasinarmi la vita!

@R1cky --> grazie!! invece su cosa montanelli è intransigente!

GRAZIE A TUTTI!!!!!


Posted by R1cky` on 07-09-2009 18:31:

Originally posted by carla86

@R1cky --> grazie!! invece su cosa montanelli è intransigente!


Con noi Montanelli è stato bravo. Alla fine importa che tu sia sicura di quello che hai fatto e che sappia motivare le scelte implementative, sempre che non hai fatto degli errori madornali...


Posted by darkshadow on 07-09-2009 20:19:

 
una domanda forse un po banale ma ve la faccio lo stesso.
Per le citta: Voi considerate il nome come unico a livello globale o solo a livello di nazione??
la metto in modo diverso: nel vostro db possono esistere citta con lo stesso nome ma di nazioni diverse??

stessa domanda per gli eserciti.

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 07-09-2009 20:25:

nel mio db no.. nel senso ke era uno dei primi problemi ke mi ero posta, sia x quanto riguarda i nomi d citta sia x quanto riguarda i nomi degli eserciti e avevo chiesto a montanelli.
La sua risposta è stata ke il nome deve essere unico, deve identificare la città..


Posted by darkshadow on 07-09-2009 21:31:

quindi unico a livello globale??

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 07-09-2009 21:43:

si unico a livello globale, tant'è ke l'ho scelto come chiave primaria.


Posted by carla86 on 07-09-2009 22:44:

mi sono appena messa su i trigger e le funzioni (ho fatto prima la parte web) ma ho dei dubbi:
1. nelle funzioni sql nn posso usare le tuple NEW e OLD, se nn ho capito male le posso usare solo nel trigger, giusto?!
2. ma nel trigger nn posso dichiarare variabili, vero?
3. nei trigger nell'if posso avere più d un'istruzione?
4. un utente sposta i pi dalla nazione alla citta. come faccio a fare partire un update su tutte e due le tabelle?

se qualcuno ke ha gia consegnato potesse mettere un esempio sarebbe molto utile..
grazie


Posted by darkshadow on 08-09-2009 08:17:

1. Da quel che mi risulta no.
2. Si, si possono dichiarare.
3. Si, è come nei normali linguaggi di programmazione puoi usare i connettivi AND OR e la negazione (Not).
4. Prima controlli che i dati inseriti nella tabella che ha attivato il trigger siano giusti poi al suo interno fai una normale update nella tabella nazione per aggiornare (aggiungere/togliere) i PI assegnati alla città.

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 08-09-2009 08:49:

scusami ti scrivo un trigger che ho provato a inserire e ke mysql mi da errore d sintassi:
(ho una tabella citta e una tabella nazione)

create trigger prova
before update on citta
for each row
begin
declare diff integer
declare nome varchar(20)
if new.vi>old.vi then
diff=new.vi-old.vi
nome=nazione
update nazione set pi=pi-diff where nomenazione=nome
update citta set new.ab=old.ab+3 and new.ra=old.ra-3 and new.rn=old.rn-3
endif
end;

mi sai dire se è corretto? grazie


Posted by darkshadow on 08-09-2009 09:14:

 
che errore ti da??

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 08-09-2009 09:18:

ERROR 1064 (42000): 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 'end'
at line 7

xo' forse ho trovato ke sia il delimiter ke mi sono dimenticata e poi cn end if.

ho anche un'altra domanda, scusa ke t sto subissando d domande ma è la prima volta ke metto mano su mysql:
in un campo posso aggiungere una percentuale? ossia x esempio:
set new.ab=old.ab+10%;
??
grazie ancora...


Posted by darkshadow on 08-09-2009 09:24:

direi di no.. penso ke la percentuale la devi calcolare. o al massimo se esiste usare una funzione ke te le calcola.

cmq io non sto usando mysql.

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 08-09-2009 09:31:

ma quindi tu x fare gli aumenti metti direttamente il numero?!?!
Io volevo usare la percentuale xke volevo aumentare i valori in base a quanti pi spostava...


Posted by darkshadow on 08-09-2009 09:40:

anchio uso le percentuali.. quello che volevo dire è che non si può fare...
colonna = colonna + 10%

quel 10% lo devi calcolare

non so per esempio dichiari una funzione che ti calcola la percentuale

e quindi fai : colonna = colonna + funzionePercentuale()

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 08-09-2009 10:25:

o sono diventata pazza o nn arrivo a determinate cose..

delimiter //
create function percentuale(integer val, integer percento) return integer as
begin
declare risultato integer;
risultato = (val*percento)/100;
return risultato;
end;
//

cosa c'è d sbagliato? x qaunto ho cercato su internet (in cui nn ci sono esempi concreti ma parla solo d sintassi..) dovrebbe essere giusto..


Posted by darkshadow on 08-09-2009 10:37:

Originally posted by carla86
o sono diventata pazza o nn arrivo a determinate cose..

delimiter //
create function percentuale(integer val, integer percento) return integer as
begin
declare risultato integer;
risultato = (val*percento)/100;
return risultato;
end;
//

cosa c'è d sbagliato? x qaunto ho cercato su internet (in cui nn ci sono esempi concreti ma parla solo d sintassi..) dovrebbe essere giusto..


delimiter //
create function percentuale(integer val, integer percento) returns integer as
begin
declare risultato integer;
SET risultato = (val*percento)/100;
return risultato;
end
//

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 08-09-2009 10:55:

mysql> create function percentuale(integer val,integer percento) returns integer
as
-> begin
-> declare risultato integer;
-> set risultato=(val*percento)/100;
-> return risultato;
-> end;
-> //
ERROR 1064 (42000): 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 'integ
er val,integer percento) returns integer as
begin
declare risultato integer' at line 1

questo è ciò ke faccio in mysql tralatro cn l'utente root quindi proprio nn capisco dov'è l'errore...
mi sa ke mi toccherà inviare una mail a montanelli e chiedergli un colloquio,altrimenti me lo sogno d consegnare il progetto..
spero tu sia messo meglio..
grazie dell'aiuto!


Posted by darkshadow on 08-09-2009 11:16:

 

delimiter //
create function percentuale(integer val, integer percento) returns integer as
begin
declare risultato integer        -> Il ; non ci va nella declare
SET risultato = (val*percento)/100;
return risultato;
end
//

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 08-09-2009 11:28:

niente da fare anche togliendo il punto e virgola nn funziona uguale... sempre stesso errore..


Posted by R1cky` on 08-09-2009 11:28:

Che editor usi?
Ti consiglio di scaricare http://www.webyog.com/en/downloads.php#sqlyog, è molto comodo.

Comunque se vai da montanelli non dirgli che hai fatto prima la parte web e poi la parte db altrimentti tin inforca :D


Posted by carla86 on 08-09-2009 11:34:

no beh
cmq prima d andare faccio anke gli altri trigger
cosi gli chiedo xke nessuno va..

cmq come editor uso scite..
l'errore ke mi da è sempre questo.. ma nn è ke ce da mettere qualche cosa tra apici??

ERROR 1064 (42000): 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 'integ
er val,integer percento) returns integer as
begin
declare risultato integer' at line 1


Posted by carla86 on 08-09-2009 11:48:

EVVAIIIII
C'E' L'HO FATTAAAAA
era un problema d parametri..
la pubblico in caso possa servire a qualcuno..

create function percentuale (val integer,percento integer) returns integer
begin
declare risultato integer;
set risultato=((val*percento)/100);
return risultato;
end;


Posted by Sacratix on 09-09-2009 18:07:

Originally posted by carla86
scusami ti scrivo un trigger che ho provato a inserire e ke mysql mi da errore d sintassi:
(ho una tabella citta e una tabella nazione)

create trigger prova
before update on citta
for each row
begin
declare diff integer
declare nome varchar(20)
if new.vi>old.vi then
diff=new.vi-old.vi
nome=nazione
update nazione set pi=pi-diff where nomenazione=nome
update citta set new.ab=old.ab+3 and new.ra=old.ra-3 and new.rn=old.rn-3
endif
end;

mi sai dire se è corretto? grazie


premetto che ho usato plpgsql
e che mysql non l'ho proprio preso in considerazione
(phpPgAdmin è molto meglio di phpMyAdmin >_> )

sei sicura che si possano usare conteporaneamente NEW e OLD?
perchè con postgres se il trigger è in UPDATE o INSERT, solo NEW viene riempito (solo OLD per la DELETE)

dai un'occhiata che è meglio

__________________
I wish for this night-time to last for a life-time


Posted by carla86 on 09-09-2009 18:23:

la new la puoi usare x la insert e x l'update.
la old la puoi usare x l'update e x la delete.


Posted by Sacratix on 09-09-2009 18:42:

ok, buono a sapersi che lì funziona

come non detto, funziona così anche qui, ora mi chiedo
"cosa diavolo avrò fatto per farmi credere che non fosse così?" >_<

__________________
I wish for this night-time to last for a life-time


Posted by carla86 on 16-09-2009 15:15:

voi cosa avete usato o cosa userete x fare lo schema ER da consegnare al prof? lo fate a mano (tanto va consegnato cartaceo) o lo fate con qualche programma particolare??

grazie.


Posted by darkshadow on 16-09-2009 21:48:

x ora l'ho fatto su carta.

Una domanda...

cosa fate nel caso in cui una naziona vada in deficit?? cioè se scende sotto i -2000 PI.

1) eliminate la nazione e quindi anche tutte le citta/strade/eserciti da lui create?

2) eliminate la nazione e mette null in tutti i suoi riferimenti??

il giocatore direi che non va eliminato per evitare di rifare la registrazione.

__________________
by Ð@rk§h@ÐØw


Posted by carla86 on 17-09-2009 09:56:

io cancello la nazione cn tutte le citta e gli eserciti.
le strade onestamente le lascio xke nn c'avevo pensato..


Posted by Sacratix on 17-09-2009 13:37:

cancello il giocatore (e a cascata sparisce tutto il resto)

__________________
I wish for this night-time to last for a life-time


Posted by Sacratix on 17-09-2009 13:38:

Originally posted by carla86
voi cosa avete usato o cosa userete x fare lo schema ER da consegnare al prof? lo fate a mano (tanto va consegnato cartaceo) o lo fate con qualche programma particolare??

grazie.


con word puoi fare i grafici

e poi ho usato paint >_>

__________________
I wish for this night-time to last for a life-time


Posted by carla86 on 17-09-2009 14:41:

un altra domanda voi come fate il meccanismo d premiazione, penalizzazione?? nel senso ke io nn riesco a mantenere il valore dei vecchi abitanti e dei vecchi rn quindi quando vado a cercare d calcolare se abitanti ed rn sono cresciuti nn riesco...
da premettere ke io per capire se un utente è connesso ho un campo nella tabella nazione e x capire quando sei d turno ho un altro campo sempre nella tabella nazione (prima erano nella tabella giocatore ma mi incasinavo d più la vita..).
quindi al trigger io faccio controllare se new.attivo=0 and old.attivo=1 vuol dire ke ha terminato il turno e devo calcolargli il premio ma nn so come controllare l'incremento o il decremento degli abitanti e delle rn.
grazie.


Posted by marcooo on 17-09-2009 15:16:

Io all'inizio del turno memorizzo nella tabella "turni" i valori iniziali degli abitanti e delle risorse naturali. Al termine del turno faccio il confronto con i nuovi valori raggiunti.

Anch'io ho una domanda...
Ma come avete fatto a calcolare le varie strade esistenti e i punti movimento necessari allo spostamento? Io proprio non riesco e penso che lo consegnerò così com'è... :-(


Posted by carla86 on 21-09-2009 16:01:

probabilmente da qualche parte ce gia scritto...
posso in qualche modo da php richiamare le funzioni d mysql ke mi sono creata io?
se si come posso fare?
e posso mettere il risultato d questa chiamata in qualche variabile php?
grazie!!


Posted by Metteus on 21-09-2009 16:10:

Originally posted by marcooo
Io all'inizio del turno memorizzo nella tabella "turni" i valori iniziali degli abitanti e delle risorse naturali. Al termine del turno faccio il confronto con i nuovi valori raggiunti.

Anch'io ho una domanda...
Ma come avete fatto a calcolare le varie strade esistenti e i punti movimento necessari allo spostamento? Io proprio non riesco e penso che lo consegnerò così com'è... :-(


il metodo piu elegante ma anche piu difficile è implementare l'algoritmo di dijkstra per calcolare il cammino minimo tra due citta ;)


Posted by carla86 on 21-09-2009 23:22:

PARLO ANCORA DELLA STORIA PREMIAZIONE/PENALIZZAZIONE

Originally posted by marcooo
Io all'inizio del turno memorizzo nella tabella "turni" i valori iniziali degli abitanti e delle risorse naturali. Al termine del turno faccio il confronto con i nuovi valori raggiunti.


ma quindi tu fai una tabella turni apposta? e come la metti nello schema er?
xke x come ho fatto io nn mi serve nessuna tabella in più x calcolare i turni...

io metto un bel tasto inizio turno e un tasto x far finire il turno quindi calcolerei da li i valori d ab e di rn ma poi nn so come rimmetterli in una funzione mysql o meglio nn so come fare il trigger che li aggiorni automaticamente se li prendo da php... uff
aiutoooo

e un altra richiesta come fate x decidere che esercito vince e che esercito perde in un combattimento?


Posted by Sacratix on 23-09-2009 14:49:

Originally posted by carla86
probabilmente da qualche parte ce gia scritto...
posso in qualche modo da php richiamare le funzioni d mysql ke mi sono creata io?
se si come posso fare?
e posso mettere il risultato d questa chiamata in qualche variabile php?
grazie!!


allora, se ancora ti serve saperlo...

SELECT funzione()
opppure se ritorna più tuple
SELECT * FROM funzione()

per usarla in php poi non cambia niente
per mettere il risultato nemmeno
per accedere al risultato..

$row = mysql/pg_fetch_array(....) //solita istruzione

ma in alcuni casi che non ricordo, per leggere poi il risultato
$var = $row['<nome_della_funzione>'];
echo $var['<campo>'];


[in postgres è così, e dovrebbe essere lo stesso con mysql]

__________________
I wish for this night-time to last for a life-time


Posted by Sacratix on 23-09-2009 14:56:

Originally posted by carla86

ma quindi tu fai una tabella turni apposta? e come la metti nello schema er?
xke x come ho fatto io nn mi serve nessuna tabella in più x calcolare i turni...



puoi anche solo aggiungere i due campi alla tabella che us per gli utenti


ma poi nn so come rimmetterli in una funzione mysql o meglio nn so come fare il trigger che li aggiorni automaticamente se li prendo da php... uff


se li salvi nel database, il trigger poi va a ripigliarseli da solo
altrimenti dovresti:
quando inizia il turno, andare a calcolari e salvarli nella sessione dell'utente
quando lo finisci, darli come parametro alla funzione <fine_turno>

effettivamente non cambia molto, ma io ho trovato più comodo gestirli da dentro

__________________
I wish for this night-time to last for a life-time


Posted by Sacratix on 23-09-2009 15:08:

per gli scontri ho moltiplicato

(atk.va * atk.truppe) - (def.vd * def.truppe)

più un [-15,+15] %

è ho ragionato sul risultato:

__________________
I wish for this night-time to last for a life-time


Posted by carla86 on 23-09-2009 17:11:

Originally posted by marcooo
Anch'io ho una domanda...
Ma come avete fatto a calcolare le varie strade esistenti e i punti movimento necessari allo spostamento? Io proprio non riesco e penso che lo consegnerò così com'è... :-(


Io faccio spostare l'esercito solo d una citta se ce la strada e se ha almeno un pm.
nella sezione due delle specifiche ce scritto ke l'esercito in un turno può compiere un solo spostamento e io mi aggrappo a quello.

Grazie Sacratix! nn avevo pensato d salvarli nella sessione..
cmq anke secondo me è più comodo farli internamente.
quindi nel codice php x far eseguire una funzione mia creata in mysql basta
SELECT funzione(parametri);

un ultima cosa una vista la posso mettere in una funzione?! e invece un campo d una select lo posso calcolare cn una funzione? grazie.


Posted by Sacratix on 23-09-2009 21:14:

sì, come una query normale

ricordati però gli [']
SELECT funzione( 'par1', 'par2', ....)

__________________
I wish for this night-time to last for a life-time


Posted by R1cky` on 24-09-2009 00:49:

Originally posted by Metteus
il metodo piu elegante ma anche piu difficile è implementare l'algoritmo di dijkstra per calcolare il cammino minimo tra due citta ;)


Beh in realtà non è necessario scomodare tale algoritmo perchè essendo che il costo del cammino tra una città e l'altra è sempre 1 è suffiente fare una ricerca in ampiezza con qualche piccolo accorgimento :)


Posted by Metteus on 24-09-2009 08:16:

Originally posted by R1cky`
Beh in realtà non è necessario scomodare tale algoritmo perchè essendo che il costo del cammino tra una città e l'altra è sempre 1 è suffiente fare una ricerca in ampiezza con qualche piccolo accorgimento :)


cioè cosa intendi ?


Posted by carla86 on 24-09-2009 09:48:

ragazzi ma secondo voi il 30 fino a che ora si può consegnare?
x forza al mattino?


Posted by carla86 on 24-09-2009 10:44:

qualcuno ha usato in php
header('refresh: 30; url=pagina.php');
x fare il refresh della pagina?


Posted by Sacratix on 24-09-2009 20:01:

Originally posted by Metteus
cioè cosa intendi ?


rispondo io ^^

a noi non serve il cammino minimo, ma un cammino che che non superi un certo numero di archi (che poi sono i pm)
l'importane è che la città sia raggiungibile, all'esercito non cambia il fatto che la meta sia a distanza 1 o 30 (se i pm sono maggiori di 30 >_> )

con una semplice visita in ampiezza, ad ogni passata, mi allontano di 1 pm dalla città base, e questo basta (e avanza ma al perchè ci pensate voi :P)

__________________
I wish for this night-time to last for a life-time


Posted by Sacratix on 24-09-2009 20:04:

Originally posted by carla86
qualcuno ha usato in php
header('refresh: 30; url=pagina.php');
x fare il refresh della pagina?


iooo no, non sapevo di questa cosa
e quindi ho mischiato frameset e javascript


ancora oggi non capisco perchè il redirect in php non mi funzioni >_>
e mi tocca farlo in javascript

__________________
I wish for this night-time to last for a life-time


Posted by Metteus on 25-09-2009 10:20:

Originally posted by Sacratix
rispondo io ^^

a noi non serve il cammino minimo, ma un cammino che che non superi un certo numero di archi (che poi sono i pm)
l'importane è che la città sia raggiungibile, all'esercito non cambia il fatto che la meta sia a distanza 1 o 30 (se i pm sono maggiori di 30 >_> )

con una semplice visita in ampiezza, ad ogni passata, mi allontano di 1 pm dalla città base, e questo basta (e avanza ma al perchè ci pensate voi :P)



ok grazie !
in pratica inizializzo un contatore, e se alla fine della visita in ampiezza il cont è minore dei pm l'esercito si puo muovere ,,, giusto !


Posted by -Oblivion- on 25-09-2009 11:25:

Originally posted by carla86
qualcuno ha usato in php
header('refresh: 30; url=pagina.php');
x fare il refresh della pagina?

Si utilizzato diverse volte. Molto meglio di javascript.


Posted by carla86 on 25-09-2009 13:18:

Originally posted by -Oblivion-
Si utilizzato diverse volte. Molto meglio di javascript.


lo posso mettere dove mi pare nella pagina o lo devo mettere x forza all'inizio??
Grazie!


Posted by Sacratix on 25-09-2009 14:10:

Originally posted by Metteus
ok grazie !
in pratica inizializzo un contatore, e se alla fine della visita in ampiezza il cont è minore dei pm l'esercito si puo muovere ,,, giusto !


la fine della visita... no
non serve controllare tutto il grafo

- città trovata (ovviamente)
- contatore maggiore di pm, quindi non trovata

__________________
I wish for this night-time to last for a life-time


Posted by -Oblivion- on 25-09-2009 16:15:

Originally posted by carla86
lo posso mettere dove mi pare nella pagina o lo devo mettere x forza all'inizio??
Grazie!

Sicuramente meglio metterlo in alto, il comando deve assolutamente essere eseguito prima che la pagina inizi ad essere caricata. Se la pagina inizia il caricamento e il comando non è ancora stato eseguito dal server, viene mostrato un errore che ti dice che è troppo tardi per fare il redirect.


All times are GMT. The time now is 05:39.
Show all 56 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.