솔루션을 직접 찾을 수있는 몇 가지 문제점이 있습니다. 그래서 커뮤니티에 요청하는 것입니다. 젠드 프레임 워크로 앱을 개발 중입니다.젠드 : DB에서 요소를 선택하여 업데이트 할 수 없습니다.
일부 SELECT 요소가있는 양식이 있습니다. 그 중 일부는 DB의 데이터로 채워지고 일부는 양식의 데이터로 채워집니다 (-> addMultiOption (0, 'Option 1') ...).
삽입물이 잘 작동하지만 업데이트 기능에 문제가 있습니다. 양식 안의 옵션으로 채워진 SELECT 요소는 성공으로 채워지지만 DB 데이터로 채워진 SELECT 요소는 올바르게 설정되지 않습니다. DB 테이블의 첫 번째 옵션이 항상 선택됩니다.
그래서 내 코드에는 뭔가 잘못되었다고 생각됩니다. 더 나은 가시성을 위해 일부 요소를 삭제했습니다.
내 양식 :
<?php
class Application_Form_Pda extends Zend_Form
{
public function init()
{
$this->setName('ajouter');
$addFabForm = new Zend_Form;
$addFabForm->setAction('#'); // A compléter
$addFabForm->setMethod('post');
$addFabForm->setAttrib('id', ''); // A compléter
//Id
$id = new Zend_Form_Element_Hidden('PDA_ID');
$id->addFilter('Int');
//Select du Fabriquant
$nomFabriquant = new Zend_Form_Element_Select('FAB_NOM');
$nomFabriquant ->setLabel('Fabriquant')
->setRequired(true)
->addErrorMessage('Vous devez sélectionner un fabriquant');
$TableFab = new Application_Model_DbTable_Fabriquant();
//$nomFabriquant->addMultiOption(0, "");
foreach ($TableFab->fetchAll() as $ind) {
$nomFabriquant->addMultiOption($ind['FAB_ID'], $ind['FAB_NOM']);
}
// Select du Modèle
$nomModele = new Zend_Form_Element_Select('MOD_NOM');
$nomModele ->setLabel('Modèle')
->setRequired(true)
->addErrorMessage('Vous devez sélectionner un modèle');
$TableMod = new Application_Model_DbTable_Modele();
//$nomModele->addMultiOption(0, "");
foreach ($TableMod->fetchAll() as $ind) {
$nomModele ->addMultiOption($ind->MOD_ID, $ind->MOD_NOM);
}
// Champs texte, numéro IMEI
$imei = new Zend_Form_Element_Text('PDA_IMEI');
$imei ->setRequired(true)
->setLabel('IMEI')
->addFilter('StripTags')
/*->addValidator('Default_Validator_Imei')*/
->addValidator('NotEmpty');
// Select du Site
$nomSite = new Zend_Form_Element_Select('PDA_SITE');
$nomSite ->setLabel('Site')
->setRequired(true)
->addMultiOption(0, "Nantes")
->addMultiOption(1, "Paris")
->addErrorMessage('Vous devez sélectionner un site');
// Achat DSIV
$dsiv = new Zend_Form_Element_Checkbox('PDA_ACHATDSIV');
$dsiv ->setChecked(true)
->setLabel('Achat SVSI');
// Checkbox boite
$boite = new Zend_Form_Element_Checkbox('PDA_OPT_BOITE');
$boite ->setChecked(true)
->setLabel('Boite');
// Checkbox USB
$usb = new Zend_Form_Element_Checkbox('PDA_OPT_USB');
$usb ->setChecked(true)
->setLabel('Cable USB');
// Checkbox chargeur
$chargeur = new Zend_Form_Element_Checkbox('PDA_OPT_CHARGEUR');
$chargeur ->setChecked(true)
->setLabel('Chargeur');
// Checkbox casque
$casque = new Zend_Form_Element_Checkbox('PDA_OPT_CASQUE');
$casque ->setChecked(true)
->setLabel('Casque');
// Checkbox batterie
$bat = new Zend_Form_Element_Checkbox('PDA_OPT_BATTERIE');
$bat ->setChecked(true)
->setLabel('Batterie');
// Checkbox filaire
$fil = new Zend_Form_Element_Checkbox('PDA_OPT_FILAIRE');
$fil ->setChecked(true)
->setLabel('Filaire');
// Select de l'état
$etat = new Zend_Form_Element_Select('PDA_ETAT');
$etat ->setLabel('Etat')
->setRequired(true)
->addMultiOption(0, "Stock")
->addMultiOption(1, "En prêt")
->addMultiOption(2, "SAV")
->addMultiOption(3, "Sorti du parc")
->setValue('Stock')
->setLabel('Etat')
->addErrorMessage('Vous devez sélectionner un état');
$validPda = new Zend_Form_Element_Submit('envoyer');
$validPda ->setAttrib('id', 'boutonenvoyer');
$this->addElements(array($id, $nomFabriquant, $nomModele, $imei, $nomSite, $dsiv, $boite, $usb, $chargeur, $casque, $bat, $fil, $etat, $validPda));
}
}
내 컨트롤러 :
<?php
$form = new Application_Form_Pda(); //Création du formulaire
$form->envoyer->setLabel('Modifier'); // Ajout d'un libellé au bouton d'envoi
$this->view->form = $form; // Envoi du formulaire à la vue
if ($this->getRequest()->isPost()) { // si la méthode isPost de l'objet Request renvoi True, le formulaire à été envoyé
$formData = $this->getRequest()->getPost(); // Récupération des données avec la méthode getPost()
if ($form->isValid($formData)) { // Vérification de ces données avec la méthode isValid()
$id = (int)$form->getValue('PDA_ID'); // Récupération de l'ID du fabriquant
$idModele = $form->getValue('MOD_NOM');
$imei = $form->getValue('PDA_IMEI');
$nomSite = $form->getValue('PDA_SITE');
$dsiv = $form->getValue('PDA_ACHATDSIV');
$boite = $form->getValue('PDA_OPT_BOITE');
$usb = $form->getValue('PDA_OPT_USB');
$chargeur = $form->getValue('PDA_OPT_CHARGEUR');
$casque = $form->getValue('PDA_OPT_CASQUE');
$bat = $form->getValue('PDA_OPT_BATTERIE');
$fil = $form->getValue('PDA_OPT_FILAIRE');
$etat = $form->getValue('PDA_ETAT');
$pda = new Application_Model_DbTable_Pda(); // On créé un nouvel enregistrement
$pda->modifierPda($id, $idModele, $imei, $dsiv, $boite, $usb, $chargeur, $casque, $bat, $fil, $nomSite, $etat); // On affecte à cet enregistrement le nom du fabriquant, et on persiste en BDD
$this->_helper->redirector('index'); // pour finir, on redirige vers index de Fabriquant
} else {
$form->populate($formData); // Si la validation n'est pas passée, on réaffiche les données dans le formulaire
}
}
else {
$id = $this->_getParam('id', 0);
//var_dump($id);
if ($id > 0) {
$pda = new Application_Model_DbTable_Pda();
$formData2 = $pda->getPda($id);
//echo "L'ID est : " . $id; // Vérification
$form->populate($formData2);
} else {
echo "Information : nous sommes dans le else de modifierAction de PdaController.php";
echo "L'ID est : " . $id;
}
}
모델 :
<?php
class Application_Model_DbTable_Pda extends Zend_Db_Table_Abstract
{
protected $_name = 'pda';
protected $_primary = 'PDA_ID'; // La primary key
public function getPda($id){
$id = (int)$id;
$row = $this->fetchRow('PDA_ID = ' . $id);
if (!$row) {
throw new Exception("Impossible de trouver la ligne $id");
}
return $row->toArray();
}
public function ajouterPda($idModele, $imei, $dsiv, $boite, $usb, $chargeur, $casque, $bat, $fil, $nomSite, $etat) {
$idModele = (int)$idModele;
$data = array(
'MOD_ID' => $idModele,
'PDA_IMEI' => $imei,
'PDA_ACHATDSIV' => $dsiv,
'PDA_OPT_BOITE' => $boite,
'PDA_OPT_USB' => $usb,
'PDA_OPT_CHARGEUR' => $chargeur,
'PDA_OPT_CASQUE' => $casque,
'PDA_OPT_BATTERIE' => $bat,
'PDA_OPT_FILAIRE' => $fil,
'PDA_SITE' => $nomSite,
'PDA_ETAT' => $etat
);
$this->insert($data);
}
public function modifierPda($id, $idModele, $imei, $dsiv, $boite, $usb, $chargeur, $casque, $bat, $fil, $nomSite, $etat) {
$id = (int)$id;
$idModele = (int)$idModele;
$data = array(
'MOD_ID' => $idModele,
'PDA_IMEI' => $imei,
'PDA_ACHATDSIV' => $dsiv,
'PDA_OPT_BOITE' => $boite,
'PDA_OPT_USB' => $usb,
'PDA_OPT_CHARGEUR' => $chargeur,
'PDA_OPT_CASQUE' => $casque,
'PDA_OPT_BATTERIE' => $bat,
'PDA_OPT_FILAIRE' => $fil,
'PDA_SITE' => $nomSite,
'PDA_ETAT' => $etat
);
$this->update($data, 'PDA_ID = ' . $id);
}
public function supprimerFabriquant($id) {
$this->delete('PDA_ID = ' . (int)$id);
}
}
'Modèle'의 ID가 DB에 좋지만, 요소 DB 값으로 채우지 않습니다 ... 어떤 생각?
도움을 주셔서 감사합니다. :)
알았습니다! 그것이 문제였습니다. 초보자 실수. 도와 주셔서 감사합니다. – JuJ