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。您可以使用?&gt; HTML CODE &lt;?PHP。在您的情况下,您可以使用?&gt;&lt;/table&gt;&lt;?PHP,而不是使用echo '&lt;/table&gt;'; 行。供您考虑。

干杯。

【讨论】:

当 SQL 查询返回的行数不同时,这将失败。 根据我们所知道的信息,这很好。然而,真正需要的是 SQL 连接。如果没有正确的查询,PHP 将显示未排序的结果,我们最终会在表格中的名称旁边打印 ID,并且它们不会匹配。 已授予。从商业意义上说,你是对的。这里的问题是我们不知道,所以我只是按照他的具体要求去做。但是,考虑到选项和 SQL 的理解心态,我会接受您的建议。 太棒了。非常感谢您的回答。 没问题。如果您在 ID 和姓名之间失去联系,请使用 Adam's Recommendation。他对此负责。

以上是关于php中的JQuery表的主要内容,如果未能解决你的问题,请参考以下文章

提交后数据库表中的值没有更新

使用 jQuery 拖放从 SQL 表中删除一行

使用 jQuery (ajax) 和 PHP 插入我的数据库

jQuery:计算表中的行数

jQuery:如何删除表中的 tr 标签?

使用jquery动态添加和删除表中的行和列