0

I'm working for weeks to try to solve this problem. I need to manage a connection between PHP and Microsoft Access Database .mdb.

My goal is to create a web page that contain a table with the fields of a database table. But my table has about 30 columns, I would like to insert only 6 of these.

Example:
Database name: DinamicoWeb
Table name: Orders
Fields name: Id Ord, Ord Date, Name, Surname, Price, Total

This is the code that I managed to write(put inside ALL columns).

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: It's great to trasform the .php file to .html file with dynamic php inside.

PSS: And the next step would be to make also filters with combobox and checkbox

If is possible, I would add headers of columns manually and not with a While, so as to make the responsive table with jQuery and footable

For example:

<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>
Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Marco Bagiacchi
  • 334
  • 2
  • 20
  • what is the problem you are trying to solve? – WEBjuju Oct 28 '16 at 13:07
  • I'm trying to solve the Select, i want to get only the six columns. But a column of these are a external key of another tables.. For example "Name" contain values "1", "2", "3", "4" etc... they are contained in tables "Clients" on colums with ID "1" the "Name" is "Jack", ID "2" the "Name" is "Mark", ID "3" the "Name" is "Frank"... and so on – Marco Bagiacchi Oct 31 '16 at 07:37

1 Answers1

0

Change

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

to only request the six columns

$rs = $cn->execute("SELECT [Id Ord], [Ord Date], [Name], [Surname], [Price], [Total] FROM ".DBTBL);
Jay Blanchard
  • 34,243
  • 16
  • 77
  • 119
WEBjuju
  • 5,797
  • 4
  • 27
  • 36
  • *Do or do not, there is no "try"*. – Jay Blanchard Oct 28 '16 at 13:20
  • Thanks, this works perfectly. Now, another problem. A column of these are a external key of another tables.. For example "Name" contain values "1", "2", "3", "4" etc... they are contained in tables "Clients" on colums with ID "1" the "Name" is "Jack", ID "2" the "Name" is "Mark", ID "3" the "Name" is "Frank"... and so on – Marco Bagiacchi Oct 31 '16 at 07:41
  • Hi @MarcoBagiacchi - if the solution is acceptable, I believe it is customary to mark it as the solution. For your new problem, it is customary to open a new question; you may certainly reference this question in your new question. – WEBjuju Nov 01 '16 at 13:02
  • @WEBjuju Okay, i'll create the new question. Now, i had already create a new question here: http://stackoverflow.com/questions/40374743/php-access-create-a-footable – Marco Bagiacchi Nov 02 '16 at 14:19