PHP 和 Access DB 之间的连接
Connection between PHP and Access DB
我工作了几个星期试图解决这个问题。
我需要管理 PHP 和 Microsoft Access 数据库 .mdb.
之间的连接
我的目标是创建一个包含 table 和数据库 table 字段的网页。但是我的 table 有大约 30 列,我只想插入其中的 6 列。
示例:
数据库名称:DinamicoWeb
Table 姓名:订单
字段名称:Id Ord, Ord Date, Name, Surname, Price, Total
这是我设法编写的代码(放在 ALL 列中)。
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 文件转换成 .html 里面有动态 php 的文件真是太好了。
PSS:下一步将是使用组合框和复选框制作过滤器
如果可能,我会手动添加 headers 列,而不是使用 While,以便使用 jQuery 和 footable 做出响应式 table
例如:
<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);
我工作了几个星期试图解决这个问题。 我需要管理 PHP 和 Microsoft Access 数据库 .mdb.
之间的连接我的目标是创建一个包含 table 和数据库 table 字段的网页。但是我的 table 有大约 30 列,我只想插入其中的 6 列。
示例:
数据库名称:DinamicoWeb
Table 姓名:订单
字段名称:Id Ord, Ord Date, Name, Surname, Price, Total
这是我设法编写的代码(放在 ALL 列中)。
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 文件转换成 .html 里面有动态 php 的文件真是太好了。
PSS:下一步将是使用组合框和复选框制作过滤器
如果可能,我会手动添加 headers 列,而不是使用 While,以便使用 jQuery 和 footable 做出响应式 table
例如:
<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);