Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
html-noob
@html-noob
tack för hjälpen
fick till en variant nu efter jag ladda ned det med npm, de blev såhär:
https://gyazo.com/f1b537c9b961cf0d0eaaee41af1d4418
Mikael Roos
@mosbth
nu blev det vackert
html-noob
@html-noob
tack mos :)
Mikael Roos
@mosbth
@nataliefrick Vill du maila mig om din kmom06? mos@bth.se, så jag inte missat nåt.
Mikael Roos
@mosbth

Status

De allra flesta som är klara med kursen har fått sina betyg inrapporterade till Ladok nu. En handfull kvarstår pga olika anledningar. Vi siktar på att allt är helt klart och inrapporterat innan fredag eftermiddag.
Sedan rättar vi igen vid restinlämningen som är i slutet av maj.
churchthecat
@churchthecat
sitter med en dubbel query , nästan fått det att funka men hur väljer jag vilka delar av arrayen som ska skickas? testat lite olika men får det inte att funka riktigt. just nu så får jag resultatet av bägge CALL , men även massa annat

async function makeOrder(kundid) {
    let sql = `CALL make_order(?);CALL make_order_more()`;
    let res;
    let res2;

    res = await db.query(sql, [kundid]);
    // res2 = await db.query(sql[1], [kundid]);
    // console.log(res2[1]);
    // console.log(res2[2]);
    // console.log(res1[1]);
    // console.log(res1[2]);
    // console.log(res1);
    console.log("XXXXX", res);
    console.info(`SQL: ${sql} got ${res.length} rows.`);

    return res;
}
Mikael Roos
@mosbth
Känns lite udda med en sådan multiquery, men det kan säkert funka. Rent krasst så undviker man gärna att ha multiqueries definierat i kmom05 och framåt.
Jag hade nog försökt göra det i en lagrad proc, eller två queries med varsin CALL och två olika resultset, res1 och res2. Man kan ju skicka två resultset till en vy, res1 och res2. Annars får du bara kika i din res och klura ut hur du får resultatet tillbaka.
churchthecat
@churchthecat
aha då testar jag vidare tack
churchthecat
@churchthecat

ang. Bygg stöd för att man kan lägga till produkter och antal (orderrader) till en order.

är detta 2 orderrader eller 10?

+------------+------------+---------+--------+-----------+-------------+---------------+
| totalrader | orderrader | orderid | kundid | produktid | produktnamn | antalbestallt |
+------------+------------+---------+--------+-----------+-------------+---------------+
|          1 |       NULL |       3 |      4 |         1 | iphone11    |             5 |
|          2 |       NULL |       3 |      4 |         2 | pixel2      |             5 |
+------------+------------+---------+--------+-----------+-------------+---------------+
Mikael Roos
@mosbth
SELECT COUNT(id) AS AntalFROM order;
churchthecat
@churchthecat
om jag POST till samma sida som GET så skriver GET över POST ? hur löser man det?
Mikael Roos
@mosbth
nje, så funkar det nog inte?
churchthecat
@churchthecat
hittade en annan lösning tror jag
churchthecat
@churchthecat
skippade post och försöker få ut kundid från data men lyckas inte,

routes

router.get("/makeorder/:kundid", async (req, res) => {
    let kundid = req.params.kundid;

    let data = {
        title: `Make order ${kundid} ${sitename}`,
        kundid: kundid
    };


    data.res = await eshop.makeOrderStart(kundid);
    // data.res2 = await eshop.makeOrder2();

    res.render("eshop/makeorder", data);
});

router.post("/makeorder/:kundid", urlencodedParser, async (req, res1) => {
    console.log(JSON.stringify(req.body, null, 4));

    await eshop.makeOrder(req.body.kundid);

    res1.redirect(`/eshop/makeorder/${req.body.kundid}`);
});

formuläret för att skapa ordern

<div class="formsmall">
<form class="label-left" method="post">
<input type="number" id="kundid" name="kundid" value= "<% kundid %>">
<button input type="submit" class="btn-addtocart">
        <i class="fas fa-shopping-cart" aria-hidden="true"> Create order</i>
    </button>
</form>
churchthecat
@churchthecat
ah missade =
Hanna Han
@hsh803
Hej, jag håller på med att arbeta inför omtenta och är fast i en fråga nu. Jag har en tabell där NULL värde existerar och detta orsakar att hindra att ta fram en tabell i terminal-klient. Error meddelande säger att "Cannot read property 'PadEnd' of null". Hur ska man göra för att presentera NULL värde från tabellen from sql via Javascript funktion?
Koden i node.js:

async function showTable() {
let sql = CALL visa();;
let res = await db.query(sql);
res = res[0];
let str;

str  = "\n+---+---------------------+------------+----------+----------+-----------------+------------+---------+\n";
str += "| ID |         Namn        |     Ort    | Landskod |   Land   |       Dag       |    Datum   |   Tid   |\n";
str += "|----|---------------------|------------|----------|----------|-----------------|------------|---------|\n";
for (const row of res) {
    str += "| ";
    str += row.id.padEnd(3);
    str += "| ";
    str += row.namn.padEnd(20);
    str += "| ";
    str += row.ort.padEnd(11);
    str += "| ";
    str += row.landskod.padEnd(9);
    str += "| ";
    str += row.land.padEnd(9);
    str += "| ";
    str += row.dag.padEnd(16);
    str += "| ";
    str += row.datum.padEnd(11);
    str += "| ";
    str += row.tid.padEnd(7);
    str += " |\n";
}
str += "+----+---------------------+------------+----------+----------+-----------------+------------+---------+\n";
console.info(str);

}

Hanna Han
@hsh803
Tabellen:
tabellen.png
Mikael Roos
@mosbth
Generellt: Antingen säkerställ att den inte är null i databasen, eller säkerställ i utskriften att du kan hantera om värdet är null (tex med en if-sats eller liknande).
Hanna Han
@hsh803
@mosbth Stort tack för tips. Jag kunde ta fram det resultat som jag ville ha genom att lägga till if-satsen i koden men det andra sätt (utan att använda if-satsen i JS-koden), dvs. att lägga "NOT NULL" till all data i databasen, funkade inte som det förväntades. Jag undrar varför det andra sättet inte kan ge samma resultat som if-satsen?
Mikael Roos
@mosbth
Kan tänka mig ett par olika svar. Man får felsöka. Ligger det fortfarande null i tabellen? Exakt vad innehåller raden när den skrivs ut? LIte så hade jag felsökt för att förstå vad som händer.
Hanna Han
@hsh803
Ja, det visar sig "NULL" i de "tomma" kolumnerna när jag tar fram tabellen efter att jag har lagt "NOT NULL" till all data när jag skapade tabellerna i databasen. När jag hämtar data from databasen och kör den igenom i koden som jag skrev ovanpå (utan if-satsen) får jag samma fel meddelande "Cannot read property 'PadEnd' of null" i terminalklient. Texten "NULL" visar sig o tabellen när man tar fram den i mysql men inte i node.js eftersom de kolumnerna har helt tomma värden. När jag la if-satsen där byggde jag att tomma värden skulle få en sträng , ett värde i sin tur för att köra i koden. Då fick jag texten "NULL" i terminalklienten. Men nu undrar jag om det finns något sätt man kan kontrollera redan när man skapar data i databasen så att tomma kolmuner kan passeras i koden utan att bygga if-satsen?
Mikael Roos
@mosbth
Finns säkert olika varianter. Enklast vore kanske att göra sin js-kod felsäker så den inte behöver lite på vilka värden som ligger i databasen.
Den inbyggda databasfunktionen COALESCE() kan till viss del användas för att hantera nullvärden, kan integreras i ett SELECT-statement.
Man kan försöka hindra att vissa värden ligger i tabellens rader, det vore ett annat alternativ. NOT NULL bör fungera på en tom tabell.
Hanna Han
@hsh803
@mosbth Tack! Ska testa på ett annat exempel av de tidigare tentorna. Har en fråga om backup fil till databasen. Jag ser att i instruktionen av tentan står det 'dbwebb' som en användare till databasen, (t.ex. mysqldump -udbwebb -p --routines sapo > backup.sql) istället för 'user' fast man ska använda 'user' som användare när man arbetar med databasen i tentan. Är det bara ett exempel eller? Isåfall får man skapa backup fil med följande kommando: "mysqldump -uuser -p --routines sapo > backup.sql" ?
Mikael Roos
@mosbth
@hsh803 det är ett exempel, det spelar ingen roll vilken användare som används, bara backupen kan skapas. Har man fel användare brukar det ge fel.
Mikael Roos
@mosbth

Tenta try2 och restinlämningar

Info finns på canvas.
Mikael Roos
@mosbth
Imorgon är det omtenta.
Mikael Roos
@mosbth
Omtenta try2 öppnar om 3 min.
2min.
Andreas
@freddyph
Fråga: Har problem med att slå ihop vapen typ_id med typ id. Fungerar slå ihop övriga delar. Är det något fel eller är det jag som får testa "annan väg"?
@mosbth
Mikael Roos
@mosbth
@freddyph jag lyckades igår när jag provlöste, men se om du kan lösa det.
Det borde inte vara något fel i strukturen, men man vet aldrig om jag gjort nåt knas.
Andreas
@freddyph
Känns skumt, får bara fram ett värde när jag slår ihop så som "jag tycker", men får testa annan väg..
hadihalbouny
@hadihalbouny

Hej allihopa
En allmän fråga
Jag tänkte lära mig ett front end framework under sommaren (VueJs)

Kan jag börja direkt med HTML5 och CSS3 eller måste jag kunna vanlig HTML och CSS innan jag börjar med frameworken?

OBS: Jag kan JavaScript

tikktakk79
@tikktakk79
@hadihalbouny Det är bara att köra tycker jag. Sen märker du ju efterhand om du behöver fördjupa dig lite mer i css/html. Följer själv kursen Vue Mastery som jag varmt kan rekommendera.
hadihalbouny
@hadihalbouny
@tikktakk79
Tack så mycket
Kan du ge länk till kursen?
tikktakk79
@tikktakk79
@hadihalbouny Självklart: Vue Mastery. Första delen är gratis och ger en bra introduktion. Sen får man själv välja om man vill betala typ 180kr/månad för att få tillgång till mera.
shahd0
@shahd0
Hej undrar i kmom05 krav 8 ska man lägga till en ny produkt eller att man kan bara lägga till en visst antal produkter??
Andreas
@freddyph

God morgon! Finns det någon vänlig själ som kan tänka sig att bolla ett problem jag har?
Sitter med kmom06.
Vill kunna skapa en order från kund-fliken. Det går att trycka på fältet "Skapa order" där jag skickar med datan ID, Efternamn och Förnamn. Allt väl så långt. Men när ska påbörja processen att skapa order får jag "Error: ER_WRONG_VALUE_COUNT_ON_ROW: Column count doesn't match value count at row 1"

async function createOrder(kundnr, fornamn, efternamn) {
    let sql = `CALL create_order(?, ?, ?);`;
    let res;

    res = await db.query(sql, [kundnr, efternamn, fornamn]);
    // console.log(res);
    console.info(`SQL: ${sql} got ${res.length} rows.`);
}

create_order i ddl.sql:

--
-- Create procedure for creating order
--
DROP PROCEDURE IF EXISTS create_order;
DELIMITER ;;
CREATE PROCEDURE create_order(
    a_kundnr VARCHAR(40),
    a_fornamn VARCHAR(50),
    a_efternamn VARCHAR(50)
    -- `orderid` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -- `kundnr` int,
    -- `fornamn` VARCHAR(50),
    -- `efternamn` VARCHAR(50),
    -- `created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    -- `updated` TIMESTAMP DEFAULT NULL
    --             ON UPDATE CURRENT_TIMESTAMP,
    -- `activated` TIMESTAMP DEFAULT NULL,
    -- `deleted` TIMESTAMP DEFAULT NULL,
    -- `numprod` int DEFAULT NULL,
    -- `produktid` VARCHAR(40) DEFAULT NULL,
    -- `pris` VARCHAR(40) DEFAULT NULL,
    -- `namn` VARCHAR(40) DEFAULT NULL
)
BEGIN
    INSERT INTO orders VALUES (a_kundnr, a_fornamn, a_efternamn);
END
;;
DELIMITER ;

Routen:

router.post('/create_order', urlencodedParser, async (req, res) => {
    console.log(JSON.stringify(req.body, null, 3));
    // await eshop.createOrder(req.body.kundnr, req.body.fornamn, req.body.efternamn);
    res.redirect("/order");
});

Console.log ger mig:

{
   "kundnr": "1",
   "efternamn": "Roos",
   "fornamn": "Mikael ",
   "doit": "Skapa order"
}
SQL: 
    SELECT
       orderid,
       kundnr,
       fornamn,
       efternamn,
       created
    FROM orders (orders) got 1 rows.
Charlotte Strand
@ChalleStr

@freddyph Vet inte om jag kan vara till någon hjälp men min createOrder ser ut så här: ``async function createOrder(body) { let sql =CALL create_order(?);`;

await db.query(sql, [body.id]);

}```

Hm , lyckas aldrig med backticsen ...
Charlotte Strand
@ChalleStr
Jag tror också att du behöver korrigera din procedure med att specificera i vilka kolumner du vill sätta in värden t.ex. INSERT INTO orders (kundnr, fornamn, efternamn) VALUES (a_kundnr, a_fornamn, a_efternamn) Gissar att det är därför den säger att kolumnerna inte matchar antal värden.
@freddyph
Andreas
@freddyph
@ChalleStr Tusen tusen tack!!!! Det gjorde susen :D
@ChalleStr Vet inte hur många timmar jag tittat på denna koden och inte fått ordning på det, du gjorde min dag :)
Charlotte Strand
@ChalleStr
@freddyph Kul att jag kunde vara till hjälp! Vanligtvis är det jag som behöver hjälp efter att ha stirrat mig blind på koden i timmar (eller dagar...), så jag vet precis hur det är. :D