用PHP创建JQuery表格

6
我该如何让一个包含SQL查询和JQuery的PHP文件一起工作?最终目标是获得多个表格,就像这个http://jsfiddle.net/96Lhog5g/3/演示一样,但使用以下PHP代码。类似于这样但是用PHP enter image description here -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 code:

    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,但我的知识有限。


1
你能展示一下你想要的输出是什么吗?你的 PHP 构建的表格结构与你在 JS Fiddle 示例中的非常不同。 - Adam Konieska
你能分享一下你正在处理的数据以及它的结构吗?如果两个 SQL 查询返回不同长度的结果,你将会遇到问题。你可能需要使用 SQL 连接来检索你感兴趣的数据。 - Adam Konieska
我已经编辑了问题,并添加了一张图片来展示我的意图。数据是一个包含服务名称(字符串)和每个服务对应的ID(整数)的列。 jQuery根据jQuery中的变量($extraRows.length; i = i+4),在这种情况下为4,拆分表格。 - user19566
2个回答

2
没有了解数据结构,很难确定如何操作。您需要在两个数据库列上执行 SQL join,以确保使用正确的数据。
如果没有 SQL join,两个查询返回的数据长度可能不同,并且肯定不匹配。(例如:它会将名称显示在不属于该名称的 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


1
非常感谢您的回答。现在它运行得很好。 - user19566

0
尝试将您的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);
    ?>

您正在使用rowcount来确定何时结束表格。 Modulus(%)运算符表示如果当前行可被2整除,则结束表格并开始新表格。 如果您想每个表格有三行,请将2更改为3。

DEVNOTE:您不需要使用echo。 您可以使用?> HTML CODE <?PHP。 在您的情况下,您可以使用?></table><?PHP而不是使用echo '</table>';这一行。 供您参考。

干杯。


当SQL查询未返回相同数量的行时,这将会失败。 - Adam Konieska
根据我们所知道的信息,这很好。然而,真正需要的是 SQL Join。如果没有正确的查询,PHP 将显示未排序的结果,我们最终会在表格中将 ID 打印在名称旁边,它们不匹配。 - Adam Konieska
授权了。而且你是正确的,从商业角度来看。问题在于我们不知道,所以我只是按照他具体要求去做了。然而,如果有选择的话,并且考虑到 SQL 的心态,我会选择你的建议。 - arcee123
1
太好了。非常感谢您的回答。 - user19566
1
没问题。如果ID和名称之间失去连接,请按照Adam的建议进行操作。他已经考虑到了这一点。 - arcee123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接