使用php更改在MySQL查询中生成的html表列的值

时间:2017-01-06 16:28:08

标签: php mysql dom

所以,我有一个表,它是由MySQL查询产生的。此查询是MySQL DB中两个表的内部联接,其中一个提供产品名称,另一个提供HTML中的价格表(可以包含2个或更多列,以及可变行数)。

Mysql查询:

SELECT catalog_product_entity_varchar.value as `name`, catalog_product_entity_text.value as `html_table` from catalog_product_entity_varchar INNER JOIN catalog_product_entity_text on catalog_product_entity_varchar.entity_id=catalog_product_entity_text.entity_id AND catalog_product_entity_text.attribute_id=171 AND catalog_product_entity_varchar.attribute_id=71"

要输出表格,我使用了以下内容:

echo '<table border="1">';

if ($result->num_rows > 0) {
    // output data of each row
        while($row = $result->fetch_assoc()) {
         echo
            '<th>'.$row["name"]. '</th><tr><td>'. $row["html_table"].'</td></tr>';

    }

现在,我需要更改&#34; html_table&#34;部分,具体来说,来自第二列的第二行(第一行是文本)(第一行也是文本)。

我已经查看了几个解析器,比如simplehtmldom或DOM类的php,但我仍然无法掌握如何更改那些特定的行/列。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:0)

您需要执行两个步骤:

  • 添加JQuery代码,该代码将请求发送到PHP文件并获得响应。获得它后将加载该JSON并显示在table-&gt; tbody section。
  • PHP文件将接收请求,然后连接MySQLi并根据您的要求获取结果并返回JSON。

答案 1 :(得分:0)

您真正需要做的就是在while循环中添加一个条件来跳过表格标题和某种格式化函数。

echo '<table border="1">';

if ($result->num_rows > 0) {
// output data of each row

//This boolean flag will determine if the row is the header (first row), 
//and skip formatting for this row
$header_row = true;

//We can use a closure here to do our custom formatting. 
//If you have another formatting method elsewhere, 
//use that instead of this.
$format_html_table = function($data) {

    //manipulate $data here based on what you need to do for formatting 
    //for all of the non-header rows
    //ex: $data = ...
return $data;
};

while($row = $result->fetch_assoc()) {
    if ($header_row) {
        $html_table = $row["html_table"];
    } else {
        $html_table = $format_html_table($row["html_table"]);
    }
    echo
        '<th>'.$row["name"]. '</th><tr><td>'. $html_table.'</td></tr>';

    //We set the boolean flag to false here after the first row has processed, 
    //so all remaining rows will be formatted.
    $header_row = false;
}

真的没有理由为此弄乱dom解析器。在生成任何标记之前,您只需对数据库中的原始源数据响应执行编辑。