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