PHP PDO et Access 2003 : page inaccessible

Fermé
Ursini Messages postés 2 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 16 avril 2013 - Modifié par Ursini le 16/04/2013 à 14:50
 atcor - 16 avril 2013 à 20:15
Bonjour,

j'ai créé un script permettant la connexion à un site sur base des informations contenues dans une vieille base Access 2003. J'ai également une nouvelle base MySQL.
Le programme qui reçoit le login et le password test d'abord s'ils existent dans la base MySQL. Si c'est la cas, l'utilisateur est connecté.
Si ce n'est pas le cas, alors le script va aller rechercher dans l'ancienne base Access. Si les informations des connexions y sont repris, ceux-ci sont copiés dans la base MySQL puis l'user est connecté.
(Pour des raisons stratégiques dues à l'entreprise je ne peux pas simplement copier d'abord toute la base Access dans la MySQL, je dois d'abord tester dans Access, puis dans MySQL).

J'avais quelques erreurs pour créer le PDO de connexion à Access mais c'est résolu, je n'ai plus de message d'erreur. Le problème est le suivant :

- Je rentre des identifiants présents dans la base MySQL : je suis connecté et j'accèdes à l'application.

- Je rentre des identifiants absents de MySQL mais présents dans Access, le navigateur me dit que l'adresse est inaccessible (fichier index.php). Or j'utilise le même formulaire HTML.

Voici le code de mon fichier index.php
require_once 'db.php'; //Contient les informations de la base MySQL     
require_once 'db_access.php'; //Contient les infos de connexion à la base Access     

$usermanager = new UsersManager($db, $dbAccess); //contructeur     

if(isset($_POST['login']) AND isset($_POST['password'])) {     
  if($usermanager->verifLogs($_POST['login'], $_POST['password'])) { //la fonction retourne true si login et password sont présents dans la base MySQL     
   $_SESSION['connecte']=1;     
   $_SESSION['LoginName']=$_POST['login'];     
  } elseif($dbAccess!=null AND $usermanager->verifLogsAccess($_POST['login'], $_POST['password'])) { //Idem mais dans la base Access     
   $_SESSION['connecte']=1;     
   $_SESSION['LoginName']=$_POST['login'];     
   //$usermanager->createUser($_POST['login'], $_POST['password'], "", 2); //copie de l'user dans la base     
  } else {     
   $_SESSION['connecte']=0;?>     
   <script>     
   alert('Username et/ou mot de passe incorrect(s)');     
   </script><?php     
  }     
}     

if(!isset($_SESSION['connecte']) OR (isset($_SESSION['connecte']) AND $_SESSION['connecte']==0)) {//Pas connecté?>     

<div class="global">     
 <div class="connection">     
  <p class="connectionTitre">Textilcord Steinfort SA</p>     
  <p class="connectionSousTitre">Plans de tissage</p>     
  <form action="" method="post">     
   <table class="connection_table">     
    <tr><td align="right" width="50%">Username :</td><td width="50%"><input type="text" name="login" placeholder="Votre nom d'utilisateur"></td></tr>     
    <tr><td align="right">Password :</td><td><input type="password" name="password"></td></tr>     
   </table>     
   <input type="submit" value="Connection">     
  </form>     
 </div><?php      
      
}     
else {//Si connecté     
header('Location: applicationIndex.php'); //Redirection vers la page d'accueil     
}


Et ici le code de mon fichier db_access.php:
try     
{     
$dbAccess = new PDO('odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=D:\APPLI\DB_test.mdb;Uid=Admin;Pwd=pass;', '', '');     

}     
 catch (PDOException $e)     
{ $dbAccess=null;     
 echo'Erreur : '.$e->getMessage().'<br/>Base Access inaccessible.<br/>Connexion via la base de donnée SQL interne uniquement.';     
}


Et ici la fonction correspondante de la classe UserManager :
public function verifLogsAccess ($login, $password) {  
  $requete = $this->_dbAccess->prepare("SELECT COUNT(*) FROM Mitarbeiter WHERE PNam=? AND PPsw=?");  
  $requete->bindParam(1, $login);  
  $requete->bindParam(2, $password);  
  $rs=@$requete->execute();  
   if(!$rs) {  
     //Renvoi de l'exception  
     throw new Exception("Erreur getIdRollsInPlan.");  
   } else {  
     return (bool) $requete->fetchColumn();  
   }  
}


Je précise que j'utilise Chrome mais j'ai esayé avec IE et Mozilla, le résultat est le même

Merci beaucoup pour votre aide !
A voir également:

2 réponses

Salut:

Si ce n'est pas le cas, alors le script va aller rechercher dans l'ancienne base Access.

Le problème vient de là non?
Exportez votre base en SQL à partir d'Access, le reste c'est pas possible Access n'est pas une base crédible mais une application de base de données pour les secrétaires qui ont viancus tous les secrets de word et excel... en aucun cas un outil valable.

ps: ancien prof d'Access et de db

ps2: la solution la plus simple de premier abord serait d'exporter vos données access vers une ou plusieurs tables doublant celles existante, mais c'est très lourd et piégeur(lourdeur et complexité inutile); révisez plutôt votre analyse(je veut dire en tenant compte des données d'Access dans votre DDD Merise qui devrait pas paraître différentes des données actuelles, sinon utilisez une date de création ou une colonne supplémentaire pour savoir si l'information vient des nouvelles ou anciennes bases-vous pouvez éventuellement faire une sous-table tout dépends de votre SI et ses besoins) et vous verrez que vous pouvez recouper les données.

edit:

Je précise que j'utilise Chrome mais j'ai esayé avec IE et Mozilla, le résultat est le même


En effet les différentes entre navigateurs le sont pour les parties qu'ils utilisent. PHP et la db sont traitées par le serveur donc il n'y aura aucune incidence comme ça peut l'être pour HTML et CSS qui eux sont interprétés par le navigateur web avec plus ou moins de respect des normes w3C et leur propre façon de faire.
0
Ursini Messages postés 2 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 16 avril 2013
16 avril 2013 à 19:40
Oui c'est une alternative intéressante. Je ne m'y connais pas spécialement en Access, j'ai Access 2007 et 2010, comment puis-je exporter en SQL en conservant les enregistrements de la table ?

J'ai bêtement fait clic droit sur la table > Exporter mais là aucune option ne semble convenir..


Merci pour la réponse précédente en tous cas !
0
Oui c'est vraiment honteux access parfois, pas étonnant que vous ayez des difficultés.
J'ai trouvé ceci:

http://support.microsoft.com/default.aspx?scid=kb;fr;285829

Perso j'aurai fait une vue pour exporter en sql(si possible) voire en csv quitte à remettre en sql via des outils tels que l'importation dans phpMyAdmin(ou parser directement avec un script).
Mais pour cette solution j'ai plus access installé et je sèche un peu sans l'avoir sous les yeux.
Vous avez les états aussi qui permettent de faire ça normalement et je croit bien que s'il n'y a pas sql il y a toujours possibilité en csv.
0