Javascript CakePHP未正确显示数据库中的某些值

Javascript CakePHP未正确显示数据库中的某些值,javascript,html,jquery,css,cakephp,Javascript,Html,Jquery,Css,Cakephp,有一点背景知识,我正在研究一个已经存在的系统,它是由其他人制作的。由于缺乏CakePHP的知识和经验,我不得不为其添加功能。现在我的问题来了 我有一个“卡片”列表,每个卡片都包含数据库中的一行数据。卡本身显示最少的信息,但有一个编辑按钮,显示用户可以编辑值的模式。打开模式后,输入字段应该已经填充了来自特定卡的相应数据 我不知道我做错了什么,但显示的前3个值(id、发票\状态、服务\ id)不属于正确的行,而是始终属于数据库中的第一行 下面是我的代码 查看.ctp // List of item

有一点背景知识,我正在研究一个已经存在的系统,它是由其他人制作的。由于缺乏CakePHP的知识和经验,我不得不为其添加功能。现在我的问题来了

我有一个“卡片”列表,每个卡片都包含数据库中的一行数据。卡本身显示最少的信息,但有一个编辑按钮,显示用户可以编辑值的模式。打开模式后,输入字段应该已经填充了来自特定卡的相应数据

我不知道我做错了什么,但显示的前3个值(id、发票\状态、服务\ id)不属于正确的行,而是始终属于数据库中的第一行

下面是我的代码

查看.ctp

// List of item cards
<div class="row" >
  <div class="col-xl-4"
       style="margin-left: 60%; float:right;">
      <?php echo $this->Html->link('<span class="btn btn-primary" style="float:right" ><i class="flaticon2-plus"></i>Add Project Item</span>',
          array('type' => 'button'), ['escape' => false, 'data-target' => '#kt_modal_6projectitem', 'data-toggle' => 'modal'])
      ?>

  </div>


  <div class="col-lg-12" data-scroll="true" data-height="700"
       style="height: 700px; overflow: hidden; ">

      <div
          class="kt-timeline-v1 kt-timeline-v1--justified"
          style="margin-left:5%;">
          <?php if (!empty($client->client_projects)): ?>
              <?php foreach (array_reverse($client->client_projects) as $clientProjects): ?>

                  <div class="kt-timeline-v1__items"
                       style="margin-bottom: -5%;">
                      <div class="kt-timeline-v1__marker"></div>
                      <div class="kt-timeline-v1__item kt-timeline-v1__item--first">
                          <div class="kt-timeline-v1__item-circle">
                              <div class="kt-bg-danger"></div>
                          </div>
                          <span class=" kt-font-brand"></span>

                          <div
                              class="kt-timeline-v1__item-content"
                              style="max-width: 90%;">
                              <div class="kt-timeline-v1__item-title ">
                                  <div style="float: right; ">
                                      <button
                                          class="editProjectItem btn btn-sm btn-clean btn-icon btn-icon-sm"
                                          data-projectItem-id="<?php echo $clientProjects->id ?>"
                                          data-projectItem-serviceid = "<?php echo $clientProjects->service_id ?>"
                                          data-projectItem-price = "<?php echo $clientProjects->price ?>"
                                          data-projectItem-progress = "<?php echo $clientProjects->progress ?>"
                                          data-projectItem-invoiceStatus="<?php echo $clientProjects->invoice_status ?>">
                                          <i class="flaticon2-note"
                                             data-toggle="kt-popover"
                                             data-content="Change Invoice Status"
                                             data-placement='bottom'></i>
                                      </button>

                                      <?= $this->Html->link('<span class="btn btn-sm btn-clean btn-icon btn-icon-sm"><i class="flaticon2-delete"></i></span>', ['controller' => 'ClientProjects', 'action' => 'delete', $clientProjects->id], ['escape' => false, 'data-toggle' => "kt-popover", 'data-content' => "delete Project Item", 'data-placement' => 'bottom', 'confirm' => 'Are you sure you wish to delete this recipe?']) ?>

                                  </div>

                              </div>

                              <div
                                  class="kt-timeline-v1__item-body "
                                  style="word-wrap:break-word;">
                                  <p>
                                      Service: <?php echo $clientProjects->service_id; ?> <br>
                                      Price: $<?php echo $clientProjects->price; ?> <br>
                                      <?=  nl2br(h($clientProjects->invoice_status)) ?>
                                  </p>
                              </div>
                          </div>
                      </div>

                  </div>

              <?php endforeach; ?>
          <?php endif; ?>
      </div>
  </div>
</div>



// Edit item modal
<div class="modal-body">
                <span>
                    <?php ?>
                    <?= $this->Form->create(null, ['type' => 'post', 'patch', 'put', 'id' => 'editClientProjectForm', 'url' => [
                        'controller' => 'ClientProjects',
                        'action' => 'edit/'
                    ]]) ?>
                    <fieldset>
                                <div class="form-group row">
                                    <div class="col-lg-4">
                                        <?php echo $this->Form->hidden('id', ['value' => $clientProjects->id, 'class' => 'form-control']); ?>
                                    </div>
                                </div>
                                <div class="form-group row">
                                    <div class="col-lg-4">
                                        <?php echo $this->Form->control('invoice_status', ['class' => 'form-control', 'value' => $clientProjects->invoice_status, 'empty' => '--select--', 'options' => array('' => '', 'Half-invoiced' => 'Half-invoiced', 'Half-paid' => 'Half-paid','Final-invoiced' => 'Final-invoiced', 'Final-paid' => 'Final-paid')]); ?>
                                    </div>

                                </div>
                                <div class="form-group row">
                                    <div class="col-lg-12">
                                        <?php echo $this->Form->control('service_id', ['class' => 'form-control', 'value' => $clientProjects->service_id, 'type' => 'textarea']); ?>
                                        <div
                                            class="kt-input-icon">
                                            <span class="kt-input-icon__icon kt-input-icon__icon--right"><span></span></span>
                                        </div>
                                    </div>
                                </div>
                                <div class="form-group row">
                                    <div class="col-lg-12">
                                        <?php echo $this->Form->control('price', ['class' => 'form-control', 'value' => $clientProjects->price, 'type' => 'textarea', 'placeholder' => '$']); ?>
                                        <div
                                            class="kt-input-icon">
                                            <span
                                                class="kt-input-icon__icon kt-input-icon__icon--right"><span></span></span>
                                        </div>
                                    </div>
                                </div>
                                <div class="form-group row">
                                    <div class="col-lg-12">
                                        <?php echo $this->Form->control('progress', ['class' => 'form-control', 'value' => $clientProjects->progress, 'type' => 'textarea']); ?>
                                        <div
                                            class="kt-input-icon">
                                            <span
                                                class="kt-input-icon__icon kt-input-icon__icon--right"><span></span></span>
                                        </div>
                                    </div>
                                </div>


                    </fieldset>
                    <div class="modal-footer">
                            <?= $this->Form->button('Submit', ['class' => 'btn btn-success']) ?>
                            <?= $this->Form->end() ?>
                            <?php echo $this->Html->link('Cancel',
                                array(
                                    'type' => 'button'),
                                array('class' => 'btn btn-secondary', 'data-dismiss' => 'modal',))
                            ?>
                        </div>

                                            </span>
</div>



// Edit item modal script
<script>
  $(document).on("click", ".editProjectItem", function () {

      var projectItemId = $(this).attr("data-projectItem-id");
      var service_id = $(this).attr("data-projectItem-serviceId");
      var price = $(this).attr("data-projectItem-price");
      var progress = $(this).attr("data-projectItem-progress");
      var invoice_status = $(this).attr("data-projectItem-invoiceStatus");

      //Half-invoiced' => 'Half-invoiced', 'Half-paid' => 'Half-paid','Final-invoiced' => 'Final-invoiced', 'Final-paid' => 'Final-paid'

      $('#id').val(projectItemId);
      if (invoice_status == "Half-invoiced") {
          $('#invoice_status option[value=Half-invoiced]').prop('selected', true);
      } else if (invoice_status == "Half-paid" || invoice_status == "Half-paid"){
          $('#invoice_status option[value=Half-paid]').prop('selected', true);
      } else if (invoice_status == "Final-invoiced" || invoice_status == "Final-invoiced"){
          $('#invoice_status option[value=Final-invoiced]').prop('selected', true);
      } else if (invoice_status == "Final-paid" || invoice_status == "Final-paid"){
          $('#invoice_status option[value=Final-paid]').prop('selected', true);
      };



      $('#service_id').val(service_id);
      $('#price').attr('value', price);
      $('#progress').attr('value', progress);

      $('#editClientProject').modal('show');
      $('#editClientProjectForm').submit(function(e){
          e.preventDefault();
          var form = $(this);
          $.ajax({
              url: '<?php echo $this->Url->build([
                  'controller' => 'ClientProjects',
                  'action' => 'edit'
              ])?>' + '/' + projectItemId,
              type:'POST',
              data:form.serialize(),
              success: function(){
                  window.location.reload();
              }


          });

      })
  })


</script>
public function view($id = null)
  {

      $user_id=$this->Auth->user('id');
      $user_role=$this->Auth->user('role');
      $user_name=$this->Auth->user('username');


      $this->set("user_name", $user_name);
      $this->set("user_role", $user_role);


      $client = $this->Clients->get($id, [
          'contain' => [ 'Activities', 'Emails', 'Phones', 'Projects', 'ClientNotes', 'ClientProjects']
      ]);

      $this->set('client', $client);
      $this->set('id', $id);
      $this->loadModel('Activities');
      $this->loadModel('ClientNotes');
      $this->loadModel('ClientProjects');

      $activity = $this->Activities->newEntity();
      $clientNote = $this->ClientNotes->newEntity();
      $clientProject = $this->ClientProjects->newEntity();


      $this->loadModel('Projects');
      $this->loadModel('Talents');
      $client_talent = $this->Clients->get($id, [
          'contain' => [ 'Activities', 'Emails', 'Phones', 'Projects'=>['Talents'],'ClientNotes', 'ClientProjects']
      ]);
      //    var_dump($client_talent['projects'][0]['talents']);
      $this->set('client_talent',$client_talent['projects']);

      if($this->request->is('post')) {

          $clientProject = $this->ClientProjects->patchEntity($clientProject, $this->request->getData());
          $clientProject->client_id = $id;
          $clientProject->progress = 'Potential';

          if ($this->ClientProjects->save($clientProject)) {
              $this->Flash->success(__('The project item has been added.'));;
              return $this->redirect(['action' => 'view', $id]);
          }
      }
      $this->set('clientProject', $clientProject);

提前感谢您的帮助。我是这个论坛和CakePHP的新手,我非常感谢你给我的任何帮助。如果我还需要显示代码的其他部分,或者我的解释不清楚,请告诉我。再次感谢您的帮助

您对PHP、HTML和JavaScript/jQuery了解多少?我真的不太了解CakePHP,特别是它在控制器中使用的语法,但我对普通PHP非常了解。我会说我对Javascript很在行,我可以寻找JS和JQuery文档。HTML,我想说的是基础知识,好吧,看来表单(所有内容都只有一个表单)是由第一条记录中的值构建和填充的(因为它以相反的顺序通过它们,所以第一条是最后一条,这就是创建表单时留下的实体)。JavaScript尝试根据单击的按钮中的数据属性设置值。使用
console.log
查看它是否正确地检索了这些值,并查看生成的HTML表单,确保控件的ID是
click
处理程序在写入控件时所期望的ID。简言之,CakePHP并没有破坏这一点的任何具体信息,这只是一个确保HTML和JavaScript“连接”正确的问题。谢谢Greg,我会再次检查,但我不明白的是,价格和进度显示正确,而其他的没有。你对PHP、HTML和JavaScript/jQuery一般了解多少?我真的不太了解CakePHP,特别是它在控制器中使用的语法,但是我对普通的PHP非常满意。我会说我对Javascript很在行,我可以寻找JS和JQuery文档。HTML,我想说的是基础知识,好吧,看来表单(所有内容都只有一个表单)是由第一条记录中的值构建和填充的(因为它以相反的顺序通过它们,所以第一条是最后一条,这就是创建表单时留下的实体)。JavaScript尝试根据单击的按钮中的数据属性设置值。使用
console.log
查看它是否正确地检索了这些值,并查看生成的HTML表单,确保控件的ID是
click
处理程序在写入控件时所期望的ID。简言之,CakePHP并没有破坏这一点的任何具体信息,这只是一个确保HTML和JavaScript“连接”正确的问题。谢谢Greg,我会再次尝试检查,但我不明白的是,价格和进度显示正确,而其他显示不正确。