我工作了数周来尝试解决此问题。我需要管理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>
改变
$rs = $cn->execute("SELECT * FROM ".DBTBL);
只要求六列
$rs = $cn->execute("SELECT [Id Ord], [Ord Date], [Name], [Surname], [Price], [Total] FROM ".DBTBL);