2017-03-10 1 views
0

Je suis nouveau dans le framework CakePhp et actuellement je suis en train de tester un projet. Problème que j'ai, je peux peupler l'option de liste déroulante, mais quand je veux sélectionner une option, il ne sera pas enregistré sur la base de données. Ai-je manqué quelque chose?Enregistrement de données depuis une liste déroulante vers une base de données CakePHP

En utilisant ce code je peux remplir le menu déroulant - bookings.js

$("#contact_submit").click(function() { 

    var name = $("#name").val(); 
    var contact_email = $("#contact_email").val(); 
    var subject = $("#subject").val(); 
    var message = $("#txtmessage").val(); 
    var service = $("#sel1").val(); 

    console.log(name+contact_email+subject+message+service); 

    $.post("/inquiries/inquiry", //Required URL of the page on server 
      {// Data Sending With Request To Server 
       name: name, 
       email: contact_email, 
       subject: subject, 
       txt: message, 
       service_id: service, 
      }, 
      function (response) { // Required Callback Function 
      if (jQuery.parseJSON(response).status == 'success') { 
      if ($("#available").hasClass("hide")) { 
       $("#available").removeClass("hide"); 
      } 
      if (!$("#available").hasClass("hide")) { 
       $("#notavailable").addClass("hide"); 
      } 

      }else{ 
      if ($("#notavailable").hasClass("hide")) { 
       $("#notavailable").removeClass("hide"); 
      } 
      if (!$("#available").hasClass("hide")) { 
       $("#available").addClass("hide"); 
      } 
      } 
      }); 
}); 

InquriesController.php

public function inquiry() 
    { 
    $inquiry = $this->Inquiries->newEntity(); 
    if ($this->request->is('post')) { 

    $emailaddress = $this->request->data['email']; 
    $subject = $this->request->data['subject']; 
    $txt = $this->request->data['txt']; 
    $services = $this->request->data['service_id']; 
    $message = "this is a message"; 
    $inquiry = $this->Inquiries->patchEntity($inquiry, $this->request->data); 

     if ($this->Inquiries->save($inquiry)) { 

     $email = new Email('default'); 
     $email->from(['[email protected]' => 'Testing Hotel']) 
     ->to($emailaddress) 
     ->subject('Inquiry Mail') 
     ->emailFormat('html') 
     ->send($message); 

     echo json_encode(['status' => 'success']); 
     exit; 

     } else { 

     echo json_encode(['status' => 'failed']); 
     exit; 

     } 
    } 

} 

HTML CODE SNIPPET

 <div class="col-md-6 col-sm-6 col-xs-12"> 
      <input type="text" name="contact_email" id="contact_email" class="form-control" placeholder="Email *"> 
     </div> 
     <div class="col-md-12 col-sm-12 col-xs-12"> 
      <input type="text" id="subject" class="form-control" placeholder="Subject"> 
     </div> 
     <div class="col-md-12 col-sm-12 col-xs-12"> 

      <input class="form-control" name="txtmessage" id="txtmessage" rows="8" placeholder="Messages goes here.."></input> 

      <div class="form-group"> 
       <select class="form-control" id="sel1"> 
        <option>Select a service</option> 
        <?php 
         if (!empty($ServicesInfo)) { 
          foreach ($ServicesInfo as $Services):   
          ?> 
         <option value="<?= h($Services->name)?>"><?= h($Services->name)?></option> 
        <?php endforeach; } ?> 
       </select> 
      </div> 
+0

Les autres champs ne sont-ils pas également enregistrés? – Aarrbee

+0

seul le service_id qui n'est pas enregistré. –

+0

Vous envoyez '$ Services-> name' dans' service_id'. Votre base de données a peut-être un champ ** int ** et c'est pourquoi il ne sauvegarde pas le nom du service. – Aarrbee

Répondre

1

Comme je vous l'ai dit, votre champ int dans le tableau ne peut pas enregistrer le varchar du nom du service. Vous devez donc envoyer l'ID de service en tant que valeur à partir de l'option de sélection. Comme si:

<option value="<?= h($Services->id)?>"><?= h($Services->name)?></option> 
+0

Oui, votre code fonctionne. Merci mille fois. –