<?php

// ------------------------------------------------------------------------- //
// Conversion ACCESS => MySQL                                                //
// ------------------------------------------------------------------------- //
// Auteur: Hello / Sector One <hello@chez.com>                               //
// Web:    http://hellosct1.free.fr/index.html                               //
// ------------------------------------------------------------------------- //

/*
Un convertisseur semi-automatique d'une base de données MS ACCESS vers une base
de données MySQL.
*/

$user="root";                        // login
$password="";                        // password
$text_error_connection="Impossible d'ouvrir $bd dans odbc_connect";
$text_error_structure_mdb= "Erreur dans la table MS ACCESS";
$text_error_structure_sql= "Erreur dans la table SQL";
$text_error_connect= "Connection impossible";
$text_error_ajout= "Impossible d'ajouter";


/** MySQL settings  */
$cfgColumnTypes = array(
   
'TINYINT',
   
'SMALLINT',
   
'MEDIUMINT',
   
'INT',
   
'BIGINT',
   
'FLOAT',
   
'DOUBLE',
   
'DECIMAL',
   
'DATE',
   
'DATETIME',
   
'TIMESTAMP',
   
'TIME',
   
'YEAR',
   
'CHAR',
   
'VARCHAR',
   
'TINYBLOB',
   
'TINYTEXT',
   
'TEXT',
   
'BLOB',
   
'MEDIUMBLOB',
   
'MEDIUMTEXT',
   
'LONGBLOB',
   
'LONGTEXT',
   
'ENUM',
   
'SET'
);


// Atributes
$cfgAttributeTypes = array(
   
'',
   
'BINARY',
   
'UNSIGNED',
   
'UNSIGNED ZEROFILL'
);

switch(
$action)
{

case
"Convertir une nouvelle table":
      
$etape=1;
break;

case
"Suite":
      
$etape=2;
break;

case
"Convertion":
      
$etape=3;

function
Error_Handler( $msg, $cnx )                // recupere les erreurs
{
echo
"$msg <br>";
odbc_close( $cnx);
exit();
}

$codeligne=strlen($nligne)+1;            // determine position longueur

//-----------------------------------------------------
$db_link = mysql_connect($serveur,$user,$password);
if (!
$db_link) Error_handler($text_error_connect , $db_link );

mysql_create_db( $db, $db_link );      // creation SQL

$query = "CREATE TABLE $nomtable (";            // prepare creation table

for ($i=0;$i<$nligne;$i++)
{
$name=str_pad("n", $codeligne, $i, STR_PAD_RIGHT);
$rname=$HTTP_GET_VARS[$name];

$type=str_pad("t", $codeligne, $i, STR_PAD_RIGHT);
$rtype=$HTTP_GET_VARS[$type];

$long=str_pad("l", $codeligne, $i, STR_PAD_RIGHT);
$rlong=$HTTP_GET_VARS[$long];

$attributs=str_pad("a", $codeligne, $i, STR_PAD_RIGHT);
$rattributs=$HTTP_GET_VARS[$attributs];

$cnull=str_pad("c", $codeligne, $i, STR_PAD_RIGHT);
$rcnull=$HTTP_GET_VARS[$cnull];

$defaut=str_pad("d", $codeligne, $i, STR_PAD_RIGHT);
$rdefaut=$HTTP_GET_VARS[$defaut];

$extra=str_pad("e", $codeligne, $i, STR_PAD_RIGHT);
$rextra=$HTTP_GET_VARS[$extra];


if (!empty(
$name))
{
    
$query .= $rname.' '.$rtype.' '.$rlong.' '.$rattributs.' '.$rcnull.' '.$rdefaut.' '.$rextra;

    
$tligne=$nligne-1;
    if (
$i != $tligne) $query .= ",";
}

}
$query .= ");";

   
mysql_select_db( $db, $db_link ); // execute creation Table
   
mysql_query( $query, $db_link );

//----------------------------------------------

// ouvre la Base de donnees
$cnx = odbc_connect( $db , $user, $password );
ACCESS
if( ! $cnx )   Error_handler($text_error_connection , $cnx );

// verifie la structure table
$valeur= odbc_exec( $cnx, "select * from $nomtable" );
ACCESS
if( ! $valeur ) Error_handler( $text_error_structure , $cnx );

// selectionne table
$requete=mysql_db_query($db,"select * from $nomtable ",$db_link);
SQL
if (!$requete) Error_handler( $text_error_structure , $cnx );

// lis les données ACCESS
while( odbc_fetch_row( $valeur ) )
{
// creation 1ere partie INSERT
$compteur++;
$query="insert into $nomtable (";
for (
$i=0;$i<$nligne;$i++)
{
  
$name=str_pad("n", $codeligne, $i, STR_PAD_RIGHT);
  
$rname=$HTTP_GET_VARS[$name];

  
$query .= "$rname";
  
$tligne=$nligne-1;
  if (
$i != $tligne) $query .= ",";
}

// creation 2e partie INSERT
$query .= ") values (";
for (
$i=0;$i<$nligne;$i++)
{
  
$j=$i+1;
  
$result_odbc = odbc_result( $valeur, $j );

  
$query .="'$result_odbc'";
  
$tligne=$nligne-1;
  if (
$i != $tligne) $query .= ",";
}

// ferme l'insertion
$query .=")";

$resul=mysql_query($query);
if (!
$resul)  Error_handler($text_error_ajout , $cnx );
}

//----------------------------------------------
odbc_close( $cnx);      // ferme la connection ODBC
mysql_close( $db_link); // ferme la connection SQL


break;

default:
      
$etape=1;
break;
}
?>

<html>
<head><head>
<body>
<center>
<h1><i>CONVERTION ACCESS => SQL </i><br>Version 1.00</h1>

<b>(c) HELLO / SECTOR ONE - 2001 </b>

</center><BR><hr>
<?
if ($etape==1)
{
?>
<font size="4"><b>PREPARATION : </b></font>
Installation sous Microsoft Windows d'une base de donnée MS ACCESS
<br>
<i> - Panneau de configuration<br>
- Sources de donnees ODBC (32 bits)<br>
- Onglet DSN systeme<br>
- Selectionner le chemin<br>
- Nom de la source : catmdb</i><br><br>
<hr>
<font size="4"><b>ETAPE 1/2 : </b></font><br>
<FORM  action="index.php" method="GET">
  Nom de la base de donn&eacute;e
  <INPUT TYPE="TEXT"  name="db">  <i>Exemple : catmdb</i>
  <br>
  Nom de la table
  <input type="text" name="nomtable">    <i>Exemple : pdt </i>
  <br>
  Nombre de champ
  <input type="text" name="nligne">    <i>Exemple : 5 </i>
  <br><br>
  <INPUT TYPE="SUBMIT"  name="action" value="Suite">
</form>
<?
}
?>
<?
if ($etape==2)
{
?>
<font size="4"><b>ETAPE 2/2 : </b></font><br>
<FORM  action="index.php" method="GET">

<input type="hidden" name="nligne" value="<? echo $nligne; ?>">
<input type="hidden" name="db" value="<? echo $db; ?>">
<input type="hidden" name="nomtable" value="<? echo $nomtable; ?>">
<br>
  <table width="100%" border="0">
    <tr>
      <td>
        <div align="center">Repere</div>
      </td>

      <td>
        <div align="center">Champ</div>
      </td>
      <td>
        <div align="center">Type</div>
      </td>
      <td>
        <div align="center">Longueur</div>
      </td>
      <td>
        <div align="center">Attributs</div>
      </td>
      <td>
        <div align="center">Null</div>
      </td>
      <td>
        <div align="center">Défaut</div>
      </td>
      <td>
        <div align="center">Extra</div>
      </td>
    </tr>
    <?

$i
=0;
while(
$i<$nligne)
{
echo
"  <tr>";

        
$j=$i+1;
echo
"<td><div align=center>$j</div></td>";


$name=str_pad("n", 2, $i, STR_PAD_RIGHT);
echo
"<td> <input type=\"text\" name=\"$name\"> </td>";

$type=str_pad("t", 2, $i, STR_PAD_RIGHT);
echo
"<td><select name=\"$type\">";
for (
$p=0;$p<count ($cfgColumnTypes);$p++)
        echo
"<option value=$cfgColumnTypes[$p]>$cfgColumnTypes[$p]</option>";
echo
"</select></td>";

$long=str_pad("l", 2, $i, STR_PAD_RIGHT);
echo
"<td>  <input type=\"longueur\" name=\"$long\"> </td>";

$attributs=str_pad("a", 2, $i, STR_PAD_RIGHT);
echo
"<td><select name=\"$attributs\">";
for (
$p=0;$p<count ($cfgAttributeTypes);$p++)
     echo
"<option value=$cfgAttributeTypes[$p]>$cfgAttributeTypes[$p]</option>";
echo
"</select></td>";

$cnull=str_pad("c", 2, $i, STR_PAD_RIGHT);
echo
"<td><select name=\"$cnull\">";
echo
"<option value=\"NULL\">null</option>";
echo
"<option value=\"NOT NULL\">not null</option>";
echo
"</select></td>";

$defaut=str_pad("d", 2, $i, STR_PAD_RIGHT);
echo
"<td>  <input type=\"defaut\" name=\"$defaut\"> </td>";

$extra=str_pad("e", 2, $i, STR_PAD_RIGHT);
echo
"<td><select name=\"$extra\">";
echo
"<option value=\" \"> </option>";
echo
"<option value=\"auto_increment\">auto_increment</option>";
echo
"</select></td>";



  echo
"</tr>";
        
$i++;
}
?>
  </table>
  <br>

  <INPUT TYPE="SUBMIT"  name="action" value="Convertion">
</form>      <br>
  <br>
<i>Exemple de saisies</i><br>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
  <tr>
    <td>
      <div align="center"><i>Repere</i></div>
    </td>
    <td>
      <div align="center"><i>Champ</i></div>
    </td>
    <td>
      <div align="center"><i>Type</i></div>
    </td>
    <td>
      <div align="center"><i>Longueur</i></div>
    </td>
    <td>
      <div align="center"><i>Attributs</i></div>
    </td>
    <td>
      <div align="center"><i>Null</i></div>
    </td>
    <td>
      <div align="center"><i>Défaut</i></div>
    </td>
    <td>
      <div align="center"><i>Extra</i></div>
    </td>
  </tr>
  <tr>
    <td>
      <div align="center"><i>1</i></div>
    </td>
    <td>
      <div align="center"><i>idproduit</i></div>
    </td>
    <td>
      <div align="center"><i>int</i></div>
    </td>
    <td>
      <div align="center"><i>11</i></div>
    </td>
    <td>
      <div align="center">&nbsp;</div>
    </td>
    <td>
      <div align="center"><i>Null</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
  </tr>
<tr>
    <td>
      <div align="center"><i>2</i></div>
    </td>
    <td>
      <div align="center"><i>nom</i></div>
    </td>
    <td>
      <div align="center"><i>text</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>Null</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
  </tr>
  <tr>
    <td>
      <div align="center"><i>3</i></div>
    </td>
    <td>
      <div align="center"><i>liens</i></div>
    </td>
    <td>
      <div align="center"><i>text</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>Null</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
  </tr>
  <tr>
    <td>
      <div align="center"><i>4</i></div>
    </td>
    <td>
      <div align="center"><i>descriptif</i></div>
    </td>
    <td>
      <div align="center"><i>text</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>Null</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
  </tr>
  <tr>
    <td>
      <div align="center"><i>5</i></div>
    </td>
    <td>
      <div align="center"><i>photo</i></div>
    </td>
    <td>
      <div align="center"><i>text</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>Null</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
    <td>
      <div align="center"><i>&nbsp;</i></div>
    </td>
  </tr>
</table>


<?
}
?>

<?
if ($etape==3)
{
?>
<center><h1>La convertion c'est correctement déroulé</h1>
<br>
<br><br>
<FORM action="index.php" method="GET">
  <INPUT TYPE="SUBMIT"  name="action" value="Convertir une nouvelle table">

</form> </center> <br>
<?
}
?>
<br>
<br><table width="100%" border="1" cellspacing="1" cellpadding="1">
  <tr>
    <td><i>Pour avoir l'exemple complet :</i> <a
href="http://hellosct1.free.fr/index.html"
target="_blank">http://hellosct1.free.fr/index.html</a><br>
      <i>Pour utiliser le langage PHP 4.x + la norme ODBC :</i> <a
href="http://www.catmdb.fr.st" target="_blank">http://www.catmdb.fr.st</a><br>
      <br>
      <i>Pour me contacter :</i>
      <a href="mailto:hello@chez.com">hello@chez.com</a></td>
  </tr>
</table>

</body>
</html>