Hallo allemaal,

Ik heb een php bestand met daar in een gegenereerde lijst. Het bevat veen x aantal regels vanuit een database tabel(1).
Iedere regel bevat een form. En op dat form heb ik een hidden id. Die gebruik ik om een record te kunnen selecteren.
Maar op ieder form heb ik ook een drop-down veld/lijst. Deze is gegenereerd uit een andere database tabel(2). De id daarvan wil ik opslaan in tabel(1).

Hiervoor wil ik een MySQLi commando gebruiken met het SQL statement UPDATE.

Maar mijn vraag is nu, hoe kan ik query direct starten als ik mijn keuze heb gemaakt in de dropdown. Ik wil dan eigenlijk geen ander knopje hoeven in te drukken.

ALvast vriendelijk bedankt.

Frits van Leeuwen
Met jQuery is dit niet hee lastig:


<select id="selectbox">
  <option value="optie1">Optie 1</option>
  <option value="optie2">Optie 2</option>
  <option value="optie3">Optie 3</option>
</select>
<div id="result"></div>



En de Javascript code. Vergeet niet jQuery toe te voegen.


$(document).ready(function() {
  $('#selectbox').change(function() {
    // Haal de geselecteerde waarde op
    var selectedValue = $(this).val();
    
    // Voer een AJAX-verzoek uit met de geselecteerde waarde als GET-parameter
    $.ajax({
      url: 'ajax_select.php', 
      type: 'GET',
      data: { option: selectedValue },
      dataType: 'json', // Het verwachte datatype van de respons
      success: function(data) {
        // Verwerk de succesvolle respons hier
        $('#result').html('De request is met succes uitgevoerd: ' + JSON.stringify(data));
      },
      error: function(xhr, status, error) {
        alert('Fout bij het uitvoeren van de AJAX-request: ' + error);
      }
    });
  });
});


Ik raad wel aan om in je ajax_select.php goede controle te bouwen op de invoervalidatie. Een UPDATE-query moet hopelijk geen probleem zijn voor je. En maak ook goede foutafhandeling aan de hand van je return-waarde bij je succes-event.
- Ariën - bedankt voor de snelle reactie.
Ik kan er nu niet direct mee aan de slag, maar ik hoop dat morgen wel te kunnen. Mijn FORM is met $_POST Is dat geen probleem? Ik zie immers dat je GET gebruikt in de code.
Dan gebruik je POST i.p.v. GET
In php heb ik de volgende code nu staan:

$selectielijst_packings = "<select name='verpakkingen' id='verpakkingen' alt='verpakkingen'>
										<option value='0'> </option>";
	while ($row_packings = mysqli_fetch_row($result_packings)) {
		$selectielijst_packings .= "<option value='".$row_packings[0]."'>".$row_packings[1].": ".$row_packings[2]."x".$row_packings[3]."x".$row_packings[4]."</option>";
	}
	$selectielijst_packings .= "</select><div id='resultselect_necessary_packaging'></div>";


Ik voeg die code op elke regel in, zodat ik een HTML tabel kan genereren.

Dat werkt prima. Maar als ik dan de volgende code er in zet start de pagina niet.

	$(document).ready(function() {
		$('#verpakkingen').change(function() {
			// Haal de geselecteerde waarde op
			var selectedValue = $(this).val();

			// Voer een AJAX-verzoek uit met de geselecteerde waarde als GET-parameter
			$.ajax({
				url: 'necessary_packaging.php',
				type: 'POST',
				data: { option: selectedValue },
				dataType: 'json', // Het verwachte datatype van de respons
				success: function(data) {
					// Verwerk de succesvolle respons hier
					$('#resultselect_necessary_packaging').html('De request is met succes uitgevoerd: ' + JSON.stringify(data));
				},
				error: function(xhr, status, error) {
					alert('Fout bij het uitvoeren van de AJAX-request: ' + error);
				}
			});
		});
	});


Verder heb ik deze code er in staan om afte vangen wat er moet gebeuren als de dropdown gebruikt wordt. (maar ik heb nu wel het vermoede dat het anders moet)

	if(isset($_POST['verpakkingen'])){
		$id = $_POST['id'];
		$id_packing_choosen=$_POST['verpakkingen'];
		$query_update_necessary_packaging = "UPDATE prstshp_collect_productstype_packing SET id_packing='$id_packing_choosen' WHERE id = '$id';";
		// Voer de query uit
		$result_update_necessary_packaging = mysqli_query($con, $query_update_necessary_packaging);
		
		$id = "";
		$query_update_necessary_packaging = "";
		echo "<meta http-equiv='refresh' content='0'>";
	}

Wordt de AJAX-request uitgevoerd? Heb je dat al gecontroleerd in de browser?
Heb je de jQuery library al ingeladen?

Verder vergeet je ook je data in je query te escapen!!


Vanwaar een metatag voor de redirect? Die heb je niet nodig voor AJAX.
Ik heb alles in 1 bestand staan. Zonder de jquery code start de pagina en zie ik netjes de tabel met overal het drop-down veld er bij. Ik kan daar een selectie maken, maar na verversen van de pagina is dat weer weg.

Is de volgorde van belang waarin ik de boel open?

De volgende 2 regels heb ik staan in de HTML header. Daarmee laad ik toch de jquery?
	<link rel="stylesheet" href="https://geschenkenlaantje.nl/js/jquery/ui/themes/base/minified/jquery-ui.min.css" type="text/css" media="all">
	<link rel="stylesheet" href="https://geschenkenlaantje.nl/js/jquery/ui/themes/base/minified/jquery.ui.theme.min.css" type="text/css" media="all">


De jquery code staat vrijwel boven aan in dit php bestand.


Die metatag kan inderdaad nu weg. (Is nu weg)
Dat is geen jQuery, maar stylesheets voor de theme van het additionele jQueryUI.
Oke... En de volgende regel heb ik vrijwel onderaan staan.

<script type="text/javascript" src="https://geschenkenlaantje.nl/js/jquery/ui/jquery-ui.min.js" ></script>

Als dit ook niets is, zou je me kunnen vertellen wat voor regel ik waar moet plaatsen?
- Ariën - op 09/10/2023 17:29:18

Gebruik bij voorkeur de externe CDN locatie.

Waarom?

Persoonlijk en professioneel hekel ik dergelijke CDNs.
Er zijn zelfs speciale populaire browserplugins tegen die CDN's, zoals Decentralyyes.
En met reden, want jQuery.com is van een anoniem bedrijf in California, in de VS.
Dan geldt wederom dat Europa er geen verdrag meer mee heeft, sinds 'Safe Harbour' en 'Privacy Shield', dus je begeeft je juridisch op dun ijs.
Ik zou het ten alle tijde afraden.

De workaround is simpel, gewoon zelf de laatste versie downloaden en via je eigen server hosten, dan is het hele probleem opgelost. Geldt ook voor al die gratis lettertypen in die 'gratis' Wordpress templates. Gewoon niet doen. Is slecht.

Reageren