我正在使用ZF2,并在一个表单中,我有两个选择:一个用于specialite(id = select_spe)和promotion(id = select_promo)。填充选择JQuery和PHP Zend ZF 2
我想根据第一个选择的值填充第二个选择(从数据库)。
这里是在数据库中的表(MySQL的):
CREATE TABLE `DB_EMARGEMENT`.`SPECIALITE`(
`id_specialite` INT UNSIGNED AUTO_INCREMENT,
`nom_specialite` VARCHAR(30) NOT NULL,
PRIMARY KEY(`id_specialite`)
) ENGINE = InnoDB;
CREATE INDEX `ix_id_specialite` ON SPECIALITE (`id_specialite`);
CREATE TABLE `DB_EMARGEMENT`.`PROMOTION`(
`id_promotion` INT UNSIGNED AUTO_INCREMENT,
`nom_promotion` VARCHAR(30) NOT NULL,
`id_specialite`INT UNSIGNED NOT NULL,
`annee_diplome` YEAR NOT NULL,
PRIMARY KEY(`id_promotion`),
CONSTRAINT `fk_id_specialite_id_specialite` FOREIGN KEY(`id_specialite`) REFERENCES SPECIALITE(`id_specialite`)
) ENGINE = InnoDB;
EmargementForm.php:
$this->add(array(
'name' => 'nom_specialite',
'type' => 'Select',
'options' => array(
'label' => 'Spécialité',
'label_attributes' => array(
'class' => 'col-sm-4 control-label'
),
// 'empty_option' => '-- Choisissez une spécialité --',
'value_options' => $this->getSpecialiteOptions(),
),
'attributes' => array(
'value' => '6', //set selected to '1'
'id' => 'select_spe',
)
));
$this->add(array(
'name' => 'nom_promotion',
'type' => 'Select',
'attributes' => array(
'class' => 'form-control',
),
'options' => array(
'label' => 'Promotion',
'label_attributes' => array(
'class' => 'col-sm-4 control-label'
),
'empty_option' => '-- Choisissez une promotion --',
),
'attributes' => array(
'id' => 'select_promo',
)
));
不要担心getSpecialiteOptions(),IL填充选择用数据形式数据库(这很好)。
在我search.phtml,我的JavaScript:
<script type="text/javascript">
$(document).ready(function() {
var $promo = $('#select_promo');
var $departements = $('#departements');
$("#select_spe").change(function() {
var id_specialite = $(this).val();
console.log(id_specialite);
$.ajax({
url: 'getPromotions.php',
data: 'id_specialite='+ id_specialite, // on envoie $_GET['id_region']
dataType: 'json', // on veut un retour JSON
success: function(json) {
$.each(json, function(index, value) { // pour chaque noeud JSON
// on ajoute l option dans la liste
//$("#select_promo").append('<option value="'+ index +'">'+ value +'</option>');
$promo.append('<option value="'+ 3 +'">'+ A +'</option>');
console.log(index, value);
});
}
});
});
});
</script>
<p>
<a href="<?php echo $this->url('emargement', array('action'=>'index'));?>">Retour</a>
</p>
<?php
echo $this->formHidden($form->get('num_carte'));
?>
<div class="form-group <?php if($this->formElementErrors($form->get('nom_specialite'))) : ?>has-error<?php endif; ?>">
<?php echo $this->formLabel($form->get('nom_specialite')) ?>
<div class="col-sm-4 col">
<?php echo $this->formSelect($form->get('nom_specialite')) ?>
<?php if($this->formElementErrors($form->get('nom_specialite'))) : ?>
<div class="alert alert-danger">
<?php echo $this->formElementErrors($form->get('nom_specialite'));?>
</div>
<?php endif; ?>
</div>
</div>
<div class="form-group <?php if($this->formElementErrors($form->get('nom_promotion'))) : ?>has-error<?php endif; ?>">
<?php echo $this->formLabel($form->get('nom_promotion')) ?>
<div class="col-sm-4 col">
<?php echo $this->formSelect($form->get('nom_promotion')) ?>
<?php if($this->formElementErrors($form->get('nom_promotion'))) : ?>
<div class="alert alert-danger">
<?php echo $this->formElementErrors($form->get('nom_promotion'));?>
</div>
<?php endif; ?>
</div>
</div>
...
此脚本调用getPromotions.php(这个脚本运作良好,我测试):
<?php
if(isset($_GET['go']) || isset($_GET['id_specialite'])) {
if(isset($_GET['go'])) {
} else if(isset($_GET['id_specialite'])) {
$selectstatus = htmlentities(intval($_GET['id_specialite']));
}
}
$selectstatus = 6;
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=DB_EMARGEMENT', 'root', 'france47');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$requete = 'SELECT id_promotion, nom_promotion FROM PROMOTION WHERE id_specialite='. $selectstatus;
$selectData = array();
$resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
$selectData[$donnees['id_promotion']][] = utf8_encode($donnees['nom_promotion']);
}
//--------------------------------------------------------------------------
// 3) echo result as json
//--------------------------------------------------------------------------
echo json_encode($selectData);
return $selectData;
的问题是我可以得到第一个select(specialite)的选定值(我用firebug看到),但是PHP脚本似乎没有被调用。我说因为“console.log(index,value); “不显示任何东西。 你有一个想法如何解决这个问题,并根据第一个选定的值得到第二个选定的填充?
感谢您的帮助。
我有另一个想法:也许我应该把代码里面的getPromotions.php内的控制器中的函数?请告诉我如果我错了 – Willheisen