一尘不染

PHP和Access DB之间的连接

sql

我工作了数周来尝试解决此问题。我需要管理PHP和Microsoft Access数据库.mdb之间的连接。

我的目标是创建一个包含带有数据库表字段的表的网页。但是我的表大约有30列,我只想插入其中的6列。

示例:
数据库名称: DinamicoWeb
表名称: 订单
字段名称: Id Ord,Ord日期,名称,姓氏,价格,总计

这是我设法编写的代码(放入 所有 列中)。

config.php

<?php
define ('DBNAME',"./DinamicoWeb.mdb"); // Database name
define ('DBTBL',"Ordini"); // Table name
define ('PKNAME',"Id Ord"); // Primary Key
define ('PKCOL',0); // Posotion Primary Key
define ('LINKPK',true); // PK link for edit/delete
?>

test.php

<?php
require_once("config.php");

$cn = new COM("ADODB.Connection");
$cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".
            realpath(DBNAME).";";
$cn->open($cnStr);
$rs = $cn->execute("SELECT * FROM ".DBTBL);
$numFields = $rs->Fields->count;

// Print HTML
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml">';
echo '<head>';
echo '<meta http-equiv="Content-Type" 
     content="text/html; charset=utf-8" />';
echo '<title>Gestione degli '.DBTBL.'</title>';
echo '<link href="styles.css" rel="stylesheet" type="text/css" />';
echo '</head><body>';
echo '<h1>GESTIONE '.DBTBL.'</h1>';
// Elenca records -----
echo ("<table class='datatable' summary='Prova dati con MS Access'>");
echo("<caption>Tabella ".DBTBL."</caption>\n");
echo("<thead><tr>\n");
for ($i=0;$i<$numFields;$i++){
    echo("<th scope='col'>");
    echo $rs->Fields($i)->name;
    echo("</th>\n");
}
echo("</tr></thead>\n");
echo("<tbody>");

$alt = false;
while (!$rs->EOF)
{
    echo("<tr>");
    for ($i=0;$i<$numFields;$i++){
      $altClass = $alt ? " class='alt'" : "";
      if (LINKPK && $i==PKCOL){
        echo "<td".$altClass."><a href='?id=".$rs->Fields($i)->value
              ."'>".$rs->Fields($i)->value."</a></td>\n";
      }
      else{
        echo "<td".$altClass.">".$rs->Fields($i)->value."</td>\n";
      }
    }
    echo("</tr>\n");    
    $rs->MoveNext();
    $alt = !$alt;
}
echo("</tbody>");
echo("</table>\n");
echo ("<p>[ <a href='?ins=1'>Inserimento nuovo record</a> ]</p>");
// Modifica record -----
if (!empty($_GET['id'])){
  $id = intval($_GET['id']);
  $rs = $cn->execute("SELECT * FROM ".DBTBL." WHERE ".PKNAME."=".$id);
  echo ("<form action='modify.php' method='post'>");
  echo ("<fieldset>");
  echo ("<legend>Modifica record</legend>");
  for ($i=0;$i<$numFields;$i++){
    if (LINKPK && $i==PKCOL){
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' readonly='readonly' name='"
             .$rs->Fields($i)->name."' value=\""
             .$rs->Fields($i)->value."\" /><br />\n");      
    }
    else {
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' name='".$rs->Fields($i)->name."' value=\""
             .$rs->Fields($i)->value."\" /><br />\n");
    }
  }
  echo ("<button type='submit' name='azione' value='modifica'>Modifica</button>");
  echo ("<button class='affiancato' type='submit' 
        name='azione' value='cancella'>Cancella</button>");
  echo ("</fieldset></form>");
}
// Inserimento record -----
elseif (!empty($_GET['ins'])){
  echo ("<form action='modify.php' method='post'>");
  echo ("<fieldset>");
  echo ("<legend>Inserimento record</legend>");
  for ($i=0;$i<$numFields;$i++){
    if ($i!=PKCOL){
      echo ("<label for='".$rs->Fields($i)->name."'>"
             .$rs->Fields($i)->name."</label>");
      echo ("<input type='text' name='".$rs->Fields($i)->name."' /><br />\n");
    }
  }
  echo ("<button type='submit' name='azione' value='inserisci'>Inserisci</button>");
  echo ("<br />");
  echo ("</fieldset></form>");
}
echo '</body></html>';
$rs->Close();
$cn->Close();
?>

PS:将.php文件转换为内部带有动态php的.html文件非常好。

PSS:下一步将是同时使用组合框和复选框创建过滤器

如果可能的话,我会手动添加列标题,而不要添加While,以使响应表具有jQuery和footable

例如:

<table class="footable" data-filter="#filter">
  <thead>
    <tr>
      <th data-sort-initial="descending" data-class="expand">
        [Id Ord]
      </th>
      <th data-sort-ignore="true">
        [Name]
      </th>
      <th data-hide="phone,tablet">
        [Surname]
      </th>
      <th data-hide="phone,tablet" data-type="numeric">
        [Price]
      </th>
      <th data-hide="phone" data-type="numeric">
        [Total]
      </th>
    </tr>
  </thead>

阅读 117

收藏
2021-05-16

共1个答案

一尘不染

改变

$rs = $cn->execute("SELECT * FROM ".DBTBL);

只要求六列

$rs = $cn->execute("SELECT [Id Ord], [Ord Date], [Name], [Surname], [Price], [Total] FROM ".DBTBL);
2021-05-16