Sixtens hemsida Uppgifter Blogg Om

Bankapplikation med databas

Gå till sida

Källkod

bank_sql/

logout.php

transfer.php

index.php

login.php

manage.php

signup.php

change_password.php

PREP/

POPULATE.php

QUERIES.sql

modules/

user.php

page.php

database.php

session.php

utility.php

wesweb01/bank_sql/PREP/QUERIES.sql

1 lines
-- Lista på SQL-satser som jag har tänkt använda i min bank.
-- Många satser använder PDO-parametrar, exempelvis :username


-- Lägg till användare
INSERT INTO user(username, passwordHash, passwordSalt) VALUES (:username, :passwordHash, :passwordSalt);

-- När man loggar in
-- Lösenordhashen och saltet hämtas, och jämförs med användarinmatningen på PHP-servern.
SELECT userId, passwordHash, passwordSalt FROM user WHERE username=:username;




--Skapade en vy för att visa ett specifikt bankkontos transaktioner, där amount-parametern är positiv för mottagande transkationer och negativ för utgående.
CREATE VIEW userAccountTransactionView AS
SELECT
t.transactionId,
t.transactionTypeId,
t.date,
tt.text transactionText,
CASE WHEN t.recipientAccountId = a.accountId THEN t.amount WHEN t.senderAccountId = a.accountId THEN - t.amount ELSE 0
END AS amount,
    a.*,
a2.accountId otherAccountId,
a2.userId otherUserId,
a2.name otherName,
a2.isMainAccount otherIsMainAccount,
a2.isActive otherIsActive
FROM
    userAccount a
INNER JOIN `transaction` t ON
    t.senderAccountId = a.accountId OR t.recipientAccountId = a.accountId
LEFT JOIN `transactionType` tt ON t.transactionTypeId = tt.transactionTypeId
LEFT JOIN userAccount a2 ON (CASE WHEN t.recipientAccountId = a.accountId THEN t.senderAccountId = a2.accountId WHEN t.senderAccountId = a.accountId THEN t.recipientAccountId = a2.accountId ELSE 0
END);








-- Skapade en vy för att visa kontons saldo.
CREATE VIEW userAccountBalanceView AS SELECT
    a.*,
    IFNULL(SUM(t.amount), 0) balance
FROM
    userAccount a
LEFT JOIN userAccountTransactionView t ON
    t.accountId = a.accountId
GROUP BY
    a.accountId;




-- Lägger till en ny transaktion mellan två konton.
-- Har en transactionType parameter, vilket är en sträng som automatiskt hittar motsvarande transactionTypeId.
INSERT INTO `transaction`(
    senderAccountId,
    recipientAccountId,
    transactionTypeId,
    amount,
    `date`
)
SELECT
    :senderAccountId,
    :recipientAccountId,
    tt.transactionTypeId,
    :amount,
    NOW() FROM transactionType tt WHERE tt.name=:transactionType;

--$db->query("INSERT INTO `transaction`(senderAccountId, recipientAccountId, transactionTypeId, amount, `date`)
--        SELECT :senderAccountId, :recipientAccountId, tt.transactionTypeId, :amount, NOW()
 --       FROM transactionType tt WHERE tt.name=:transactionType;");



-- Sats för att "ta bort"(låsa) ett bankkonto.
-- Dubbelkollar userId så slipper det göras i PHP, vilket hade kostat ett extra databasanrop.
UPDATE userAccount SET isActive=0 WHERE userId=:userId accountId=:accountId AND isMainAccount=0;