Ik ben bezig om een website te maken en om een hele lange html code te schrijven voor een form, wil ik alles in de DBase wegzetten. Echter kom ik tot de conclusie dat je wel alles kunt wegzetten, maar het ophalen ervan nu anders werkt.
wat ik nu alvast heb, is dit :
<?php
$sql = 'SELECT * FROM options ORDER BY ID';
$result = mysqli_query($connect, $sql);
$news = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach($options as $option)
{
echo '<label class='labels'>.'$option['option01']'.<input type='checkbox' id='.$option['option01'].' name='.$option['option01'].' value='.$option['option01'].'></label>';
}
?>
Echter op ID '1' zijn 48 opties en elke optie heet option(xx) (de xx staat voor een nummer, bijvoorbeeld : option01, option02 etc..)
Dit gaat door tot 48 en elke option heeft een ingevoerde waarden, nu wil ik dus voor de form dat hij elke option ophaalt en dit in de page laadt.
Hoe kan ik ervoor zorgen dat hij elek option ophaalt met de weg geschreven waarde?
Fatal error: Uncaught mysqli_sql_exception: No such file or directory in /data/sites/web/sexy-devilnl/www/test/services.php:14 Stack trace: #0 /data/sites/web/sexy-devilnl/www/test/services.php(14): mysqli_connect('localhost', 'sexyde_admin', 'password', 'sexyde_services') #1 {main} thrown in /data/sites/web/sexy-devilnl/www/test/services.php on line 14
[size=xsmall]Toevoeging op 22/03/2023 01:34:53:[/size]
Opgelost, maar nu krijg ik deze melding
Warning: Undefined array key "option" in /data/sites/web/sexy-devilnl/www/test/services.php on line 29
Wat nu als je straks option met id = 12 wilt verwijderen? Ga je dan options 13 tot en met 129 allemaal 1 positie opschuiven? Dat wordt een niet te overziene ramp als je dat met een gevulde database doet (hooguit als je foreign key restrictions hebt aangelegd met een "on update cascade" zou het misschien goed gaan.
Daarnaast: je gebruikt nu ORDER BY ID.
Ook dat is niet slim: een gat in je rij waar id=12 is verwijderd geeft geen probleem, want id=13 komt nog steeds ná id=11.
Maar nu wil je na option 10 nog een option plaatsen. id=10.5 zal niet mogelijk zijn (geen INT). Die nieuwe optie krijgt van de auto-increment id=130.
Daarom zou je er beter aan doen om een volgorde kolom toe te voegen.
In eerste instantie zou je daarvoor kunnen gebruiken dat die kolom gevuld wordt met dezelfde waarde als het id. (of misschien beter nog: met id*10. Dan heb je een volgorde nummer 10, 20 etc. Daarmee dus ook bij id=10 een volgorde=100 en id=11 met volgorde=110.
Dat nieuwe record dat id=130 heeft, geef je volgorde=105 en voilà hij staat er tussen op z'n plek. Pas als je 9 records tussen de oorspronkelijke records hebt geschoven, is je vrije ruimte op.
ID kolommen dienen alleen om een record aan te kunnen wijzen. Het heeft geen betekenis. Niet in dat het opvolgend moet zijn, niet in dat er een volgorde uit af te leiden is.
Kijk anders eens naar je BSN. Dat is een nummer van 9 cijfers. daaruit is niets af te leiden: niet wanneer je geboren bent, niet wat je geslacht is (wel in België), niet van wie je familie bent. En toch werkt dat.
Dus:
id alleen te gebruiken als je 1 record wilt aanwijzen. Zie de url van deze pagina: 104656 is kennelijk het id van dit topic.
Maar de lijst met topics is gesorteerd op datum van aanmaak dan wel datum laatste aanpassing.
Het is een denkwijze je je misschien eigen moet maken, maar doe dat voor je hele site gebouwd is en maakt dat de sortering afhangt van de volgorde van de idnummers en dat het een aaneengesloten rij is.