Vérification consistance

Voir le sujet précédent Voir le sujet suivant Aller en bas

Vérification consistance

Message par Alain.C le Mar 30 Sep - 11:09

Un p'tit code en PHP ainsi que les requêtes SQL faites qui vérifie si les clés primaires sont bien unique et si les clés étrangères pointent vers une donnée existante (Vous allez rire en voyant le nombre de clés étrangères en erreur ...)

Pas encore fini, reste encore quelques points à faire (Données uniques, par exemple, et bla bla bla ...)
Sûrement moyen de mieux faire, mais pour l'instant, ça roule. Autant optimiser tout ça plus tard.

Requêtes SQL

Code:

// Vérification des clés primaires - Doublons, NULL

SELECT * FROM daysofweek AS d1, daysofweek AS d2 WHERE d1.idDay = d2.idDay AND d1.label != d2.label; // daysofweek
SELECT * FROM daysofweek AS d1, daysofweek AS d2 WHERE d1.idDay != d2.idDay AND d1.label = d2.label; // daysofweek
SELECT * FROM players AS p1, players as P2 WHERE p1.idPlayer = p2.idPlayer AND p1.name != p2.name; // players
SELECT * FROM players AS p1, players as P2 WHERE p1.idPlayer != p2.idPlayer AND p1.name = p2.name AND p1.firstname = p2.firstname; // players
SELECT * FROM roles as r1, roles as r2 WHERE r1.idRole = r2.idRole AND r1.idUser != r2.idUser AND r1.idRoleType != r2.idRoleType; // roles
SELECT * FROM roles as r1, roles as r2 WHERE r1.idRole != r2.idRole AND r1.idUser = r2.idUser AND r1.idRoleType = r2.idRoleType; // roles
SELECT * FROM roletype AS rt1, roletype AS rt2 WHERE rt1.roleTypeId = rt2.roleTypeId AND rt1.label != rt2.label; // roleType
SELECT * FROM roletype AS rt1, roletype AS rt2 WHERE rt1.roleTypeId != rt2.roleTypeId AND rt1.label = rt2.label; // roleType
SELECT * FROM staffs AS s1, staffs AS s2 WHERE s1.idStaff = s2.idStaff AND s1.label != s2.label // staffs
SELECT * FROM staffs AS s1, staffs AS s2 WHERE s1.idStaff != s2.idStaff AND s1.label = s2.label // staffs
SELECT * FROM staffsroletypes AS srt1, staffsroletypes AS srt2 WHERE srt1.idStaffRoleType = srt2.idStaffRoleType AND srt1.idStaff != srt2.idStaff AND srt1.idRoleType != srt2.idRoleType; // staffsroletypes
SELECT * FROM staffsroletypes AS srt1, staffsroletypes AS srt2 WHERE srt1.idStaffRoleType != srt2.idStaffRoleType AND srt1.idStaff = srt2.idStaff AND srt1.idRoleType = srt2.idRoleType; // staffsroletypes
SELECT * FROM teams AS t1, teams AS t2 WHERE t1.idTeam = t2.idTeam AND t1.label != t2.label; // teams
SELECT * FROM teams AS t1, teams AS t2 WHERE t1.idTeam = t2.idTeam AND t1.label != t2.label; // teams
SELECT * FROM teamscalendar AS tc1, teamscalendar AS tc2 WHERE tc1.idCalendar = tc2.idCalendar AND tc1.idTeam != tc2.idTeam; //teamscalendar
SELECT * FROM teamscoaches AS tco1, teamscoaches AS tco2 WHERE tco1.idTeamCoach = tco2.idTeamCoach AND tco1.idTeam != tco2.idTeam // teamscoaches
SELECT * FROM teamsdelegues AS td1, teamsdelegues AS td2 WHERE td1.idTeamDelegue = td2.idTeamDelegue AND td1.idTeam != td2.idTeam; // teamsdelegues
SELECT * FROM teamsgames AS tg1, teamsgames AS tg2 WHERE tg1.idTeamGame = tg2.idTeamGame AND tg1.idTeam != tg2.idTeam; // teamsgames
SELECT * FROM teamsplayers AS tp1, teamsplayers AS tp2 WHERE tp1.idTeamPlayer = tp2.idTeamPlayer AND tp1.idTeam != tp2.idTeam // teamsplayers
SELECT * FROM teamsranking AS tr1, teamsranking AS tr2 WHERE tr1.idRanking = tr2.idRanking AND tr1.idTeam != tr2.idTeam; // teamsranking
SELECT * FROM teamstraining AS tt1, teamstraining AS tt2 WHERE tt1.idTraining = tt2.idTraining AND tt1.idTeam != tt2.idTeam // teamstraining
SELECT * FROM typesmatchs AS tm1, typesmatchs AS tm2 WHERE tm1.idTypeMatch = tm2.idTypeMatch AND tm1.TypeMatch != tm2.TypeMatch; // typesmatchs
SELECT * FROM users AS u1, users AS u2 WHERE u1.idUser = u2.idUser AND u1.name != u2.name; // users

// Vérification des "clés étrangères" - Existante, NOT NULL, ...

SELECT idRole, idUser FROM roles WHERE idUser NOT IN (SELECT idUser FROM users);
SELECT idRole, idRoleType FROM roles WHERE idRoleType NOT IN (SELECT roleTypeID FROM roletype);
SELECT idStaffRoleType, idStaff FROM staffsroletypes WHERE idStaff NOT IN (SELECT idStaff FROM staffs);
SELECT idStaffRoleType, idRoleType FROM staffsroletypes WHERE idRoleType NOT IN (SELECT roleTypeId FROM roletype);
SELECT idTeamPlayer, idTeam FROM teamsplayers WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idTeamPlayer, idPlayer FROM teamsplayers WHERE idPlayer NOT IN (SELECT idPlayer FROM players);
SELECT idTeamDelegue, idTeam FROM teamsdelegues WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idTeamDelegue, idDelegue FROM teamsdelegues WHERE idDelegue NOT IN (SELECT idUser FROM users);
SELECT idTeamGame, idTeam from teamsgames WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idTeamGame, gameDay from teamsgames WHERE gameDay NOT IN (SELECT idDay FROM daysofweek);
SELECT idTeamCoach, idTeam FROM teamscoaches WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idTeamCoach, idCoach FROM teamscoaches WHERE idCoach NOT IN (SELECT idUser FROM users);
SELECT idTraining, idTeam FROM teamstraining WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idTraining, dayOfWeek FROM teamstraining WHERE dayOfWeek NOT IN (SELECT idDay FROM daysofweek);
SELECT idCalendar, TypeMatch FROM teamscalendar WHERE TypeMatch NOT IN (SELECT idTypeMatch FROM typesmatchs);
SELECT idCalendar, idTeam FROM teamscalendar WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idRanking, idTeam FROM teamsranking WHERE idTeam NOT IN (SELECT idTeam FROM teams);
SELECT idTeam, godfather FROM teams WHERE godfather NOT IN (SELECT idPlayer FROM players);

// Vérifier REGEXP email

REGEXP EMAIL :

SELECT * FROM users WHERE mail NOT REGEXP "^[[:alpha:]]+(([[:alnum:]]+)|([\-\._]?[[:alnum:]]+)*)*@[[:alpha:]]+(([[:alnum:]]+)|([\-\._]?[[:alnum:]]+)*)*\.[[:alpha:]]{2,8}$";
SELECT * FROM players WHERE email NOT REGEXP "^[[:alpha:]]+(([[:alnum:]]+)|([\-\._]?[[:alnum:]]+)*)*@[[:alpha:]]+(([[:alnum:]]+)|([\-\._]?[[:alnum:]]+)*)*\.[[:alpha:]]{2,8}$";

Code PHP

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
</head>
<body>
   <!--
   - Connexion DB
   - SQL Query
   - Vérification des PK et FK
   - Vérification des emails dans users et players

   - A FAIRE :
   - TRADUIRE TOUT LES "ECHO" EN LANGAGE COURANT - A finir
   - PROPOSER UN FORMULAIRE OU UN LIEN VERS UN FORMULAIRE POUR CORRIGER LE/LES PROBLEMES
   - SIMPLIFIER LES VARIABLES DANS LA VERIFICATION DES CLES PRIMAIRES (Optionel) - Peut pas mieux faire
   - METTRE LA "TRADUCTION" (if else if else if else if else if else if ...) DANS UNE FONCTION
        - VERIFIER LA COHERENCE DES DONNEES (matchnumber à 0 ? Pas possible, ....)
   
   -->
   <u><h1>Problèmes de consistences :</h1></u>
   <u><b>(Version "non traduite")</u></b>
   <h2>Problèmes de clés primaires :</h2>
   <?php
      $tableError = array();
      $error = false;
      $dataBaseName = "basketproject";
      $serverName = "localhost";
      $user = "user01";
      $password = "pass01";
      $dbLink = mysql_connect($serverName,$user,$password) or die('Connection failed');
      mysql_select_db($dataBaseName,$dbLink) or die('DB selection failed');
      // Vérification clés primaires
      $id = array("idDay","idDay","idPlayer","idPlayer","idRole","idRole","roletypeId","roletypeId","idStaff","idStaff","idStaffRoleType","idStaffRoleType","idTeam","idTeam","idCalendar","idTeamCoach","idTeamDelegue","idTeamGame","idTeamPlayer","idRanking","idTraining","idTypeMatch","idUser");
      $table = array('daysofweek', 'daysofweek', 'players', 'players', 'roles', 'roles', 'roletype', 'roletype', 'staffs', 'staffs', 'staffsroletypes', 'staffsroletypes', 'teams', 'teams', 'teamscalendar', 'teamscoaches','teamsdelegues', 'teamsgames', 'teamsplayers', 'teamsranking', 'teamstraining', 'typesmatchs', 'users');
      $as1 = array('d1', 'd1', 'p1', 'p1', 'r1', 'r1', 'rt1', 'rt1', 's1', 's1', 'srt1', 'srt1', 't1', 't1', 'tc1', 'tco1', 'td1', 'tg1', 'tp1', 'tr1', 'tt1', 'tm1', 'u1');
      $as2 = array('d2', 'd2', 'p2', 'p2', 'r2', 'r2', 'rt2', 'rt2', 's2', 's2', 'srt2', 'srt2', 't2', 't2', 'tc2', 'tco2', 'td2', 'tg2', 'tp2', 'tr2', 'tt2', 'tm2', 'u2');
      // $where à simplifier si possible
      $where = array("d1.idDay = d2.idDay AND d1.label != d2.label","d1.idDay != d2.idDay AND d1.label = d2.label","p1.idPlayer = p2.idPlayer AND p1.name != p2.name","p1.idPlayer != p2.idPlayer AND p1.name = p2.name AND p1.firstname = p2.firstname  AND p1.birthdate = p2.birthdate","r1.idRole = r2.idRole AND r1.idUser != r2.idUser AND r1.idRoleType != r2.idRoleType","r1.idRole != r2.idRole AND r1.idUser = r2.idUser AND r1.idRoleType = r2.idRoleType","rt1.roleTypeId = rt2.roleTypeId AND rt1.label != rt2.label","rt1.roleTypeId != rt2.roleTypeId AND rt1.label = rt2.label","s1.idStaff = s2.idStaff AND s1.label != s2.label","s1.idStaff != s2.idStaff AND s1.label = s2.label","srt1.idStaffRoleType = srt2.idStaffRoleType AND srt1.idStaff != srt2.idStaff AND srt1.idRoleType != srt2.idRoleType","srt1.idStaffRoleType != srt2.idStaffRoleType AND srt1.idStaff = srt2.idStaff AND srt1.idRoleType = srt2.idRoleType","t1.idTeam = t2.idTeam AND t1.label != t2.label","t1.idTeam = t2.idTeam AND t1.label != t2.label","tc1.idCalendar = tc2.idCalendar AND tc1.idTeam != tc2.idTeam","tco1.idTeamCoach = tco2.idTeamCoach AND tco1.idTeam != tco2.idTeam","td1.idTeamDelegue = td2.idTeamDelegue AND td1.idTeam != td2.idTeam","tg1.idTeamGame = tg2.idTeamGame AND tg1.idTeam != tg2.idTeam","tp1.idTeamPlayer = tp2.idTeamPlayer AND tp1.idTeam != tp2.idTeam","tr1.idRanking = tr2.idRanking AND tr1.idTeam != tr2.idTeam","tt1.idTraining = tt2.idTraining AND tt1.idTeam != tt2.idTeam","tm1.idTypeMatch = tm2.idTypeMatch AND tm1.TypeMatch != tm2.TypeMatch","u1.idUser = u2.idUser AND u1.name != u2.name");
      
      for($i = 0;$i <= 22; $i++){
         $sql = "SELECT * FROM $table[$i] AS $as1[$i], $table[$i] AS $as2[$i] WHERE $where[$i];";
         $res = mysql_query($sql) or die('Query error');
         while($data = mysql_fetch_assoc($res)){
            //echo("L'ID $id[$i] avec la valeur ".$data["$id[$i]"].' a une erreur <br/>');
            $error = true;
            array_push($tableError,$table1[$i]);
         }
      }
      if($error){
         echo("<br/><u>Solution proposée :</u> Modifier la donnée correspondante.<br/>");
         $tableError = array_unique($tableError);
         foreach($tableError as $tables){
            if($tables == "users"){
               echo("Il y a une erreur dans votre liste d'utilisateurs <br/>");
            }
            else if($tables == "teamsplayers"){
               echo("Il y a une erreur dans votre liste de joueurs par équipe <br/>");
            }
            else if($tables == "teamsgames"){
               echo("Il y a une erreur dans votre liste de matchs par équipe <br/>");
            }
            else if($tables == "teamscalendar"){
               echo("Il y a une erreur dans votre calendrier des équipes <br/>");
            }
            else if($tables == "teamsranking"){
               echo("Il y a une erreur dans votre classement des équipes <br/>");
            }
            else if($tables == "teamstraining"){
               echo("Il y a une erreur dans votre liste d'entrainement des équipes <br/>");
            }   
            else if($tables == "teamscoaches"){
               echo("Il y a une erreur dans votre liste de coaches d'équipes <br/>");
            }
            else if($tables == "teamsdelegues"){
               echo("Il y a une erreur dans votre liste de délégues d'équipes <br/>");
            }
            else if($tables == "teams"){
               echo("Il y a une erreur dans votre liste d'équipes <br/>");
            }
            else if($tables == "players"){
               echo("Il y a une erreur dans votre liste de joueurs <br/>");
            }
            else{
               echo("Il y a une erreur dans votre liste de ".$tables."<br/>");
            }
            
         }
      }
   ?>
   
   <br/><br/>
   <h2>Problèmes de clés étrangères :</h2>
   <?php
      $error = false;
      $tableError = array();
      // Vérification clés étrangères
      $id = array("idRole","idRole","idStaffRoleType","idStaffRoleType","idTeamPlayer","idTeamPlayer","idTeamDelegue","idTeamDelegue","idTeamGame","idTeamGame","idTeamCoach","idTeamCoach","idTraining","idTraining","idCalendar","idCalendar","idRanking","idTeam");
      $idCheck = array("idUser","idRoleType","idStaff","idRoleType","idTeam","idPlayer","idTeam","idDelegue","idTeam","gameDay","idTeam","idCoach","idTeam","dayOfWeek","TypeMatch","idteam","idTeam","godfather");
      $idCheck2 = array("idUser","idRoleType","idStaff","idRoleType","idTeam","idPlayer","idTeam","idDelegue","idTeam","gameDay","idTeam","idCoach","idTeam","dayOfWeek","idTypeMatch","idteam","idTeam","idPlayer");
      $table1 = array("roles","roles","staffsroletypes","staffsroletypes","teamsplayers","teamsplayers","teamsdelegues","teamsdelegues","teamsgames","teamsgames","teamscoaches","teamscoaches","teamstraining","teamstraining","teamscalendar","teamscalendar","teamsranking","teams");
      $table2 = array("users","roletype","staffs","roletype","teams","players","teams","users","teams","daysofweek","teams","users","teams","daysofweek","typesmatchs","teams","teams","players");
      for($i = 0;$i <= 17; $i++){
         $error = false;
         $sql = "SELECT $id[$i], $idCheck[$i] FROM $table1[$i] WHERE $idCheck[$i] NOT IN (SELECT $idCheck2[$i] FROM $table2[$i]);";
         $res = mysql_query($sql) or die('Query error');
         while($data = mysql_fetch_assoc($res)){
            //echo("L'ID ".$data["$id[$i]"]." dans la table $table1[$i] n'a pas de référence au niveau de $idCheck[$i] avec l'ID ".$data["$idCheck[$i]"]."<br/>");
            $error = true;
            array_push($tableError,$table1[$i]);
         }
      }
      if($error){
         echo("<br/><u>Solution proposée :</u> Modifier la donnée correspondante.<br/>");
         $tableError = array_unique($tableError);
         foreach($tableError as $tables){
            if($tables == "users"){
               echo("Il y a une erreur dans votre liste d'utilisateurs <br/>");
            }
            else if($tables == "teamsplayers"){
               echo("Il y a une erreur dans votre liste de joueurs par équipe <br/>");
            }
            else if($tables == "teamsgames"){
               echo("Il y a une erreur dans votre liste de matchs par équipe <br/>");
            }
            else if($tables == "teamscalendar"){
               echo("Il y a une erreur dans votre calendrier des équipes <br/>");
            }
            else if($tables == "teamsranking"){
               echo("Il y a une erreur dans votre classement des équipes <br/>");
            }
            else if($tables == "teamstraining"){
               echo("Il y a une erreur dans votre liste d'entrainement des équipes <br/>");
            }   
            else if($tables == "teamscoaches"){
               echo("Il y a une erreur dans votre liste de coaches d'équipes <br/>");
            }
            else if($tables == "teamsdelegues"){
               echo("Il y a une erreur dans votre liste de délégues d'équipes <br/>");
            }
            else if($tables == "teams"){
               echo("Il y a une erreur dans votre liste d'équipes <br/>");
            }
            else if($tables == "players"){
               echo("Il y a une erreur dans votre liste de joueurs <br/>");
            }
            else{
               echo("Il y a une erreur dans votre liste de ".$tables."<br/>");
            }
            
         }
      }
   ?>
   <br/><br/>
   <h2>Problèmes d'email :</h2>
   <?php
      $error = false;
      $tableError = array();
      // Vérification clés étrangères
      $id = array('idUser','idPlayer');
      $idCheck = array('mail','email');
      $table = array('users','players');
      for($i = 0;$i <= 1; $i++){
         $sql = "SELECT * FROM $table[$i] WHERE $idCheck[$i] NOT REGEXP '^[[:alpha:]]+(([[:alnum:]]+)|([\-\._]?[[:alnum:]]+)*)*@[[:alpha:]]+(([[:alnum:]]+)|([\-\._]?[[:alnum:]]+)*)*\.[[:alpha:]]{2,8}$';";
         $res = mysql_query($sql) or die('Query error');
         while($data = mysql_fetch_assoc($res)){
            //echo("L'ID ".$data["$id[$i]"]." dans la table $table[$i] n'a pas de référence au niveau de $idCheck[$i] avec l'ID ".$data["$idCheck[$i]"]."<br/>");
            $error = true;
            array_push($tableError,$table[$i]);
         }
      }
      mysql_close();
      if($error){
         echo("<br/><u>Solution proposée :</u> Modifier la donnée correspondante.<br/>");
         $tableError = array_unique($tableError);
         foreach($tableError as $tables){
            if($tables == "users"){
               echo("Il y a une erreur dans votre liste d'utilisateurs <br/>");
            }
            else if($tables == "teamsplayers"){
               echo("Il y a une erreur dans votre liste de joueurs par équipe <br/>");
            }
            else if($tables == "teamsgames"){
               echo("Il y a une erreur dans votre liste de matchs par équipe <br/>");
            }
            else if($tables == "teamscalendar"){
               echo("Il y a une erreur dans votre calendrier des équipes <br/>");
            }
            else if($tables == "teamsranking"){
               echo("Il y a une erreur dans votre classement des équipes <br/>");
            }
            else if($tables == "teamstraining"){
               echo("Il y a une erreur dans votre liste d'entrainement des équipes <br/>");
            }   
            else if($tables == "teamscoaches"){
               echo("Il y a une erreur dans votre liste de coaches d'équipes <br/>");
            }
            else if($tables == "teamsdelegues"){
               echo("Il y a une erreur dans votre liste de délégues d'équipes <br/>");
            }
            else if($tables == "teams"){
               echo("Il y a une erreur dans votre liste d'équipes <br/>");
            }
            else if($tables == "players"){
               echo("Il y a une erreur dans votre liste de joueurs <br/>");
            }
            else{
               echo("Il y a une erreur dans votre liste de ".$tables."<br/>");
            }
            
         }
      }
   ?>
   <br/><br/><br/><br/>
   <a href="../index.php">Retour à l'index</a><br/>
   <a href="#">Aller au formulaire de modification</a>
</body>
</html>


Dernière édition par Alain.C le Mer 1 Oct - 8:27, édité 2 fois

Alain.C

Messages : 64
Date d'inscription : 22/10/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Vérification consistance

Message par Alain.C le Mer 1 Oct - 6:19

Mis à jour pour les emails et pour godfather.

Alain.C

Messages : 64
Date d'inscription : 22/10/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Vérification consistance

Message par Alain.C le Mer 1 Oct - 8:26

Encore mis à jours, des p'tites modifs de rien du tout + listes de ce qui reste à faire.

Alain.C

Messages : 64
Date d'inscription : 22/10/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Vérification consistance

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum