Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 266b8d4

Browse files
php mysql website
0 parents commit 266b8d4

24 files changed

+9490
-0
lines changed

‎README.md‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
# PHP + MySQL Website Example
3+
4+
5+
6+
## Config project
7+
8+
* Edit `web/config.php` with your database details
9+
```php
10+
$db_host = "localhost";
11+
$db_user = "username";
12+
$db_pass = "password";
13+
$db_name = "database";
14+
```
15+
16+
* Place `web/` folder in your _apache_ server
17+
18+
* Init database with `init/tables.sql`
19+
```ssh
20+
$ mysql -h hostname -u username -ppassword
21+
use database;
22+
mysql> source tables.sql;
23+
```
24+
25+
26+
## Run project
27+
28+
* Insert example data in database (`init/insert_data.sql`)
29+
```ssh
30+
$ mysql -h hostname -u username -ppassword
31+
mysql> use database;
32+
mysql> source insert_data.sql;
33+
```
34+
35+
* Browse to `http://hostname/index.php`
36+
37+

‎init/insert_data.sql‎

Lines changed: 6437 additions & 0 deletions
Large diffs are not rendered by default.

‎init/tables.sql‎

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
CREATE TABLE IF NOT EXISTS utilizador (
2+
userid INT NOT NULL AUTO_INCREMENT,
3+
email VARCHAR(255) NOT NULL,
4+
nome VARCHAR(255) NOT NULL,
5+
password VARCHAR(255) NOT NULL,
6+
questao1 VARCHAR(255) NOT NULL,
7+
resposta1 VARCHAR(255) NOT NULL,
8+
questao2 VARCHAR(255),
9+
resposta2 VARCHAR(255),
10+
pais VARCHAR(45) NOT NULL,
11+
categoria VARCHAR(45) NOT NULL,
12+
PRIMARY KEY (userid),
13+
UNIQUE INDEX email_UNIQUE (email)
14+
);
15+
16+
CREATE TABLE IF NOT EXISTS login (
17+
contador_login INT NOT NULL AUTO_INCREMENT,
18+
userid INT NOT NULL,
19+
sucesso TINYINT(1) NOT NULL,
20+
moment TIMESTAMP NOT NULL,
21+
PRIMARY KEY (contador_login),
22+
FOREIGN KEY (userid) REFERENCES utilizador (userid) ON DELETE CASCADE
23+
ON UPDATE CASCADE
24+
);
25+
26+
CREATE TABLE IF NOT EXISTS sequencia (
27+
contador_sequencia INT NOT NULL AUTO_INCREMENT,
28+
moment TIMESTAMP NOT NULL,
29+
userid INT NOT NULL,
30+
PRIMARY KEY (contador_sequencia),
31+
FOREIGN KEY (userid) REFERENCES utilizador (userid) ON DELETE CASCADE
32+
ON UPDATE CASCADE
33+
);
34+
35+
CREATE TABLE IF NOT EXISTS tipo_registo (
36+
userid INT NOT NULL,
37+
typecnt INT NOT NULL,
38+
nome MEDIUMTEXT NOT NULL,
39+
ativo TINYINT(1) NOT NULL,
40+
idseq INT NULL,
41+
ptypecnt INT,
42+
PRIMARY KEY (userid, typecnt),
43+
FOREIGN KEY (userid) REFERENCES utilizador (userid) ON DELETE CASCADE
44+
ON UPDATE CASCADE,
45+
FOREIGN KEY (userid, ptypecnt) REFERENCES tipo_registo (userid, typecnt),
46+
FOREIGN KEY (idseq) REFERENCES sequencia (contador_sequencia)
47+
);
48+
49+
CREATE TABLE IF NOT EXISTS registo (
50+
userid INT NOT NULL,
51+
typecounter INT NOT NULL,
52+
regcounter INT NOT NULL,
53+
nome VARCHAR(1024),
54+
ativo TINYINT(1),
55+
idseq INT NULL,
56+
pregcounter INT,
57+
PRIMARY KEY (userid, regcounter, typecounter),
58+
FOREIGN KEY (idseq) REFERENCES sequencia (contador_sequencia),
59+
FOREIGN KEY (userid , typecounter) REFERENCES tipo_registo (userid , typecnt),
60+
FOREIGN KEY (userid, pregcounter, typecounter)
61+
REFERENCES registo (userid, regcounter, typecounter)
62+
);
63+
64+
CREATE TABLE IF NOT EXISTS pagina (
65+
userid INT NOT NULL,
66+
pagecounter INT NOT NULL,
67+
nome VARCHAR(1024) NOT NULL,
68+
idseq INT NOT NULL,
69+
ativa TINYINT(1) NOT NULL,
70+
ppagecounter INT NULL,
71+
PRIMARY KEY (userid, pagecounter) ,
72+
FOREIGN KEY (userid) REFERENCES utilizador (userid) ON DELETE CASCADE ON UPDATE CASCADE,
73+
FOREIGN KEY (idseq) REFERENCES sequencia (contador_sequencia),
74+
FOREIGN KEY (userid, ppagecounter) REFERENCES pagina (userid, pagecounter)
75+
);
76+
77+
CREATE TABLE IF NOT EXISTS campo (
78+
userid INT NOT NULL,
79+
typecnt INT NOT NULL,
80+
campocnt INT NOT NULL,
81+
idseq INT NOT NULL,
82+
ativo TINYINT(1) NOT NULL,
83+
nome VARCHAR(1024) NOT NULL,
84+
pcampocnt INT,
85+
PRIMARY KEY (userid, typecnt, campocnt) ,
86+
FOREIGN KEY (userid , typecnt) REFERENCES tipo_registo (userid , typecnt)
87+
ON DELETE CASCADE ON UPDATE CASCADE,
88+
FOREIGN KEY (idseq) REFERENCES sequencia (contador_sequencia),
89+
FOREIGN KEY (userid, typecnt, pcampocnt) REFERENCES campo (userid, typecnt, campocnt)
90+
);
91+
92+
CREATE TABLE IF NOT EXISTS valor (
93+
userid INT NOT NULL,
94+
typeid INT NOT NULL,
95+
regid INT NOT NULL,
96+
campoid INT NOT NULL,
97+
valor LONGTEXT NULL,
98+
idseq INT NOT NULL,
99+
ativo TINYINT(1) NOT NULL,
100+
pcampoid INT,
101+
PRIMARY KEY (userid, regid, typeid, campoid) ,
102+
FOREIGN KEY (userid,typeid, campoid) REFERENCES campo (userid, typecnt , campocnt)
103+
ON DELETE CASCADE ON UPDATE CASCADE,
104+
FOREIGN KEY (userid, regid, typeid) REFERENCES registo (userid , regcounter,typecounter)
105+
ON DELETE CASCADE ON UPDATE CASCADE,
106+
FOREIGN KEY (idseq) REFERENCES sequencia (contador_sequencia),
107+
FOREIGN KEY (userid, regid, typeid, pcampoid) REFERENCES valor (userid, regid, typeid, campoid)
108+
);
109+
110+
CREATE TABLE IF NOT EXISTS reg_pag(
111+
idregpag INT NOT NULL AUTO_INCREMENT,
112+
userid INT NOT NULL,
113+
pageid INT NOT NULL,
114+
typeid INT NOT NULL,
115+
regid INT NOT NULL,
116+
idseq INT NOT NULL,
117+
ativa TINYINT(1) NOT NULL,
118+
pidregpag INT,
119+
PRIMARY KEY (idregpag),
120+
FOREIGN KEY (userid ,pageid) REFERENCES pagina (userid,pagecounter)
121+
ON DELETE CASCADE ON UPDATE CASCADE,
122+
FOREIGN KEY (userid, regid, typeid) REFERENCES registo (userid, regcounter, typecounter)
123+
ON DELETE CASCADE ON UPDATE CASCADE,
124+
FOREIGN KEY (idseq) REFERENCES sequencia (contador_sequencia),
125+
FOREIGN KEY (pidregpag) REFERENCES reg_pag (idregpag)
126+
);
127+
128+
129+
130+
131+

‎sql/index.sql‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
2+
# query alinea a)
3+
4+
SELECT AVG(quantos) q, userid FROM (
5+
SELECT COUNT(X.regid) quantos, P.pagecounter, P.userid FROM
6+
(SELECT * FROM pagina P2 WHERE P2.ativa=1) P LEFT OUTER JOIN ( SELECT * FROM
7+
(SELECT typeid as rptypeid,pageid,regid,ativa as rpativa FROM reg_pag RP2
8+
WHERE RP2.ativa=1) RP,
9+
(SELECT regcounter,userid,ativo as rativo FROM registo R2 WHERE R2.ativo=1) R,
10+
(SELECT typecnt,ativo as tativo FROM tipo_registo T2 WHERE T2.ativo=1) T
11+
WHERE RP.regid=R.regcounter AND RP.rptypeid=T.typecnt
12+
) X ON P.pagecounter=X.pageid
13+
GROUP BY P.pagecounter
14+
) a GROUP BY userid;
15+
16+
# indices
17+
18+
CREATE INDEX RegIndex ON
19+
registo(regcounter,ativo)
20+
USING BTREE;
21+
22+
CREATE INDEX RegPagIndex ON
23+
reg_pag(regid,pageid,ativa)
24+
USING BTREE;
25+
26+
CREATE INDEX PagIndex ON
27+
pagina(pagecounter,ativa)
28+
USING BTREE;
29+
30+
CREATE INDEX TipoIndex ON
31+
tipo_registo(typecnt,ativo)
32+
USING BTREE;
33+
34+
35+
36+
37+
38+
39+
# query alinea b)
40+
41+
SELECT P.userid, P.nome AS pagina, R.nome AS registo FROM registo R, reg_pag RP, pagina P, tipo_registo T
42+
WHERE RP.pageid=P.pagecounter AND RP.userid=P.userid AND R.regcounter=RP.regid AND R.userid=RP.userid AND R.typecounter=T.typecnt AND R.userid=T.userid AND R.ativo=1 AND RP.ativa=1 AND T.ativo=1 AND P.ativa=1
43+
#AND P.userid= AND P.pagecounter=;
44+
GROUP BY P.userid, P.pagecounter;
45+
46+
# indices
47+
48+
CREATE INDEX RegIndex ON
49+
registo(regcounter,ativo)
50+
USING BTREE;
51+
52+
CREATE INDEX RegNomeIndex ON
53+
registo(regcounter,nome)
54+
USING BTREE;
55+
56+
CREATE INDEX RegTypeIndex ON
57+
registo(regcounter,typecounter)
58+
USING BTREE;
59+
60+
CREATE INDEX RegPagIndex ON
61+
reg_pag(regid,pageid,ativa)
62+
USING BTREE;
63+
64+
CREATE INDEX PagIndex ON
65+
pagina(pagecounter,ativa)
66+
USING BTREE;
67+
68+
CREATE INDEX TipoIndex ON
69+
tipo_registo(typecnt,ativo)
70+
USING BTREE;

‎sql/parte1.sql‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* Pergunta 1 */
2+
SELECT nome FROM Tipos WHERE email='Manuel@notebook.pt';
3+
4+
5+
/* Pergunta 2 */
6+
SELECT DISTINCT email FROM Historico WHERE accao='login_fail';
7+
8+
9+
/* Pergunta 3 */
10+
SELECT nascimento FROM Utilizadores WHERE email IN
11+
(
12+
SELECT email FROM
13+
(
14+
SELECT * FROM Registos WHERE nome="facebook"
15+
INTERSECT
16+
SELECT * FROM Paginas WHERE nome="facebook"
17+
)
18+
);

‎sql/parte2.sql‎

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
#SECCAO2
3+
4+
#alinea a)
5+
SELECT userid FROM utilizador U WHERE
6+
(SELECT COUNT(*) FROM login WHERE sucesso=0 AND userid=U.userid)
7+
>
8+
(SELECT COUNT(*) FROM login WHERE sucesso=1 AND userid=U.userid)
9+
10+
11+
#alinea b)
12+
SELECT a.regid, a.userid FROM (
13+
SELECT COUNT(P.pagecounter) rpaginas, P.userid, P.pagecounter, RP.regid
14+
FROM pagina P LEFT OUTER JOIN reg_pag RP ON P.userid=RP.userid AND P.pagecounter=RP.pageid
15+
WHERE P.ativa=1 AND RP.ativa=1
16+
GROUP BY RP.regid
17+
) a, (
18+
SELECT COUNT(P.pagecounter) as upaginas, P.userid
19+
FROM pagina P WHERE P.ativa=1 GROUP BY P.userid
20+
) b, registo R, tipo_registo T
21+
WHERE a.userid=b.userid AND R.regcounter=a.regid AND R.typecounter=T.typecnt AND R.userid=T.userid
22+
AND rpaginas=upaginas AND R.ativo=1 AND T.ativo=1
23+
24+
25+
#alinea c)
26+
DROP TEMPORARY TABLE IF EXISTS media1,media2;
27+
CREATE TEMPORARY TABLE media1 AS (
28+
SELECT AVG(quantos) q, userid FROM (
29+
SELECT COUNT(X.regid) quantos, P.pagecounter, P.userid FROM
30+
(SELECT * FROM pagina P2 WHERE P2.ativa=1) P LEFT OUTER JOIN ( SELECT * FROM
31+
(SELECT typeid as rptypeid,pageid,regid,ativa as rpativa FROM reg_pag RP2 WHERE RP2.ativa=1) RP,
32+
(SELECT regcounter,userid,ativo as rativo FROM registo R2 WHERE R2.ativo=1) R,
33+
(SELECT typecnt,ativo as tativo FROM tipo_registo T2 WHERE T2.ativo=1) T
34+
WHERE RP.regid=R.regcounter AND RP.rptypeid=T.typecnt
35+
) X ON P.pagecounter=X.pageid
36+
GROUP BY P.pagecounter
37+
) a GROUP BY userid
38+
);
39+
CREATE TEMPORARY TABLE media2 AS (SELECT * FROM media1);
40+
SELECT userid FROM media1 WHERE q=(SELECT max(q) FROM media2);
41+
42+
43+
#alinea d)
44+
SELECT userid FROM (
45+
SELECT X.userid,X.regid,X.pageid, X.typeid FROM (
46+
SELECT P.userid,RP.regid,RP.pageid, RP.typeid FROM pagina P LEFT OUTER JOIN reg_pag RP
47+
ON P.userid=RP.userid AND P.pagecounter=RP.pageid
48+
WHERE P.ativa=1 AND RP.ativa=1
49+
) X, registo R, tipo_registo T WHERE X.userid=R.userid AND X.regid=R.regcounter AND X.userid=T.userid AND X.typeid=T.typecnt AND R.ativo=1 AND T.ativo=1
50+
GROUP BY X.pageid
51+
HAVING COUNT(DISTINCT X.typeid) =(SELECT COUNT(DISTINCT T.typecnt) FROM tipo_registo T WHERE T.userid=X.userid AND T.ativo=1)
52+
) a
53+
GROUP BY a.userid
54+
HAVING COUNT(pageid)=(SELECT COUNT(pagecounter) FROM pagina PP WHERE PP.userid=a.userid AND PP.ativa=1)
55+
56+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /