Mir wurde gesagt, mein vorheriger Beitrag war nicht sehr klar, so werde ich versuchen, es auf eine andere Weise zu fragen.php, jquery und ajax - bevölkern Auswahl Dropdown auf dem vorherigen ausgewählten Wert
Ich arbeite in einem OOP Rezeptbuch. Im Moment arbeite ich daran, Rezepte hinzuzufügen. Dafür zeige ich eine Dropdown-Liste mit Messungen an. Wenn der Benutzer die Messung auswählt, möchte ich ein weiteres Dropdown mit den für diese measurement_id gefundenen Einheiten anzeigen.
Die Tabellen auf mysql sind Messungen mit ID- und Name-Spalte und Einheiten mit ID, Name und Spalte measurement_id (measurement_id ist der Fremdschlüssel für die Units-Tabelle). Mehrere Einheiten gehören zu einer Messung.
Dafür habe ich eine Messung PHP-Objekt/Klasse erstellt.
Auf new_recipe.php, schließe ich ein Formular, mit dem Rest der Spalten ein Rezept zu schreiben, werde ich nur die Angelegenheit enthält ich die Behandlung jetzt:
HINWEIS: auf measurement.php, die Messung PHP Objekt/class verfügt über folgende Methoden: - display_measurements() -> Wählt einfach ALLE Messungen aus der Messtabelle aus. - get_units_for_measurement ($ measurement_id) -> Wählt ALLE Einheiten mit derselben measurement_id aus.
public function display_measurements() {
include 'includes/db_connection.php';
try {
$sql = "SELECT id, name FROM measurements";
$results = $conn->prepare($sql);
$results->execute();
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage() . '<br />';
return array();
}
return $results->fetchAll(PDO::FETCH_ASSOC);
}
public function get_units_for_measurement($measurement_id = ':measurement_id') {
include 'includes/db_connection.php';
try {
$sql = "SELECT measurements.id, units.id, units.name "
. "FROM measurements "
. "JOIN units "
. "ON measurements.id=units.measurement_id WHERE measurements.id=:measurement_id";
$result = $conn->prepare($sql);
$result->bindParam(':measurement_id', $measurement_id, PDO::PARAM_INT);
$result->execute();
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage() . '<br />';
return array();
}
return $result->fetchAll(PDO::FETCH_ASSOC);
}
<form id="newRecipe" method="POST" action="new_recipe.php">
(...)
<div class="input_group">
<label for="name" class="required">Name</label>
<input name="name" type="text" value="" />
</div>
<div class="input_group">
<label for="measurements" class="required">Measurements</label>
<select name="measurements" class="selectMeasurement">
<option disabled selected value=""> -- select a measurement -- </option>
<?php
$measurements = $measurementObj->display_measurements();
foreach ($measurements as $measurement) {
echo '<option value="' . $measurement['id'] . '" ';
echo '>' . $measurement['name'] . '</option>';
}
?>
</select>
</div>
<div class="input_group">
<label for="units" class="required">Units</label>
<select id="selectUnit" name="units">
<option disabled selected value=""> -- select a unit -- </option>
<?php
if (isset($_POST['measurements'])) {
die('ddddd');
// $units = $measurementObj->get_units_for_measurement($_POST['measurements']);
// foreach ($units as $unit) {
// echo '<option value="' . $unit['id'] . '" ';
// echo '>' . $unit['name'] . '</option>';
// }
}
?>
</select>
</div>
(...)
<button class="submit" type="submit" name="submit">Submit</button>
</form>
Sie können in der Form zwei Dropdown-Listen auswählen; der erste ist der, wo ich die Messungen anzeige, und der nächste, den ich mit einigen kommentierten Zeilen habe, ist, wo ich die im ersten Dropdown ausgewählte measurement_id "filtern" soll, um die zugehörigen Einheiten anzuzeigen Wenn die Seite nicht neu geladen wurde, wurde mir geraten, das mit Ajax zu tun (was mir nicht sehr vertraut ist). Diese Ajax-Aufruf in eine JS-Datei, in die Fußzeile des Projekts verknüpft.
$(document).ready(function() {
$('#newRecipe').on('change','.selectMeasurement', function(){
var selectedMeasurementId = this.value;
$.ajax({
method: 'POST',
url: 'classes/measurement.php',
data: selectedMeasurementId
});
return true;
});
});
oder
$ (document) .ready (function() { $ ('# newRecipe') auf (‘ . Änderung‘, 'selectMeasurement', function() {var selectedMeasurementId = this.value; .ajax $ ({ Methode: 'POST', url: 'Klassen/measurement.php', Daten: selectedMeasurementId, Erfolg: Funktion() { Alarm (selectedMeasurementId); } }); });
});
In der JS-Datei, was ich im Sinn hatte, auf Erfolg war, rufen Sie die Methode Objekt:
Erfolg: $ measurementObj-> get_units_for_measurement ($ _ POST [ 'Messungen']), und ich verstehe, ich, wenn habe eine Ajax-Antwort, ich möchte die Einheiten für die gegebene Messung bekommen, aber ich kann hier kein PHP-Objekt aufrufen.
Ich habe auch versucht, etwas zu tun, wenn die Messungen eingestellt sind. Nach dem Wählen Sie für die Messungen habe ich versucht zu tun:
if (isset($_POST['measurements'])) {
//then $measurementObbj->get_units_for_measurement|($_POST['measurements']), but it seems it does not "detect" the measurements has been set.
}
Also meine Frage ist .... wie kann ich das measurementObj- $ ausführen> get_units_for_measurement (measurement_id im ersten Drop-Down ausgewählt), für den Erfolg der Ajax-Anfrage?
Ich hoffe, es ist jetzt ein bisschen klarer. Danke
Hmm .. es sehr verwirrend ist nur auf Ihre Frage zu verstehen. –
Sie haben ein paar Dinge miteinander vermischt. Zuerst, was Sie in dieser Datei haben: 'classes/measure.php'? ist es die _ Maßklasse_ oder eine Datei, die dafür verantwortlich ist, die'Ajax'-Anfrage zu erhalten und die Daten zurückzusenden, nach denen Ajax gefragt hat? – EhsanT
Ohm .... es ist die _Mess-Klasse. Soll ich die Datei anders umbenennen? Ich habe tatsächlich gesucht, wenn es üblich ist, die Datei mit Kapital zu benennen, als die Klasse, aber ich habe nichts gefunden, also habe ich nur mit dem Klassennamen benannt.Die Datei, die für die Ajax-Anfrage zuständig ist, befindet sich im Moment nur in der Fußzeile ^^ –