我是一名FileMaker程序员,试图使用PHP的API将数据库移植到Web上。我的php页面正常工作,从我的搜索中检索并显示正确的数据,但是每当我的用户选择一个复选框(Apple,Microsoft等)而不点击提交按钮时,我想在我的页面上过滤结果。我知道我需要使用ajax来执行此操作,但是我可以将ajax注入下面的这个页面,还是我现在必须将页面分解为各种较小的文件,php和js文件?
我发现的大多数样本都是基于json的,它们过滤客户端。 FileMaker返回一个带有PHP的奇数类型数组,需要进一步处理才能进入json格式。每当我的用户点击一个复选框时,我理想地寻找一种方法来回发表单,如果可能的话,我认为这可能更简单?
<?php require_once('../db.php');
if(isset($_REQUEST['search'][0]))
{
$find = $fm->newCompoundFindCommand('Data');
$request1 = $fm->newFindRequest('Data');
if(isset($_REQUEST['search'][1])){ $request2 = $fm->newFindRequest('Data'); }
if(isset($_REQUEST['search'][2])){ $request3 = $fm->newFindRequest('Data'); }
$request1->addFindCriterion('Company',$_REQUEST['search'][0]);
if(isset($_REQUEST['search'][1])){ $request2->addFindCriterion('Company',$_REQUEST['search'][1]); }
if(isset($_REQUEST['search'][2])){ $request3->addFindCriterion('Company',$_REQUEST['search'][2]); }
$find->add(1,$request1);
if(isset($_REQUEST['search'][1])){ $find->add(2,$request2); }
if(isset($_REQUEST['search'][2])){ $find->add(3,$request3); }
$result = $find->execute();
} else {
$request = $fm->newFindCommand('Data');
$request->addFindCriterion('Company','*');
$result = $request->execute();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
</head>
<body>
<div id="filters">
<form action="data_table.php" method="post">
<input class="category" id="check1" name="search[]" type="checkbox" value="Apple">
<label for="check1">Apple</label>
<input class="category" id="check2" name="search[]" type="checkbox" value="Google">
<label for="check2">Google</label>
<input class="category" id="check3" name="search[]" type="checkbox" value="Microsoft">
<label for="check3">Microsoft</label> <input type="submit" value="Submit">
</form>
</div>
<table border="0" class="table table-striped" width="100%">
<thead>
<tr>
<th>Company</th>
</tr>
</thead><?php if(!FileMaker::isError($result)) {?>
<tbody class="searchable">
<?php foreach($result->getRecords() as $row){ ?>
<tr>
<td><?php echo $row->getField('Company'); ?></td>
</tr><?php } ?>
</tbody><?php } ?>
</table><!-- end row -->
</body>
</html>
答案 0 :(得分:0)
让我试着打破你的代码部分。
$request->addFindCriterion('Company','*');
$result = $request->execute();
此时,您在应用查询后获得了结果。只需在json中编码就像
一样echo json_encode($result);
这是你的api端点。你将在这里进行所有ajax查询。将所有html内容移动到单独的文件中。
现在这部分代码
<table border="0" class="table table-striped" width="100%">
<thead>
<tr>
<th>Company</th>
</tr>
</thead><?php if(!FileMaker::isError($result)) {?>
<tbody class="searchable">
<?php foreach($result->getRecords() as $row){ ?>
<tr>
<td><?php echo $row->getField('Company'); ?></td>
</tr><?php } ?>
</tbody><?php } ?>
</table><!-- end row -->
已经过时了,因为你可能已经猜到了显而易见的原因。此文件中没有$result
。它只是一个静态的HTML。您需要在此文件中将ajax请求发送到我们上面刚刚使用的api点。您将在json中获得响应。将其填充到表格中。同样,如果用户有其他搜索参数,请使用正确的搜索生成ajax请求,并在javascript中重新填充表。
这纯粹取决于您正在构建的应用程序类型。如果它有点像Single Page app
那么我会建议javascript过滤,否则请在api中过滤。
记住javascript没有正确的sql数据库,它们是localstorage
的实现,因此执行可能很长,但这是人们为持久性应用程序所做的权衡。