List genereren uit DBase
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 :
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?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>';
}
?>
$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?
Anders ben je sowieso verkeerd bezig door horizontaal uit te bouwen in plaats van verticaal.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
ja dan betekend het 48 id inbouwen voor elk een aparte option. misschien wel beter.
Vanaf dat moment heb je voor elk item/record die je aanmaakt een oplopend ID: 1,2,3,4 etc...
Of moet een item meerdere opties kunnen krijgen?
Anders moet ik een enorme html code schrijven en voor elke optie een input veld maken.
Zo kan ik als ik klaar ben met het invoeren van de gebruiker, de opties gebruiken die geselecteerd zijn en die outputten naar de front end.
Dus als voorbeeld en bij wijze van spreke wil je bijvoorbeeld een item, laten we bijvoorbeeld een persoon zeggen, de opties: schepje, strandstoel en parasol geven?
Gewijzigd op 21/03/2023 20:24:32 door - Ariën -
Toevoeging op 21/03/2023 20:42:27:
Maar even een andere vraag tussendoor, hoe haal ik in PhpMyAdmin een ID gap weg?
Ik heb nu ID 1, ID 2 en dan ineens ID 6, hoe haal ik die gap weg?
Als je meerdere opties wilt koppelen aan een item, dan moet je een tussen tabel gebruiken met twee entiteit-tabellen.
Je hebt de tabel met Opties, waarbij elke omschreven optie een uniek ID-nummer heeft.
Je hebt de tabel Gebruikers, waarbij elke gebruiker een uniek ID-nummer heeft.
Je hebt een tabel met OptiesGebruikers waarin je per record het ID van de optie noemt, en het ID van de gebruiker.
De database wordt nu pas opgebouwd en ik moet die gap weg hebben.
Verder maakt die ID gap weinig uit, tenzij je iets van OCD hebt :-P
Gewijzigd op 21/03/2023 20:51:28 door - Ariën -
Hmmm, dat hebben ze uitgeschakeld
Anders maak je de tabel opnieuw aan.
heb ik al
Mooi! :-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$datahost = "localhost"; // dbase hostname
$datauser = "knip"; //dbase username
$datapass = "knip"; // dbase password
$dataname = "knip"; // dbasename
$connect=mysqli_connect($datahost, $datauser, $datapass, $dataname) or die("Connection Failed");
$db = mysqli_select_db($connect, $dataname);
if(!$connect) {
echo "Not Connected";
}
$sql = 'SELECT * FROM options ORDER BY ID';
$result = mysqli_query($connect, $sql);
$Option = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach($Option as $options)
{
echo "<label class='labels'>".$options['option']."<input type='checkbox' id='".$options['option']."' name='".$options['option']."' value='".$options['option']."'></label>";
}
?>
$datahost = "localhost"; // dbase hostname
$datauser = "knip"; //dbase username
$datapass = "knip"; // dbase password
$dataname = "knip"; // dbasename
$connect=mysqli_connect($datahost, $datauser, $datapass, $dataname) or die("Connection Failed");
$db = mysqli_select_db($connect, $dataname);
if(!$connect) {
echo "Not Connected";
}
$sql = 'SELECT * FROM options ORDER BY ID';
$result = mysqli_query($connect, $sql);
$Option = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach($Option as $options)
{
echo "<label class='labels'>".$options['option']."<input type='checkbox' id='".$options['option']."' name='".$options['option']."' value='".$options['option']."'></label>";
}
?>
Krijg steeds deze fout:
Quote:
Deze pagina werkt nietsexy-devil.nl kan dit verzoek momenteel niet verwerken.
HTTP ERROR 500
HTTP ERROR 500
en met de F12 met chrome, deze fout:
Quote:
crbug/1173575, non-JS module files deprecated.
en
Quote:
No resource with given URL found
Wat doe ik fout?
Gewijzigd op 21/03/2023 23:06:21 door - Ariën -
Moet je even in de error log kijken. Of error reporting aanzetten.
Toevoeging op 22/03/2023 01:34:53:
Opgelost, maar nu krijg ik deze melding
Quote:
Warning: Undefined array key "option" in /data/sites/web/sexy-devilnl/www/test/services.php on line 29
dit is de code op lijn 29
Code (php)
1
2
3
2
3
<?php
echo "<label class='labels'>".$options['option']."<input type='checkbox' id='".$options['option']."' name='".$options['option']."' value='".$options['option']."'></label>";
?>
echo "<label class='labels'>".$options['option']."<input type='checkbox' id='".$options['option']."' name='".$options['option']."' value='".$options['option']."'></label>";
?>
Toevoeging op 22/03/2023 01:39:06:
Ook alweer opgelost, sorry mensen voor de overlast.
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.
Gewijzigd op 23/03/2023 14:44:44 door - Ariën -
eerder gebruikte je de index "option01" ipv "option"
Ivo P op 23/03/2023 16:10:16:
eerder gebruikte je de index "option01" ipv "option"
Ja, dat was eerst, voordat ik hem de tip gaf om 'horizontaal' te werken i.p.v. verticaal en tig oplopende velden aan te maken.