Repository 32bit  Forum
Repository 64bit  Wiki

Aiuto relazione database

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: Aiuto relazione database

Messaggioda lablinux » mer ott 17, 2012 17:38

php non lo conosco benissimo, in un progetto testavo, prima di ogni azione la pagina in cui si trovava e se l'utente era abilitato. Ma nel mio caso era più semplice, bastava loggarsi e avevi accesso a tutto.

-> brevemente:
se non si è sulla pagina di login e neppure quella di errore
se l'utente non è loggato (!ABILITATO) vado alla pagina di login, altrimenti proseguo.
Codice: Seleziona tutto
// se non c'� user o password , chiamo la pagina di login (a meno che non sia gi� la pagina di login)
if ( $_SERVER['SCRIPT_NAME'] != $URL_PATH. 'login.php' and $_SERVER['SCRIPT_NAME'] != $URL_PATH. 'errore.php') {
   if(!isset($_COOKIE['ABILITATO']) ){
      header('location: ' . $URL_PATH .  'login.php');
   }else{
      //  Nella home page visiualizzo l'elenco delle richieste inserite
      require_once $LVL_PATH . 'include/cls_utente.php';
      $dataDB = new DB_SCORPORI($_COOKIE['AMB_DB2']);
   }
}



Nel tuo caso la seconda if la dovresti fare più complicata. Mettendo in join (con una and) il ruolo e la pagina che stai per visualizzare.
Opure la potresti fare più sporca, se usi il giochino dei ruoli (non è per adulti), classifichi le pagine in base al ruolo (magari in un array) e se coincide la chiave prosegui altrimenti ciccia.
Codice: Seleziona tutto
$array = array(
    "pagina1" => array(1,2,3),
    "pagina2" => array(1,3)
);
Avatar utente
lablinux
Linux 2.6
Linux 2.6
 
Messaggi: 752
Iscritto il: gio nov 27, 2008 12:23
Località: Rho
Slackware: 14 64bit
Desktop: kde4

Re: Aiuto relazione database

Messaggioda darkstaring » mer ott 17, 2012 22:24

non ho capito molto a dir la verità..
comunque io in admin ho un'intero che parte da 0 a 9... 0 sta per il superadmin,1 sede, 2 dipendente..
lablinux ha scritto:Nel tuo caso la seconda if la dovresti fare più complicata. Mettendo in join (con una and) il ruolo e la pagina che stai per visualizzare.
Opure la potresti fare più sporca, se usi il giochino dei ruoli (non è per adulti), classifichi le pagine in base al ruolo (magari in un array) e se coincide la chiave prosegui altrimenti ciccia.
Codice: Seleziona tutto
$array = array(
    "pagina1" => array(1,2,3),
    "pagina2" => array(1,3)
);

io pensavo ad un (SE admin > 0 ) vai fuori se per esempio quella risorsa deve essere vista solo dall'admin....
ho organizzato il sito in directory, per esempio appuntamenti, report ecc... io verifico se il percorso (quella directory) del file in esecuzione è autorizzato da quell'utente...

Mi è venuto in mente così dal niente... :)
Ancora non conoscevo la funzione
header("location: http://....);
grazie
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 364
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

Re: Aiuto relazione database

Messaggioda lablinux » gio ott 18, 2012 8:13

si si, l'idea è quella, la mia era una possibile soluzione. Un censimento univoco di tutte le pagine ( "pagina1", "pagina2") con i ruoli ( array(1,2,) ).
Oppure inserisci all'interno di ogni pagina i codici (0,1,2,...9) di chi può accedere alla risorsa.
Vedi tu, ci sono N soluzioni al problema. Scegli quella che ti piace o che ti sembra migliore.
Avatar utente
lablinux
Linux 2.6
Linux 2.6
 
Messaggi: 752
Iscritto il: gio nov 27, 2008 12:23
Località: Rho
Slackware: 14 64bit
Desktop: kde4

Re: Aiuto relazione database

Messaggioda darkstaring » gio ott 18, 2012 14:33

Chiedo un'altra cosa.. :o

In pratica vorrei che una tabella che contiene 2 chiavi esterne ed una chiave primaria
potesse avere la possibilità di non avere record "doppi"... pensavo ad unique ma è la coppia dei valori a non doversi ripetere..
Quindi credo che debbo creare una chiave composta ed usare quella come chiave primaria...
Sbaglio??? sapete anche aiutarmi a crearla???
questo è il dump della tabella alla situazione attuale:
Codice: Seleziona tutto
CREATE TABLE `dip_sedi` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_dip` int(11) NOT NULL,
  `id_sede` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_dip` (`id_dip`),
  KEY `id_sede` (`id_sede`),
  CONSTRAINT `dip_sedi_ibfk_1` FOREIGN KEY (`id_dip`) REFERENCES `dipendenti` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `dip_sedi_ibfk_2` FOREIGN KEY (`id_sede`) REFERENCES `sedi` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

in pratica vorrei impedire di scrivere un record se la coppia (id_dip e id_sede) è già presente..
Sono stato comprensibile?
Grazie
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 364
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

Re: Aiuto relazione database

Messaggioda lablinux » gio ott 18, 2012 16:03

prova a sostituire
Codice: Seleziona tutto
KEY `id_dip` (`id_dip`),
KEY `id_sede` (`id_sede`),


(oppure aggiungi)

Codice: Seleziona tutto
KEY `id_dip_set` (`id_dip`, 'id_sede')


Poi, se funziona, aggiungi il parametro unique.
Avatar utente
lablinux
Linux 2.6
Linux 2.6
 
Messaggi: 752
Iscritto il: gio nov 27, 2008 12:23
Località: Rho
Slackware: 14 64bit
Desktop: kde4

Re: Aiuto relazione database

Messaggioda kreen » gio ott 18, 2012 19:50

Ciao. credi bene.

darkstaring ha scritto:n pratica vorrei che una tabella che contiene 2 chiavi esterne ed una chiave primaria
potesse avere la possibilità di non avere record "doppi"... pensavo ad unique ma è la coppia dei valori a non doversi ripetere..
Quindi credo che debbo creare una chiave composta ed usare quella come chiave primaria...


Se ho letto bene lo schema, la cardinalità della relazione sedi e dipendenti è molti a molti. Hai commesso un errore in dip_sedi mettendo come chiave primaria id.
Togli id e metti come chiave primaria id_dip e id_sede. :thumbright:
Avatar utente
kreen
Linux 2.4
Linux 2.4
 
Messaggi: 228
Iscritto il: mer feb 01, 2006 18:32
Località: Verona
Slackware: 12.0
Kernel: 2.6.21.5-smp
Desktop: KDE

Re: Aiuto relazione database

Messaggioda kreen » gio ott 18, 2012 20:28

Dimenticavo, scusa
id_dip int(11) references dipendenti(id),
id_sede int(11) references sedi(id),
PRIMARY KEY (id_dip,id_sede)....

Una curiosità: perché quel NO ACTION in caso di cancellazione di record dalla tabella Master? Non sono contemplate eliminazioni di personale nell'azienda (faccio subito domanda, allora \:D/ )?
Avatar utente
kreen
Linux 2.4
Linux 2.4
 
Messaggi: 228
Iscritto il: mer feb 01, 2006 18:32
Località: Verona
Slackware: 12.0
Kernel: 2.6.21.5-smp
Desktop: KDE

Re: Aiuto relazione database

Messaggioda darkstaring » gio ott 18, 2012 22:50

Ho modificato la tabella così:
Codice: Seleziona tutto
mysql> describe dip_sedi;
+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) | NO   | UNI | NULL    | auto_increment |
| id_dip  | int(11) | NO   | PRI | NULL    |                |
| id_sede | int(11) | NO   | PRI | NULL    |                |
+---------+---------+------+-----+---------+----------------+

kreen ha scritto:Una curiosità: perché quel NO ACTION in caso di cancellazione di record dalla tabella Master? Non sono contemplate eliminazioni di personale nell'azienda (faccio subito domanda, allora \:D/ )?

Grazie.. credo che hai perfettamente ragione riguardo il no-action in caso di eliminazione...
Lasciando così, nel caso una sede venga eliminata rimangono le associazioni in dipendenti e viceversa... Grazie dell'osservazione :D
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 364
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

Re: Aiuto relazione database

Messaggioda darkstaring » gio ott 18, 2012 22:59

darkstaring ha scritto:Direi di si... Anche io adesso sono arrivato a questa conclusione....nessuna relazione da utenti, ma solo un controllo al momento del login.

Tornando alla tabella utenti per un'attimo mi sono reso conto che non avere un'associazione è grave! :)
Se per esempio un dipendente viene eliminato il suo utente rimane... stesso discorso per le sedi...
Domani vedrò di darle uno sguardo anche a questo..
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 364
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

Re: Aiuto relazione database

Messaggioda kreen » ven ott 19, 2012 6:56

Ciao,
non vorrei essere pedante, mi scuso.
Non capisco perché mantieni l'attributo id nella relazione. Non ha nessuna utilità e consuma risorse.
Tieni conto che il dbms crea automaticamente gli indici per la chiave primaria e quindi un campo id non solo crea una ridondanza, ma in questo caso di cardinalità è concettualmente sbagliato.

Ma non i sento di insistere ulteriormente.
Avatar utente
kreen
Linux 2.4
Linux 2.4
 
Messaggi: 228
Iscritto il: mer feb 01, 2006 18:32
Località: Verona
Slackware: 12.0
Kernel: 2.6.21.5-smp
Desktop: KDE

Re: Aiuto relazione database

Messaggioda lablinux » ven ott 19, 2012 7:59

Forse ti posso riposndere io. In caso di utilizzo di un framework che si appoggioa ad un ORM (Django, Rails, CakePHP, Symphony) è indispensabile un campo autoincrementale.
In oltre considera che se è autoincrementale in caso di insert non devi neppure considerare il campo.
Aggiungo, che non è detto che aumenti lo spazio, dipende con quante altre tabelle è legata la tabella con il campo id. Se ha più di un legame, devi riportare solo un campo sulle collegate al posto di due.
Avatar utente
lablinux
Linux 2.6
Linux 2.6
 
Messaggi: 752
Iscritto il: gio nov 27, 2008 12:23
Località: Rho
Slackware: 14 64bit
Desktop: kde4

Re: Aiuto relazione database

Messaggioda kreen » ven ott 19, 2012 8:21

lablinux ha scritto:Forse ti posso riposndere io. In caso di utilizzo di un framework che si appoggioa ad un ORM (Django, Rails, CakePHP, Symphony) è indispensabile un campo autoincrementale.
In oltre considera che se è autoincrementale in caso di insert non devi neppure considerare il campo.


Ah, grazie. Questo non lo sapevo. Io non ho mai esplorato il paradigma ad oggetti nei DBMS. Sono fermo alla vecchia scuola :)

lablinux ha scritto:Aggiungo, che non è detto che aumenti lo spazio, dipende con quante altre tabelle è legata la tabella con il campo id. Se ha più di un legame, devi riportare solo un campo sulle collegate al posto di due.


Vero, riguardo lo spazio hai perfettamente ragione. :-k
Avatar utente
kreen
Linux 2.4
Linux 2.4
 
Messaggi: 228
Iscritto il: mer feb 01, 2006 18:32
Località: Verona
Slackware: 12.0
Kernel: 2.6.21.5-smp
Desktop: KDE

Re: Aiuto relazione database

Messaggioda darkstaring » lun ott 22, 2012 8:26

A proposito di spazio consumato, ho una tabella che contiene date, il problema è che ho una data di partenza ed una di fine..
Attualmente chiedo le 2 date e scrivo dentro la tabella mediante un ciclo for scrivendo tutte le date, da quella di partenza a quella di arrivo creando così un sacco di dati.

Vorrei modificare mettendo 2 campi con appunto la data di partenza e quella di fine ma poi posso sapere tutti i record presenti dato un giorno?
Grazie
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 364
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

Re: Aiuto relazione database

Messaggioda lablinux » lun ott 22, 2012 8:50

Non ho capito il problema, ma trattandosi di un altro argomento, e quello sulle relazioni sembra risolto, ti chiederei di aprire una nuova discussione.
Cosi facendo rendi più semplice una ricerca a chi ha un problema simile al tuo.
Avatar utente
lablinux
Linux 2.6
Linux 2.6
 
Messaggi: 752
Iscritto il: gio nov 27, 2008 12:23
Località: Rho
Slackware: 14 64bit
Desktop: kde4

Re: Aiuto relazione database

Messaggioda darkstaring » lun ott 22, 2012 9:05

Volevo evitare di aprire più topic.. ma va bene.. grazie
darkstaring
Linux 2.4
Linux 2.4
 
Messaggi: 364
Iscritto il: mer ott 13, 2010 12:55
Slackware: Current
Desktop: xfce

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite