[RESOLU] Délai d'attente SQL

Eléphant du PHP | 133 Messages

07 mars 2021, 13:31

Bonjour
Je créé un site pour une association.
Dans un premier temps sur une page je crée mon association que je stocke sur dans ma base de données MySQL.
Dans un second temps, je crée le bureau (rôle) de l'association (président, secrétaire, trésorier, etc), que je stocke sur dans ma base de données MySQL. Pour chacun je crée un identifiant automatiquement.

Code : Tout sélectionner

<?php try { include("../connect.php"); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } // On ajoute une entrée dans la table $pdoStat = $db->prepare('INSERT INTO t_bureau VALUES(NULL,:Id_Assos,:Id_Role,:Id_Droit,:Nom,:Prenom,:Email,:Telephone,:Adresse,:CodePostal,:Ville_Membre,:Identifiant,:Passwords,:Photo,:PhotoReduit)'); //on lie chaque marqueur à une valeur $pdoStat->bindValue(':Id_Assos', $_POST['Id_Assos'], PDO::PARAM_INT); $pdoStat->bindValue(':Id_Role', $_POST['Id_Role'], PDO::PARAM_INT); $pdoStat->bindValue(':Id_Droit', $_POST['Id_Droit'], PDO::PARAM_INT); $pdoStat->bindValue(':Nom', $_POST['Nom'], PDO::PARAM_STR); $pdoStat->bindValue(':Prenom', $_POST['Prenom'], PDO::PARAM_STR); $pdoStat->bindValue(':Email', $_POST['Email'], PDO::PARAM_STR); $pdoStat->bindValue(':Telephone', $_POST['Telephone'], PDO::PARAM_STR); $pdoStat->bindValue(':Adresse', $_POST['Adresse'], PDO::PARAM_STR); $pdoStat->bindValue(':CodePostal', $_POST['CodePostal'], PDO::PARAM_STR); $pdoStat->bindValue(':Ville_Membre', $_POST['Ville_Membre'], PDO::PARAM_STR); $pdoStat->bindParam(':Identifiant', $Identifiant, PDO::PARAM_STR); //identifiant calculé $pdoStat->bindParam(':Passwords', $pass_hash, PDO::PARAM_STR); //mot de passe standard $pdoStat->bindParam(':Photo', $file_dest, PDO::PARAM_STR); //IMAGE TAILLE NORMALE $pdoStat->bindParam(':PhotoReduit', $file_dest2, PDO::PARAM_STR); //IMAGE TAILLE reduite //Création du mot de passe standard $pass_hash = password_hash("12345678", PASSWORD_DEFAULT); //Création de l'identifiant //Nombre de ligne dans la table bureau $sql = "SELECT COUNT(*) FROM t_bureau"; $res = $db->query($sql); $count = $res->fetchColumn() + 1; //type association $Type = $_POST['Id_Assos']; $sql = "SELECT Type_Long FROM t_type_assos INNER JOIN t_associations ON t_type_assos.Id_Type_Assos = t_associations.Id_Type_Assos INNER JOIN t_bureau ON t_bureau.Id_Assos = t_associations.Id_Assos where t_bureau.Id_Assos= $Type"; $res = $db->query($sql); $Type_Long = $res->fetchColumn(); $T = substr($Type_Long, 0, 1); //Type d'association //type DE MEMBRE $Droit = $_POST['Id_Droit']; $sql = "SELECT Droit FROM t_droit INNER JOIN t_bureau ON t_droit.Id_Droit = t_bureau.Id_Droit where t_bureau.Id_Droit= $Droit"; $res = $db->query($sql); $DroitMembre = $res->fetchColumn(); $D = substr($DroitMembre, 0, 1); //TYPE DE MEMBRE //Departement Assos $Type = $_POST['Id_Assos']; $sql = "SELECT Code_Postal FROM t_associations INNER JOIN t_bureau ON t_associations.Id_Assos = t_bureau.Id_Assos where t_bureau.Id_Assos= $Type"; $res = $db->query($sql); $Dept = $res->fetchColumn(); $Dpt = substr($Dept, 0, 2); //DEP ASSOS //Villet Assos $Type = $_POST['Id_Assos']; $sql = "SELECT Ville FROM t_associations INNER JOIN t_bureau ON t_associations.Id_Assos = t_bureau.Id_Assos where t_bureau.Id_Assos= $Type"; $res = $db->query($sql); $Ville = $res->fetchColumn(); $V = substr($Ville, 0, 2); //VILLE ASSOS //N° ORDRE ASSOS //N° ORDRE REFERENT $I = substr($_POST['Id_Assos'], 0, 1); $N = substr($_POST['Nom'], 0, 2); $C = substr($_POST['Code_Postal'], 0, 2); $R = substr($_POST['Id_Role'], 0, 1); $P = substr($_POST['Prenom'], 0, 2); $Identifiant = $T . $D . $Dpt . $V . $count;
Jusque là tout est ok, sauf que lorsque j'ajoute le premier rôle l'identifiant est incomplet. Apres pour les autres roles l'identifiant est complet.

Existet-il un délai de latence avant la BDD ne se mette à jour avec les infos de l'assos?

Mammouth du PHP | 2703 Messages

07 mars 2021, 13:35

non

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 mars 2021, 11:20

Salutations !

Comme indiqué brièvement par or1, il n'y a effectivement aucune latence au niveau de la base de données, les requêtes s'exécutent à la suite les unes des autres.

Quand tu dis que l'identifiant est incomplet, quelle partie manque-t-il ? As-tu testé / affiché chaque variable qui constitue ton identifiant pour savoir lesquelles manquaient ?

A première vue, dans tes requêtes, tu fais une jointure avec la table t_bureau, sauf que d'après ce que tu décris, au début du traitement cette table est vide et le INNER JOIN t_bureau ne peut donc pas retourner de résultat. Après avoir insérer le premier membre en revanche, la table est remplie, la jointure renverra des résultats et ton identifiant pourra être constitué.

Mais as-tu réellement besoin d'interroger la tableau t_bureau dans tes requêtes, alors que l'idée est justement de la remplir ? La table t_associations n'est elle pas suffisante pour obtenir toutes les informations dont tu as besoin pour créer les membres du bureau ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 133 Messages

09 mars 2021, 10:50

Bonjour et merci
En effet, ta réponse est excellente. J'avais déjà supprimé la liaison avec la table t_bureau et ça a marché pour ce point. Maintenant, il faut que je vérifie mes autres requêtes.

J'admire ton excellente analyse du problème. Bravo et encore merci.