Hallo,

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?
Raar, waarom zou je dat niet mogen?
Anders maak je de tabel opnieuw aan.
Mooi! :-)
Even deze tussendoor

<?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>";
			}
?>

Krijg steeds deze fout:
Deze pagina werkt nietsexy-devil.nl kan dit verzoek momenteel niet verwerken.
HTTP ERROR 500

en met de F12 met chrome, deze fout:
crbug/1173575, non-JS module files deprecated.

en
No resource with given URL found


Wat doe ik fout?
Moet je even in de error log kijken. Of error reporting aanzetten.
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


dit is de code op lijn 29

<?php
echo "<label class='labels'>".$options['option']."<input type='checkbox' id='".$options['option']."' name='".$options['option']."' value='".$options['option']."'></label>";
?>


[size=xsmall]Toevoeging op 22/03/2023 01:39:06:[/size]

Ook alweer opgelost, sorry mensen voor de overlast.
Over je aaneensluitende rij ID's:

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.
Warning: Undefined array key "option" betekent dat: je de index, en dus ook het veld 'option' aanroept. Die infeite niet blijkt te bestaan.
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.

Reageren