Kezdőoldal » Számítástechnika » Weblapkészítés » Webapp MySQL adatbázissal?...

Webapp MySQL adatbázissal? Hogy a legegyszerűbb ezt megoldani?

Figyelt kérdés

Adatbázis MySQL-ben személyekről. Egy személy kapcsolható 1 vagy több iskolához. Ahova jár(t).


Viszont ha egy személy több iskolába is járhat/járhatott, akkor egy adott iskolának lehet több diákja is.

Tehát akkor ez egy many to many kapcsolat igaz? Vagy nagyon túlgondolom?


Ugye mivel many to many nem lehet a kapcsolat, van egy link table ami tartalmazza a másik kettő (személyek, iskolák) ID-jait, és így össze tudom kapcsolni a személyt a sulikkal.


Ez így eddig oké is, SQL-ben is le tudom hívni, hogy adott suliba kik jártak, a 2 táblázat segítségével.


Viszont ha van egy egyszerű form-om amit html/css-el dobok össze, hogy írom be, hogy ki melyik suliba járt?

A személyek táblázatba oké, az megvan. De a link table-be hogyan kötöm össze a személyt 1 vagy több sulival?

Hisz nem elég kiválasztani a sulit a drop down list-ből, mert be kell írni, hogy melyik id-t melyikkel kötöm össze a harmadik táblázatban, de ezt a front end-nél nem látja a user, hogy milyen ID-t kap elmentés után vajon az elmentett személy, hogy aztán azt kösse össze egy másik formban a sulival..


Ötletek?



2021. nov. 5. 10:50
1 2 3
 11/22 anonim ***** válasza:

#8: Nyilván az ID-t adod az option értékének, de a szöveg a suli neve. Tehát

pl:

<option value="1234">Mucsajröcsögei képzőművészeti szakiskola</option>

2021. nov. 5. 14:10
Hasznos számodra ez a válasz?
 12/22 A kérdező kommentje:

Van esetleg ötletetek, hogy ezzel mi lehet a gond?


INSERT INTO member (First_name, Last_name, Email)

VALUES ('$First_name', '$Last_name', '$Email');


INSERT INTO enrolment (Member_ID, School_ID)

SELECT MAX(Member_ID), '$School_ID' FROM member;


A member az a diák, az enrolment meg a link táblázat.


MySQL-ben jó minden, minden oda kerul ahova kellene, ha kicserélem a value-t rendes adatokra. De amikor megpróbálom a front-enden, MySQL syntax hibát kapok.


"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO enrolment (Member_ID, School_ID) SELECT MAX(Member_ID), '1' FROM me' at line 4"

2021. nov. 6. 12:06
 13/22 anonim ***** válasza:
Nem látjuk a php kódot, hogy hogyan adod át, de esetleg az sql stringet irasd ki/logold stb.. és lehet akkor látni fogod..
2021. nov. 6. 12:16
Hasznos számodra ez a válasz?
 14/22 anonim ***** válasza:

Elsőre amúgy az szokott a gond lenni, hogy nem jól van a változó berakva a stringbe és ezért problémás.

Érdemes lehet a preparared statemenetes módit alkalmazni, több előnye is van..

[link]

2021. nov. 6. 12:20
Hasznos számodra ez a válasz?
 15/22 A kérdező kommentje:

Most azt próbáltam ki, hogy szétszedem a két insert into-t, és úgy lefut minden frontend-en keresztül.

Viszont így vagy csak a member táblázatba, vagy csak az enrolment-be lehet beírni adatot egyszerre.

Ha külön-külön lefutnak, akkor gondolom nem a php vagy más kóddal van a gond, vagy tévedek?


De tudtommal nem lehet két táblázatba is egyszerre insert-elni, csak úgy ahogy fent is van, külön-külön 😬

2021. nov. 6. 12:23
 16/22 anonim ***** válasza:
Ja, hogy ezt így ömlesztve csináltad?:)
2021. nov. 6. 12:40
Hasznos számodra ez a válasz?
 17/22 A kérdező kommentje:

#16 Mármint ezt a két "insert into" sql query-ket?

Igen😅


Most nézem hogy kellene ezeket egyszerre lefuttatni hogy jó legyen. Tranzakciókat találtam, de ahogy látom a Begin; és a Commit; az elejére valamint a végére nem igazán segít.

2021. nov. 6. 12:46
 18/22 anonim ***** válasza:

"That silly concatenation mistake aside, it is technically possible to run two INSERT queries in one call, but there is not a single reason to do so.


Besides, you will need to configure PDO specifically to allow multiple queries which is not advised.


Therefore, just run these two queries as two separate prepared statements."


[link]

2021. nov. 6. 12:54
Hasznos számodra ez a válasz?
 19/22 anonim ***** válasza:

[link]


Committal indítod el azokat amiket a begin után írtál, ha elszúródik a akkor rollback-el visszacsinálja.

2021. nov. 6. 13:03
Hasznos számodra ez a válasz?
 20/22 anonim ***** válasza:

"INSERT INTO enrolment (Member_ID, School_ID)

SELECT MAX(Member_ID), '$School_ID' FROM member;"

Ez nem jó megoldás! Egészen addig jól működik, amíg csak te használod. De amint egyszerre többen is használják a rendszert, rögtön ott van a lehetőség, hogy másik usert adsz hozzá, mint amit szeretnél.


És eleve nem jó ötlet így csinálni a beszúrást, hogy simán a változók értékét berakod a stringbe. Legalább filterezést csináltál, vagy ha beírnád a felhasználó nevének, hogy ','',''); DROP TABLE member; akkor szépen eldobná a tábládat?

Prepared statementeket illik használni és PDO-t, hogy kivédd az SQL injectiont.

2021. nov. 6. 18:09
Hasznos számodra ez a válasz?
1 2 3

További kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!