csv数据到html表

时间:2015-01-19 15:11:56

标签: php html csv

我需要使用php从CSV文件获取数据到HTML表。我已经通过过滤做到了,它就像一个魅力。现在我尝试添加它,如果$filter不在那里但是由于某种原因它将它放在桌子之外。

获取$filter的代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $filter = $_POST["search"];
}

因此,如果没有POST请求,则不会有名称为$ filter的变量。

这是我将csv数据传递到HTML表的代码:

if (($HandleAnalog = fopen("csv/Analog/ADC_DAC.csv", "r")) !== FALSE) {

echo "<table id='ADC_DAC' style='width:100%; border: 1px solid black;'>";
while (($data = fgetcsv($HandleAnalog, 1000, ";")) !== FALSE) {

    $num = count($data);
    $row++;

    if(strpos($data[4],$filter) !== false || strpos($data[2],$filter) !== false ||strpos($data[5],$filter) !== false){
        echo "<tr style='border: 1px solid black;'>";
        for ($c=0; $c < $num; $c++) {
            if ($row == 0) {
                echo "<th style='border: 1px solid black;'>";
                $dat = str_replace(',', '.', $data[$c]);
                echo $dat;
                echo "</th>";
                $row++;
            }
            echo "<td style='border: 1px solid black;'>";
            $dat = str_replace(',', '.', $data[$c]);
            echo $dat;
            echo "</td>";
        }
        echo "</tr>";
    }else if ($filter == null) {
        echo "<tr style='border: 1px solid black;'>";
        for ($c=0; $c < $num; $c++) {
            if ($row == 0) {
                echo "<th style='border: 1px solid black;'>";
                $dat = str_replace(',', '.', $data[$c]);
                echo $dat;
                echo "</th>";
                $row++;
            }
            echo "<td style='border: 1px solid black;'>";
            $dat = str_replace(',', '.', $data[$c]);
            echo $dat;
            echo "</td>";
        }
        echo "</tr>";
    }
}
echo "</table>";
}

    fclose($HandleAnalog);

但由于某些原因,当我不过滤它时它不会显示数据,而我的确完全相同。

我过滤后的样子:

While Filtering

当我不过滤时的外观:

While not filtering

如果我查看浏览器中的元素,我会看到它在非过滤值之前关闭了表格。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

  1. 请初始化$ filter,因为您正在测试未设置的变量(即使已禁用错误报告,多个警告或通知也会影响PHP性能)
  2. 将$ filter初始化为null
  3. 首先评估是否缺少$ filter(只是我的建议,不是规则,但是当没有搜索内容时会更快地省略调用函数...)
  4. 所以:

    $filter = null;
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
      $filter = $_POST["search"];
    }
    
    echo "<table id='ADC_DAC' style='width:100%; border: 1px solid black;'>";
    while (($data = fgetcsv($HandleAnalog, 1000, ";")) !== FALSE) {
    
      $num = count($data);
      $row++;
    
      if ($filter == null) {
          echo "<tr style='border: 1px solid black;'>";
          for ($c=0; $c < $num; $c++) {
              if ($row == 0) {
                  echo "<th style='border: 1px solid black;'>";
                  $dat = str_replace(',', '.', $data[$c]);
                  echo $dat;
                  echo "</th>";
                  $row++;
              }
              echo "<td style='border: 1px solid black;'>";
              $dat = str_replace(',', '.', $data[$c]);
              echo $dat;
              echo "</td>";
          }
          echo "</tr>";
      }else if(strpos($data[4],$filter) !== false || strpos($data[2],$filter) !== false ||strpos($data[5],$filter) !== false){
          echo "<tr style='border: 1px solid black;'>";
          for ($c=0; $c < $num; $c++) {
              if ($row == 0) {
                  echo "<th style='border: 1px solid black;'>";
                  $dat = str_replace(',', '.', $data[$c]);
                  echo $dat;
                  echo "</th>";
                  $row++;
              }
              echo "<td style='border: 1px solid black;'>";
              $dat = str_replace(',', '.', $data[$c]);
              echo $dat;
              echo "</td>";
          }
          echo "</tr>";
      }
    }
    echo "</table>";
    }
    
    fclose($HandleAnalog);