Inserire dati tabella leggendo parte di altra tabella con php

coinfeuropea

Nuovo Utente
11 Set 2017
10
0
1
57
Sámara - Costa Rica
Salve a tutti.
Scusate la mia ignoranza, pero ho la necessitá di inserire dati in una tabella dopo un inserimento in un'altra tabella.
Mi spiego meglio:

Sto cercado di crere un sistema di accesso a un sito web con regole specifiche per ogni usario,
perció ho 3 tabelle, una tabella module, una role e una role_rights.

Nella tabella module ho i dati dei menu e delle pagine, nella role i tipi di utente e nella role_rights quello che possono fare gli utenti.


Codice:
CREATE TABLE `module` (
`mod_modulegroupcode` varchar(25) NOT NULL,
`mod_modulegroupname` varchar(50) NOT NULL,
`mod_modulecode` varchar(25) NOT NULL,
`mod_modulename` varchar(50) NOT NULL,
`mod_modulegrouporder` int(3) NOT NULL,
`mod_moduleorder` int(3) NOT NULL,
`mod_modulepagename` varchar(255) NOT NULL,
`mod_type` enum('add','edit','normal') NOT NULL DEFAULT 'normal'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `module` (`mod_modulegroupcode`, `mod_modulegroupname`, `mod_modulecode`, `mod_modulename`, `mod_modulegrouporder`, `mod_moduleorder`, `mod_modulepagename`, `mod_type`) VALUES
('SITE', 'Site', 'HOME', 'Home', 1, 0, home.php', 'normal');


CREATE TABLE `role` (
`role_rolecode` varchar(50) NOT NULL,
`role_rolename` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `role` (`role_rolecode`, `role_rolename`) VALUES
('ADMIN', 'Administrator'),
('UTENTE SEMPLICE', 'Utente Semplice'),
('SUPERADMIN', 'Super Admin');

[CODE]CREATE TABLE `role_rights` (
`rr_rolecode` varchar(50) NOT NULL,
`rr_modulecode` varchar(25) NOT NULL,
`rr_create` enum('yes','no') NOT NULL DEFAULT 'no',
`rr_edit` enum('yes','no') NOT NULL DEFAULT 'no',
`rr_delete` enum('yes','no') NOT NULL DEFAULT 'no',
`rr_view` enum('yes','no') NOT NULL DEFAULT 'no',
`rr_order` enum('yes','no') NOT NULL DEFAULT 'no',
`rr_show` enum('yes','no') NOT NULL DEFAULT 'no'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `role_rights` (`rr_rolecode`, `rr_modulecode`, `rr_create`, `rr_edit`, `rr_delete`, `rr_view`, `rr_order`, `rr_show`) VALUES
('UTENTE SEMPLICE', 'HOME', 'no', 'no', 'no', 'yes', 'no', 'no'),


Necessito che quando inserisco un record nuovo in module faccia una select della role e inserisca in role_rights:

role_rights.rr_rolecode = role.role_rolecode (select role_rolecode from role)

role_rights.rr_modulecode = module.mod_modulecode (appena inserito)

questo dovrebbe inserire un record per ogni record restituito dalla select nella tabella role.

esempio:

admin - home
superadmin - home
utente semplice - home

questo è il codice que uso per inserire il module:

codice:
PHP:
 try {
  $sql = "INSERT INTO " . TBL_MODULE . " (`mod_modulecode`, `mod_modulegroupcode`, `mod_modulegroupname`, `mod_modulename`, `mod_modulegrouporder`, `mod_moduleorder`, `mod_modulepagename`, `mod_type`) VALUES :modulecode, :modulegroupcode, :modulegroupname, :modulename, :modulegrouporder, :moduleorder, :modulepagename, :type)";
      $stmt = $DB->prepare($sql);
$stmt->bindValue(":modulecode", $modulecode);
$stmt->bindValue(":modulegroupcode", $modulegroupcode);
$stmt->bindValue(":modulegroupname", $modulegroupname);
$stmt->bindValue(":modulename", $modulename);
$stmt->bindValue(":modulegrouporder", $modulegrouporder);
$stmt->bindValue(":moduleorder", $moduleorder);
$stmt->bindValue(":modulepagename", $modulepagename);
$stmt->bindValue(":type", $type);

avete una idea di come posso fare?
Grazie a tutti per leggere questo post.
 
Ultima modifica di un moderatore:

coinfeuropea

Nuovo Utente
11 Set 2017
10
0
1
57
Sámara - Costa Rica
questo è il codice que uso per inserire il module:

codice:
PHP:
 try {

  $sql = "INSERT INTO " . TBL_MODULE . " (`mod_modulecode`, `mod_modulegroupcode`, `mod_modulegroupname`, `mod_modulename`, `mod_modulegrouporder`, `mod_moduleorder`, `mod_modulepagename`, `mod_type`) VALUES :)modulecode, :modulegroupcode, :modulegroupname, :modulename, :modulegrouporder, :moduleorder, :modulepagename, :type)";

      $stmt = $DB->prepare($sql);

 
  
$stmt->bindValue(":modulecode", $modulecode);
$stmt->bindValue(":modulegroupcode", $modulegroupcode);
$stmt->bindValue(":modulegroupname", $modulegroupname);
$stmt->bindValue(":modulename", $modulename);
$stmt->bindValue(":modulegrouporder", $modulegrouporder);
$stmt->bindValue(":moduleorder", $moduleorder);
$stmt->bindValue(":modulepagename", $modulepagename);
$stmt->bindValue(":type", $type);

"filomeni, post: 194080, member: 4754"]Basta mettere le query in cascata nell'ordine di inserimento che vuoi tu...

Scusa ma non capisco cosa vuoi dire, questa é lo script che uso per caricare i dati in module, pero io devo i
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io ti aiuterei, ma vedo che utilizzi la classe pdo che non ho mai usato, sbaglierò ma non mi piace la programmazione ad oggetti e non ho voglia di impararla.
comunque ho letto quello che hai scritto
tu fai una insert sulla tabella module e sin qui ok
fai una select su role, ma in base a cosa? vuoi estrerre tutti i record della role? o solo quelli che hanno un legame con quanto hai inserito in module?
fatta la select quindi estratti i record e campi (tutti? ribadisco) vuoi inseririli (tutti?) in role_rights?
comunque se spieghi meglio posso darti una mano, ma con mysqli poi eventualmente a tradurlo per la pdo ci pensi tu
 

coinfeuropea

Nuovo Utente
11 Set 2017
10
0
1
57
Sámara - Costa Rica
Ciao Borgo Italia,
grazie per rispondermi.
praticamente la tabella role é la lista degli utenti:
admin
superadmin
utente semplice
franco
pippo
minni
ect.

e il campo que necessito è role_rolecode

per tanto bisogna fare un select role_rolecode from role, pero essendo vari, non so' come inserire nella tabella role_rights
il risultato del loop while.

Necessito che quando inserisco un record nuovo in module faccia una select della role e inserisca in role_rights:

role_rights.rr_rolecode = role.role_rolecode (select role_rolecode from role)

role_rights.rr_modulecode = module.mod_modulecode (appena inserito)

questo dovrebbe inserire un record per ogni record restituito dalla select nella tabella role.

esempio:

admin - home
superadmin - home
utente semplice - home
.........

o

admin - prodotti
superadmin - prodotti
utente semplice - prodotti
.........

gli altri campi della tabella role_rights sono i permessi, pertanto quando inserisco essendo tutti default NO non ho bisogno di inserirli nel insert, in seguito li modifico in base alla pagina e al utente.
Spero di essere stato un po piu chiaro. :)
e ancora grazie per la disponibilitá
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusa se non mi sono fatto sentire, ma come detto ho delle giornate impegnative.
dovrei liberarmi per fine settimana.
se non hai risolto riprendo il discorso dall'inizio e spero di saperti dire
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
riprendiamo il problema dall'inizio (col tempo ho perso il filo) esaminando le tabelle, su cui mi viene un dubbio: non c'è la chiave primaria (generalmente autoincrement)? se non hai la chiave primaria come fai a distinguere un record dall'altro?
poi ancora, scusa, ma non riesco a capire esattamente cosa vuoi fare.
prendiamo le tabelle
tabella module
Codice:
mod_modulegroupcode varchar(25) NOT NULL,
... ecc ....
mod_type enum('add','edit','normal') NOT NULL DEFAULT 'normal'
tabella role
Codice:
role_rolecode varchar(50) NOT NULL,
role_rolename varchar(50) NOT NULL
tabella role_rights
Codice:
rr_rolecode varchar(50) NOT NULL,
... ecc ...
rr_show enum('yes','no') NOT NULL DEFAULT 'no'
tu fai l'insert in tabella module e sin qui, a parte la primarykey, ok.
ora dici che vuoi fare una select su role, da quello che capisco la role dovrebbe contenere, immagino che tu abbia un solo ADMIN e SUPER ADMIN ma diversi UTENTI SEMPLICI, in questo caso come detto manca l'id del record
Codice:
role_rolecode    role_rolename
ADMIM            Franco
SUPERADMIN        Giuseppe
UTENTE SEMPLICE    Asdrubale
UTENTE SEMPLICE    Sofonisba
UTENTE SEMPLICE    Arcibaldo
è così?
ora dici che vuoi estrarre e inserire i valori in role_rights, ribadisco ma cosa vuoi estrarre? quale record e quale campo/i?
e qui un'altro dubbio
da quello che capisco in role_rights c'è cosa un utente può fare cioè es. il super può fare tutto mentre il semplice può solo vedere (giusto?), se è solo questo a che ti serve estrarre da role? se invece la tabella deve indicare cosa può fare Sofonisba non vedo un legame tra le tabelle.
i due casi sono completamente diversi
nel primo caso la role_rights avrà (considernado l'esempio)
solo tre record es.
Codice:
rr_rolecode    rr_modulecode    rr_create    rr_edit    rr_delete    rr_view enum    rr_order    rr_show enum
ADMIN        ??                no            yes        no            yes                yes            yes
SUPER        ??                yes            yes        yes            yes                yes            yes
SEMPLICE    ??                no            no        no            no                no            no
nel secondo, come detto, manca il legame tra le tabelle
quiundi devi spiegare meglio quello che vuoi fare

comunque un appunto: non conosco il tuo livello di conoscenza, ma ricorda che quando si lavora con i db la parte più difficile (ed importante) non sono i vari script ma organizzare bene la sua struttura, tra l'altro una volta finito è molto più semplice andare a correggere/modificare gli script che la struttura del db
 

coinfeuropea

Nuovo Utente
11 Set 2017
10
0
1
57
Sámara - Costa Rica
Ciao,
grazie per la risposta, ti spiego bene.
l'id del record non mi serve perche è il primo campo.

Non esistono:
ADMIM Franco
SUPERADMIN Giuseppe
UTENTE SEMPLICE Asdrubale
UTENTE SEMPLICE Sofonisba
UTENTE SEMPLICE Arcibaldo

esistono:

ADMIM Nome Cognome
SUPERADMIN Nome Cognome
Asdrubale Nome Cognome
Sofonisba Nome Cognome
Arcibaldo Nome Cognome

ogni utente (role_rolecode della tabella role) deve avere un suo record per ogni role_rights di cada pagina:
Codice:
rr_rolecode    rr_modulecode    rr_create    rr_edit    rr_delete    rr_view enum    rr_order    rr_show enum
ADMIN                ??                no            yes        no            yes                yes            yes
SUPER                 ??                yes            yes        yes            yes                yes            yes
asdrubale             ??                no            no        no            no                no            no
Arcibaldo             ??                no            no        no            no                no            no
sofonidba             ??                no            yes        no            yes                yes            yes

Dove ?? è module.mod_modulecode (appena inserito nella tabell module)

Praticamente devo fare una select di role dopo aver inserito nella tabella module, prendendo solo il campo role.role_rolecode que è unico, e inserire nella tabella role_rights i seguenti risultati:

role_rights.rr_rolecode = role.role_rolecode (select role_rolecode from role)

role_rights.rr_modulecode = module.mod_modulecode (appena inserito)

per quanto riguarda gli altri campi nella tabella role_rights (rr_create rr_edit rr_delete rr_view enum rr_order rr_show enum) sono tutti di default NO.
Spero essermi spiegato bene, perche è un poco incasinato...
E grazie ancora
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
attento non vuol dire nulla che sia il primo campo, l'importante è avere una primarykey (non è importante che sia numerica anche se è più comodo), se fai così nella tabella role corri il rischio di trovarti esempio in questa situazione
ADMIM Nome Cognome
SUPERADMIN Nome Cognome
Asdrubale Nome Cognome
Sofonisba Nome Cognome
Arcibaldo Nome Cognome
Asdrubale Nome Cognome
il tutto senza contare che senza tale prymary non potrai fare collegamenti tra le tabelle.
poi dici di fare uan select di role dove affermi che il campo è unico, cosa intendi? che gli hai dato il paramtro unique? non lo vedo nella struttura della tabella

ipotizziamo di fare una select di role
PHP:
$query="SELECT role_rolecode FROM role";
$ris=mysqli_query($conn, $query);
tale select se non fai il while per estrarre
PHP:
$stratto=mysql_fetch_assoc($ris);
in $estratto ti ritrovi sempre ADMIN, al che a che ti serve estrare da role?
se usi il while estrai tutti i campi role_rolecode
PHP:
while($riga=mysqli_fetch_assoc($ris)){
    //usiamo un array per conservali
    $estratto[]=$riga['role_rolecod'];
}
in questo caso ti ritrovi
$estratto[0] -> ADMIN
$estratto[1] -> SUPERADMIN
$estratto[2] -> Asdrubale
$estratto[3] -> Sofonisba
$estratto[4] -> Arcibaldo
e se hai fatto l'errore citato ti ritrovi anche
$estratto[5] -> Asdrubale
ora quele di questi campi ti serve?

per fare quelcosa di logico la query di prima per estrarre un campo determinato dovrebbe essere
PHP:
$query="SELECT role_rolecode FROM role WHERE role_rolecode=$qualcosa";
dove $qualcosa deve contenere un valore tra quelli che hai usato per fare l'insert in mod_modulegroupcode, ma io non vedo quale potrebbe essere

mi sbaglierò, ma secondo stai facendo un po' di confusione, salvo che non sia io a continuare a non capire il problema
 

coinfeuropea

Nuovo Utente
11 Set 2017
10
0
1
57
Sámara - Costa Rica
Ciao, Grazie per la risposta.
si, mi sono spiegato male, Il campo della tabella role_rolecode é chiave primaria e percio non esiste duplicato.
Quello que ho bisogno è appunto di fare una select di tutti i valori role_rolecode della tabella role e inserire i risultati nella tabella role_rights e il valore appena ottenuto dal $_POST cioé $modulecode

praticamente devo inserire qualcosa come:

ADMIM, contatti
SUPERADMIN , contatti
Asdrubale , contatti
Sofonisba, contatti
Arcibaldo , contatti

dove contatti è il post $modulecode
forse cosí è un poc piu chiaro, scusa.
 
Discussioni simili
Autore Titolo Forum Risposte Data
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
M inserire i dati ottenuti da una jquery in una tabella già esistente jQuery 1
M creare una tabella dove inserire i dati del database Database 1
F Inserire tanti dati in una tabella MySQL 2
C Inserire dei dati di una tabella dinamica in un file esterno js Javascript 17
nim inserire dati in tabella con ajax (ciclo foreach) Ajax 10
M inserire da remoto dati in una tabella PHP 21
D [Access] Come inserire i dati in una tabella secondaria? MS Access 0
I inserire dati in tabella in base all'if PHP 11
L Inserire dati in una tabella PHP 6
C Sql per inserire dati in una tabella Classic ASP 1
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
L inserire dati multi livello PHP 8
G inserire dati automaticamente in mysql PHP 0
Monital [Javascript] inserire dati estratti dal db in html fisso Javascript 1
spider81man Connettersi ad un DB ed inserire dati con Javascript Javascript 3
A [ASP] Inserire dati in un database Classic ASP 1
B INSERIRE DATI CON IMMAGINE DA FORM IN MYSQL MySQL 7
B Inserire dati su DB da mail Classic ASP 6
C Inserire i dati in un vettore senza ammettere duplicati C/C++ 0
C Inserire dati da input PHP 5
M Inserire nel DB i dati provenienti da checkbox e recuperarli poi dal DB per la pagina di edit PHP 20
F [RISOLTO]inserire dati nel database jQuery 14
C Pagina HTM connessa al DB access (non è possibile modificare/inserire dati) MS Access 0
M Semplice pagina per inserire/leggere dati su database PHP 5
Emix Inserire Array di dati in database.... PHP 21
L classe per inserire dati al database PHP 2
N Inserire dati in un database Mysql PHP 6
asevenx inserire dati da form con nome variabile PHP 0
T inserire un url su dati richiamati da mysql PHP 4
T Inserire i dati da un .txt ad un database PHP 1
D php e maschera per inserire dati in mysql PHP 4
I Inserire più dati in database PHP 43
I Inserire dati in database PHP 7
E inserire dati del DB nel sito PHP 5
D Inserire su un file alcuni dati presi da vari form PHP 2
M Aiuto come inserire dati tramite php? PHP 1
A Inserire in una pagina dei dati presi da una popup Javascript 3
§ inserire dati in form già fatti PHP 20
Elisacau [Contact form 7] Inserire Numero auto incrementante WordPress 1
gara1 inserire immagine di sfondo in canvas Javascript 0
FDF182 Inserire pdf in db PHP 3
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
D Inserire link PHP 0
P inserire due voci in un titolo post wp WordPress 1
R inserire video nel sito HTML e CSS 15
J Inserire blog wordpress in angular CMS (Content Management System) 0
A inserire variabile php colore in div html PHP 2
G Inserire una scritta Java 1
M Inserire variabile nella value di una hidden PHP 3

Discussioni simili