5 invoervelden tegelijk verwerken in MYSQL dbase?
Voor je gaat stoeien met databases, verdiep je er in. Prima dat je wilt oefenen en dat je nog niet met iets concreets bezig bent, maar ik ben bang dat je straks terugvalt op de dingen die nu werken, maar niet doordacht zijn. Zoals een aparte database voor elke gebruiker.
Als een user alle rechten heeft, kan hij doen wat de database wat hij wil. En, mogelijk, ook met de andere databases. Moet je niet toestaan.
Php is niet instabiel. Database is veilig, als je maar zorgt voor controle op input en bij wegschrijven naar database.
Heb het idee dat je bezig bent met het bouwen van een huis, terwijl er nog geen fundering is. Begin bij begin.
In die database zitten tabellen. Elke entity die je hebt (aanwijsbare zaken, zoals een User, een Order of een Artikel) heeft binnen die database weer 1 tabel.
Dus als jij users hebt, dan is er een tabel "user".
Binnen die tabel staan weer records. Elke user krijgt 1 record. Dus voor jouw 20 users zijn er ook 20 records in die tabel.
Heeft zo'n user weer andere zaken, bijvoorbeeld een lijst met linkjes, dan is er ook een tabel "links" nodig.
Als user A (met user_id = 65) dan 3 links wil bewaren, dan komen er 3 records in de tabel "links".
1 van de kolommen in die tabel heet "user_id" en bevat voor user A de waarde 65.
Probeer dat onder de knie te krijgen voor je een hele applicatie bouwt rond een verkeerd principe.
Want de "gebruikelijke" fout om de username "A" bij die links op te slaan maak je niet eens: je zit er nog verder vanaf....
Obelix en Idefix op 08/06/2015 21:52:25:
20 users 20 databases????? Alsjeblieft niet. 1 database met 20 records.
....
Als een user alle rechten heeft, kan hij doen wat de database wat hij wil. En, mogelijk, ook met de andere databases. Moet je niet toestaan.
....
Als een user alle rechten heeft, kan hij doen wat de database wat hij wil. En, mogelijk, ook met de andere databases. Moet je niet toestaan.
Dit is toch op zijn minst opmerkelijk. Als een user toegang heeft dmv 5 tabel invoervelden en bijv. 30 invoervelden voor de rijen en verder alles dmv authenticatie is afgeschermd hoe kan je dat dan onveilig noemen?
Ik ben verder niet bekend met mysql hack injectie technieken (ga ik zeker wel mee oefenen tzt) maar zit er werklijk verschil tussen tabel injectie en record injectie?
Is voor mij van later zorg.
Johan West op 09/06/2015 14:14:23:
Dit is toch op zijn minst opmerkelijk. Als een user toegang heeft dmv 5 tabel invoervelden en bijv. 30 invoervelden voor de rijen en verder alles dmv authenticatie is afgeschermd hoe kan je dat dan onveilig noemen?
Ik ben verder niet bekend met mysql hack injectie technieken (ga ik zeker wel mee oefenen tzt) maar zit er werklijk verschil tussen tabel injectie en record injectie?
Is voor mij van later zorg.
Obelix en Idefix op 08/06/2015 21:52:25:
20 users 20 databases????? Alsjeblieft niet. 1 database met 20 records.
....
Als een user alle rechten heeft, kan hij doen wat de database wat hij wil. En, mogelijk, ook met de andere databases. Moet je niet toestaan.
....
Als een user alle rechten heeft, kan hij doen wat de database wat hij wil. En, mogelijk, ook met de andere databases. Moet je niet toestaan.
Dit is toch op zijn minst opmerkelijk. Als een user toegang heeft dmv 5 tabel invoervelden en bijv. 30 invoervelden voor de rijen en verder alles dmv authenticatie is afgeschermd hoe kan je dat dan onveilig noemen?
Ik ben verder niet bekend met mysql hack injectie technieken (ga ik zeker wel mee oefenen tzt) maar zit er werklijk verschil tussen tabel injectie en record injectie?
Is voor mij van later zorg.
Ik moet eerlijk zeggen dat je houding nog al vreemd is. Je komt op een forum om meer ervaren mensen een mening te vragen.
Een tabel per user of beter gezegd per entity (user, city of wat dan ook) is gewoon not done en totaal niet best practise. Je moet vanuit het script sowieso nooit tabellen gaan aanmaken.
Je kunt zoals eerder gezegd het best een relationeel databse systeem gebruiken. Een tabel met users en als die users bepaalde eigenschappen hebben waar er meerdere van zijn dan maar je daar weer een tabel voor aan. Zo kun je oneindig schalen en ook aanvullen met nieuwe tabellen. Een klein voorbeeld:
Je wilt een website maken over landen.
Tabel 1: Continenten
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
+----+---------------+
| id | naam |
+----+---------------+
| 1 | Europa |
+----+---------------+
| 2 | Afrika |
+----+---------------+
| 3 | Noord Amerika |
+----+---------------+
| id | naam |
+----+---------------+
| 1 | Europa |
+----+---------------+
| 2 | Afrika |
+----+---------------+
| 3 | Noord Amerika |
+----+---------------+
Tabel 2: Landen
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
+----+--------------+------------------+
| id | continent_id | naam |
+----+--------------+------------------+
| 1 | 1 | Nederland |
+----+--------------+------------------+
| 2 | 3 | Verenigde Staten |
+----+--------------+------------------+
| id | continent_id | naam |
+----+--------------+------------------+
| 1 | 1 | Nederland |
+----+--------------+------------------+
| 2 | 3 | Verenigde Staten |
+----+--------------+------------------+
Tabel 3: Steden
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
+----+---------+-----------+
| id | land_id | naam |
+----+---------+-----------+
| 1 | 1 | Amsterdam |
+----+---------+-----------+
| 2 | 1 | Rotterdam |
+----+---------+-----------+
| 3 | 2 | Chicago |
+----+---------+-----------+
| id | land_id | naam |
+----+---------+-----------+
| 1 | 1 | Amsterdam |
+----+---------+-----------+
| 2 | 1 | Rotterdam |
+----+---------+-----------+
| 3 | 2 | Chicago |
+----+---------+-----------+
Nu kun je alle steden ophalen en daarbij ook direct de bijbehorende landen en continenten door eenvoudig een paar LEFT joins toe te passen.
Code (php)
1
SELECT t1.naam as stad_naam , t2.naam as land_naam , t3.naam as continent_naam FROM steden t1 LEFT JOIN landen t2 ON t2.id = t1.land_id LEFT JOIN continenten t3 on t3.id = t2.continent_id
Op deze manier kun je alles goed vinden en kun je verbanden aanleggen waardoor een engine als InnoDB op zijn beurt ook de caching weer goed kan inzetten wat snelheid verbeterd.
Het is dus echt totale onzin om in bovenstaand voorbeeld voor elk land een tabel aan te maken en al helemaal om voor elk land een nieuwe database aan te maken.
Gewijzigd op 09/06/2015 16:35:00 door Henk de Vriep
Johan West op 09/06/2015 14:14:23:
Ik ben verder niet bekend met mysql hack injectie technieken (ga ik zeker wel mee oefenen tzt) maar zit er werklijk verschil tussen tabel injectie en record injectie?
Er is geen 'tabel-injectie' of 'record-injectie'. Wel een SQL-injectie die gevaarlijk is, waarmee je alle mogelijke queries uit kan voeren waarvoor je de nodige rechten hebt. Deze vorm van hacking is eenvoudig op te lossen door mysql_real_escape_string() of mysqli_real_escape_string() te gebruiken over de variabelen die een gebruiker aan kan passen. Denk hierbij aan $_GET, $_POST, $_COOKIE.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql= "
SELECT id, voornaam, achternaam,geboortedatum
FROM personen
WHERE id = '".mysqli_real_escape_string($connectie, $_GET['id'])."'
";
?>
$sql= "
SELECT id, voornaam, achternaam,geboortedatum
FROM personen
WHERE id = '".mysqli_real_escape_string($connectie, $_GET['id'])."'
";
?>
Quote:
Is voor mij van later zorg.
Sloten zet je ook niet op het laatste moment op je huis. Ook tijdens de bouw ervan kan er worden ingebroken. Gewoon consequent zijn om deze direct toe te voegen bij het aanmaken van een SQL-query.
Gewijzigd op 09/06/2015 19:54:52 door - Ariën -
Johan West op 09/06/2015 14:14:23:
Is voor mij van later zorg.
Ik begrijp je niet.
Dat je dingen wilt leren door te proberen is prima.
Maar als je tips en adviezen krijgt, doe je er niets mee.
Je zegt van wel, maar een opmerking als hierboven geeft mij toch echt het idee dat je alleen antwoord wilt op je vraag en voor de rest interesseert het je niet zo veel.
Jammer.
Ik sta echt open voor al jullie behulpzame adviezen echter ik geef toe niet alles te weten van databases.
Relationele databases krijgen uiteindelijk een extra kolom toegevoegd die de relatie tussen de verschillende tabellen legt.
Mijn eerste 'oefenideetje' was eigenlijk vrij simpel en helemaal niet zo uitgebreid. Ook is mijn 'hobbyprojectje' nog niet af en kan ik er later altijd nog kolommen aan toevoegen.
Er zijn wel verschillende database engines zoals InnoDb en myISAM. Wat ht verschil is weet ik niet. Ik wil vanzelfsprekend een zo goed mogelijk werkende database, dus goed en snel en optimaal. Maar dan moet je wel het verschil tussen de engines weten. Er is ook een benchmark voor bepaalde phpcommando's zou werkt de ene conditie sneller als de andere zie phpbench: http://www.phpbench.com/ . Is er ook zoiets om de snelheid van de verschillende databases te testen?
Ik zit in een leer fase. Ik oefen scripts en soms gaat het me niet direct (uiteindelijk wel natuurlijk) om een praktische output en werk ik stapsgewijs zoals eerst 1 invoerveld kunnen verwerken in de database. Daarna 1 array en daarna 2 arrays.
Dat kan onlogisch overkomen als ik vragen stel, maar is voor mij echt noodzakelijk om goed zicht te krijgen.
Ik kan ook niet zeggen wat ik van plan ben, want als ik een ideetje heb voor mijn project dan voeg ik dat misschien morgen wel toe.
Jullie zijn echt heel behulpzaam en ik steek er al aardig wat van op, maar het gaat me nu te ver om de verschillen in database engine mee te nemen bij het maken van instructies.
Toevoeging op 10/06/2015 11:02:30:
Helemaal duidelijk is het me niet of ik er rekening mee zou moeten houden of een query zoekt binnen 1 database of binnen verschillende databases. Zulke situaties zijn uiteindelijk wel denkbaar maar niet op de korte termijn. Maar dan ook alleen als je vaak meerdere databases raadpleeg waarbij snelheid een absoluut vereiste is.
Gewijzigd op 10/06/2015 09:49:33 door Johan West