php中的JQuery表
Posted
技术标签:
【中文标题】php中的JQuery表【英文标题】:JQuery table in php 【发布时间】:2016-05-11 10:45:42 【问题描述】:我怎样才能让一个带有 sql 查询和 JQuery 的 php 文件一起工作?最后一个目标是获取多个表作为http://jsfiddle.net/96Lhog5g/3/ 演示,但使用下面的 php 代码。类似这样的东西,但在 php -php代码:
<?php
$dbconn = pg_connect(
$sql1 = "SELECT unaccent(name) from base1;";
$sql2 = "select id from servic;";
$name = pg_query($sql1);
$ident= pg_query($sql2);
$data1 = pg_fetch_all_columns($name);
$data2 = pg_fetch_all_columns($ident);
$count = count($data1);
echo '<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">';
echo '<tr >';
echo '<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>';
echo '<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>';
echo '</tr>';
for ($i = 0; $i < $count; $i++)
$data1[$i];
$data2[$i];
echo '<tr ><td>' . $data2[$i] . '</td>';
echo '<td>' . $data1[$i] . '</td></tr>';
echo '</table>';
pg_free_result($name);
pg_close($dbconn);
?>
JQuery 代码:
var $main = $('#mainTable'),
$head = $main.find('tr:first'),
$extraRows = $main.find('tr:gt(2)');
for( var i = 0; i < $extraRows.length; i = i+4)
$('<table>').append($head.clone(),
$extraRows.slice(i,i+2)).appendTo($main.parent());
,来自http://jsfiddle.net/96Lhog5g/3/。我已经尝试将此代码改编为 php,但我对它的了解有限。 提前致谢。
【问题讨论】:
你能告诉我们你想要的输出是什么吗?您的 PHP 正在构建的表结构与您的 JS fiddle 示例非常不同。 您能否分享您正在使用的数据以及它的结构?如果两个 SQL 查询返回不同长度的结果,您将遇到问题。您可能需要使用 SQL 连接来检索您感兴趣的数据。 我已经编辑了这个问题,并添加了一张图片来显示我想要得到的东西。数据是具有服务名称(字符串)的列和具有每个 ID(整数)的另一列。在这种情况下,jquery 根据 jquery($extraRows.length; i = i+4),4 中的变量拆分表。 【参考方案1】:如果不知道数据的结构,很难分辨。您肯定需要在两个数据库列上执行SQL join,以便您使用正确的数据。
如果没有 SQL 连接,您在两个查询中获得的数据可能长度不同,而且肯定不会匹配。 (即它会在不属于它的 ID 旁边显示名称)
PHP
/*
//This is an example SQL join, guessing at how your data is structured based on the queries used in your question.
$sql = "SELECT unaccent(base1.name),servic.id FROM base1 INNER JOIN servic ON base1.id = servic.id;";
$result = pg_query($sql);
$data = pg_fetch_all($result)
*/
//lacking any SQL data, we'll build a test dataset for now
$data = array();
function buildTestData()
global $data;
for($i = 1; $i < 24; $i++)
$testData = array("name" => "name ".chr($i+64), "id" => $i);
array_push($data,$testData);
buildTestData();
//end of test data
//set the number of rows you'd like each table to have
$splitPoint = 4;
$count = count($data);
for ($i = 0; $i < $count; $i++)
if($i % $splitPoint == 0)
echo "\n<table id=\"mainTable\" border=\"1\" style=\"width:450px;position:relative;left:80px;\">";
echo "\n\t<tr>";
echo "\n\t\t<th style=\"background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow\">ID</th>";
echo "\n\t\t<th style=\"background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow\">NAME</th>";
echo "\n\t</tr>";
echo "\n\t<tr>";
echo "\n\t\t<td>" . $data[$i]['id'] . "</td>";
echo "\n\t\t<td>" . $data[$i]['name'] . "</td>";
echo "\n\t</tr>";
if(($i +1) % $splitPoint == 0 || $i == $count-1)
echo "\n</table>";
结果
PHP 将生成如下格式的 html:
<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">
<tr>
<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>
<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>
</tr>
<tr>
<td>1</td>
<td>name A</td>
</tr>
<tr>
<td>2</td>
<td>name B</td>
</tr>
<tr>
<td>3</td>
<td>name C</td>
</tr>
<tr>
<td>4</td>
<td>name D</td>
</tr>
</table>
<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">
<tr>
<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>
<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>
</tr>
<tr>
<td>5</td>
<td>name E</td>
</tr>
<tr>
<td>6</td>
<td>name F</td>
</tr>
<tr>
<td>7</td>
<td>name G</td>
</tr>
<tr>
<td>8</td>
<td>name H</td>
</tr>
</table>
<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">
<tr>
<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>
<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>
</tr>
<tr>
<td>9</td>
<td>name I</td>
</tr>
<tr>
<td>10</td>
<td>name J</td>
</tr>
<tr>
<td>11</td>
<td>name K</td>
</tr>
<tr>
<td>12</td>
<td>name L</td>
</tr>
</table>
<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">
<tr>
<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>
<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>
</tr>
<tr>
<td>13</td>
<td>name M</td>
</tr>
<tr>
<td>14</td>
<td>name N</td>
</tr>
<tr>
<td>15</td>
<td>name O</td>
</tr>
<tr>
<td>16</td>
<td>name P</td>
</tr>
</table>
<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">
<tr>
<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>
<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>
</tr>
<tr>
<td>17</td>
<td>name Q</td>
</tr>
<tr>
<td>18</td>
<td>name R</td>
</tr>
<tr>
<td>19</td>
<td>name S</td>
</tr>
<tr>
<td>20</td>
<td>name T</td>
</tr>
</table>
<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">
<tr>
<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>
<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>
</tr>
<tr>
<td>21</td>
<td>name U</td>
</tr>
<tr>
<td>22</td>
<td>name V</td>
</tr>
<tr>
<td>23</td>
<td>name W</td>
</tr>
</table>
您可以在这个 PHP 沙箱中看到代码的结果:http://sandbox.onlinephpfunctions.com/code/e2d73696445f709840084f8a7f40311353b0d8fc
【讨论】:
非常感谢您的回答。现在它的工作很棒。【参考方案2】:尝试将你的 for 语句向外推,并插入几个 if。请原谅...我是在内存中写的,而不是在 IDE 中。
<?php
$dbconn = pg_connect(
$sql1 = "SELECT unaccent(name) from base1;";
$sql2 = "select id from servic;";
$name = pg_query($sql1);
$ident= pg_query($sql2);
$data1 = pg_fetch_all_columns($name);
$data2 = pg_fetch_all_columns($ident);
$count = (count($data1) > count($data2) ? count($data1) : count($data2));
for ($i = 0; $i < $count; $i++)
if ($i % 2 = 0)
echo '</table>';
if (($i = 0) || ($i % 2 = 0))
echo '<table id="mainTable" border="1" style="width:450px;position:relative;left:80px;">';
echo '<tr >';
echo '<th style="background: #3498db; width:5px;text-align: center ;font-size:12px;font-family:Arial Narrow">ID</th>';
echo '<th style="background: #3498db; width:10px;text-align: center ;font-size:12px;font-family:Arial Narrow">NAME</th>';
echo '</tr>';
echo '<tr ><td>' . (isset($data2[$i]) ? $data2[$i] : 'N/A') . '</td>';
echo '<td>' . (isset($data1[$i]) ? $data1[$i] : 'N/A' ) . '</td></tr>';
echo '</table>';
pg_free_result($name);
pg_close($dbconn);
?>
您正在使用您的行数来确定何时结束表格。 Modulus(%) 运算符表示如果当前行可被 2 整除,则结束表并开始新表。如果您希望每张表三行,请更改 2 -> 3。
DEVNOTE:你不需要使用 echo。您可以使用?> HTML CODE <?PHP
。在您的情况下,您可以使用?></table><?PHP
,而不是使用echo '</table>';
行。供您考虑。
干杯。
【讨论】:
当 SQL 查询返回的行数不同时,这将失败。 根据我们所知道的信息,这很好。然而,真正需要的是 SQL 连接。如果没有正确的查询,PHP 将显示未排序的结果,我们最终会在表格中的名称旁边打印 ID,并且它们不会匹配。 已授予。从商业意义上说,你是对的。这里的问题是我们不知道,所以我只是按照他的具体要求去做。但是,考虑到选项和 SQL 的理解心态,我会接受您的建议。 太棒了。非常感谢您的回答。 没问题。如果您在 ID 和姓名之间失去联系,请使用 Adam's Recommendation。他对此负责。以上是关于php中的JQuery表的主要内容,如果未能解决你的问题,请参考以下文章