Problème de vérification PHP/MySQL

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par matbaldy, 30 Mars 2013.

  1. matbaldy
    matbaldy Nouveau WRInaute
    Inscrit:
    28 Août 2012
    Messages:
    2
    J'aime reçus:
    0
    Bonjour
    Je suis actuellement sur un petit script PHP/MySQL pour un établissement scolaire et j'ai un soucis lors de l'import d'un fichier CSV.

    Ce fichier recense les élèves et les parents. Chaque ligne comporte :
    - nom de l'élève
    - prénom de l'élève
    - nom du parent 1
    - prénom du parent 1
    - nom du parent 2
    - prénom du parent 2

    L'élève est toujours présent, en revanche, il peut y avoir les 2 parents, le parent 1 seulement et le parent 2 seulement.
    Pour éviter d'ajouter plusieurs fois le même parent (par exemple plusieurs élèves de la même famille dans l'établissement), je fais une vérification censée m'empêcher l'ajout si le parent est déjà présent dans la table.

    Code:
    if($fp = fopen($fichier,"r")){
        //on ne lit pas la première ligne (en-tête)
        $ligne = fgets($fp,4096);
        /* extraction d'une ligne */
        while($ligne = fgets($fp)){
            $tableau = explode(';',$ligne);
            for($i=0;$i<1;$i++){
                //Vérification que la personne n'est pas déjà présente dans la table
                $nommin1 = strtolower($tableau[4]);
                $prenommin1 = strtolower($tableau[5]);
                $verification = mysql_query('SELECT * FROM votants WHERE nom_votant = "'.$nommin1.'" AND prenom_votant = "'.$prenommin1.'"');
                $resultat = mysql_num_rows($verification);
                if($tableau[4]!='' && $tableau[5]!='' && $resultat == 0){
                    $parent1 = mysql_query('INSERT INTO votants (id_votant,login_votant,mdp_votant,nom_votant,prenom_votant,nom_eleve,prenom_eleve,classe_eleve,etat_votant)
                        VALUES ("","","","'.$tableau[4].'","'.$tableau[5].'","'.$tableau[0].'","'.$tableau[1].'","'.$tableau[2].'","")');
                    if($parent1){
                        echo 'requête '.$tableau[4].$tableau[5].' OK.<br />';
                    }
                }
                //Vérification que la personne n'est pas déjà présente dans la table
                $nommin2 = strtolower($tableau[7]);
                $prenommin2 = strtolower($tableau[8]);
                $verification2 = mysql_query('SELECT * FROM votants WHERE nom_votant = "'.$nommin2.'" AND prenom_votant = "'.$prenommin2.'"');
                $resultat2 = mysql_num_rows($verification2);
                if($tableau[7]!='' && $tableau[8]!='' && $resultat2 == 0){
                    $parent2 = mysql_query('INSERT INTO votants (id_votant,login_votant,mdp_votant,nom_votant,prenom_votant,nom_eleve,prenom_eleve,classe_eleve,etat_votant)
                        VALUES ("","","","'.$tableau[7].'","'.$tableau[8].'","'.$tableau[0].'","'.$tableau[1].'","'.$tableau[2].'","")');
                    if($parent2){
                        echo 'requête '.$tableau[7].$tableau[8].' OK.<br />';
                    }
                }
            }
        }
        echo '<span style="color: #009900;font-weight: bold;">Upload effectué avec succès !</span><br />';
    }
    Visiblement mon code de vérification ne fonctionne pas mais je n'arrive pas à trouver pourquoi.
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    6 data par ligne dans le fichier pourtant :
    $tableau[7] $tableau[8] ??? tu te serait pas embrouillé les manivelles dans tes indices ?

    edit > après il y a le fait que tes noms prénoms sont cherchés en minuscule dans la base ($nommin1 = strtolower($tableau[4]) par exemple) mais qu'ils vont être insérés sans traitement (VALUES ("","","","'.$tableau[4].'",) ce qui va fatalement fausser le test suivant si le fichier contiens des majuscules.

    Tu pourrait "optimiser un peut" et "uniformiser le traitement" en mettant cache tout en minuscule dès le départ ligne 7 de ton script :
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxcomment">/* extraction d'une ligne */<br /></span><span class="syntaxkeyword">while(</span><span class="syntaxdefault">$ligne </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fgets</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$fp</span><span class="syntaxkeyword">)){<br /></span><span class="syntaxdefault">       $ligne </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> strtolower</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$ligne</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">       $tableau </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">';'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$ligne</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">       </span><span class="syntaxkeyword">...</span><span class="syntaxdefault"> </span>
     
  3. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    bon après comme j'ai rien de spécial a faire ce soir en y réfléchissant un peut tu te prend peut être la tête pour rien car tu pourrait te passer de ce test en créant une clé "unique" sur les deux champs "nom_votant" et "prenom_votant" ce qui fait que tout insert serait rejeté par la base si cette clé existe déjà ... du coup pas besoin de vérifier tu y va bourrin d'un coup en injectant tout et c'est mysql qui fait le ménage a l’entrée (c'est le mode videur)

    Après il y a un truc qui me chagrine c'est justement pour les parents qui ont plusieurs enfants dans l'école que ce passe t il au niveau du champ du prénom de l'enfant ? il n'y en a qu'un qui est pris en compte ? ... pas logique ton truc.

    En fait ce que ton script me dis c'est que tu t'est peut être planté dans le modèle a la base car tu devrais avoir au moins deux tables (ça peut aussi se faire avec une vue que c'est tous des personnes mais faisons simple)

    une table parent, une table enfant reliés par des tables de liaison
    (est l'enfant de 1 ou 2 parents -> couple d'id dans une table de liaison) (le parent est le papa ou la maman de -> couple d'id dans une table de liaison).
    et une troisième table vote relié a la table parent par une relation qui règlerait le nombre de vote possibles (il serait aussi possible de déporter le vote dans la table parent si ils n'ont qu'une voix).
     
  4. matbaldy
    matbaldy Nouveau WRInaute
    Inscrit:
    28 Août 2012
    Messages:
    2
    J'aime reçus:
    0
    En fait la partie élève ne sert pas trop.

    1 parent ne peut voter qu'une fois, assez logique. Donc je dois éviter que le même parent apparaisse 2 fois dans ma table. Hors un même parent peu avoir plusieurs enfants et donc apparaitre sur X lignes différentes, d'où cette idée de vérification.

    Ton idée de clé unique me plait mais je ne voit pas trop comment mettre ça en place et l'utiliser.
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    tu utilise phpmyadmin ? si oui dans l'onglet "structure" correspondant a ta table tu as un volet "index" qui te permet de créer des index de type unique sur 2 colonnes pas exemple. du coup les requêtes insert en doublon seront écartées.
     
Chargement...
Similar Threads - Problème vérification PHP Forum Date
probleme vérification outiles sandbox Débuter en référencement 3 Février 2013
Problème de vérification avec Bing webmaster tool Débuter en référencement 17 Décembre 2012
Problème de Vérification et d'État sur Google Webmaster Débuter en référencement 5 Août 2009
Probleme Google Webmaster Tool code vérification Crawl et indexation Google, sitemaps 24 Juillet 2009
Probleme javascript, vérification de formulaire Développement d'un site Web ou d'une appli mobile 25 Janvier 2008
Probleme verification sitemap et délai d'indexation Crawl et indexation Google, sitemaps 21 Septembre 2007
Problème vérification de page Problèmes de référencement spécifiques à vos sites 22 Février 2006
Problème de htaccess chez Ionos URL Rewriting et .htaccess 12 Septembre 2022
Problème sur jquery avec fonction asynchrone Développement d'un site Web ou d'une appli mobile 6 Septembre 2022
Problème de crawl et d'indexation Crawl et indexation Google, sitemaps 1 Septembre 2022
WordPress Problème affichage style avec Elementor (titre, bordures, separateur) Administration d'un site Web 8 Août 2022
Problème d'indexation de backlinks Débuter en référencement 24 Juillet 2022
Problème d'indexation de backlinks Problèmes de référencement spécifiques à vos sites 21 Juillet 2022
Probleme de visibilité de ma page Facebook Facebook 5 Juillet 2022
problème avec le développeur Droit du web (juridique, fiscalité...) 22 Juin 2022
Problème désindexation des pages de Google Débuter en référencement 21 Juin 2022
Problème d'indexation de pages sur Google Problèmes de référencement spécifiques à vos sites 31 Mai 2022
problème de redirection non souhaitée Administration d'un site Web 28 Avril 2022
Problème d'indexation Produits Prestashop Crawl et indexation Google, sitemaps 28 Avril 2022
Problème d'affichage des campagnes Google Ads dans un tableau de bord Data Studio AdWords 26 Avril 2022