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 196
    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 196
    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 196
    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
Problème sur les redirections de pages profondes URL Rewriting et .htaccess 4 Décembre 2019
Problème de référencement et ajout sitemaps Problèmes de référencement spécifiques à vos sites 26 Novembre 2019
Problème affichage des derniers articles wordpress page accueil Administration d'un site Web 20 Novembre 2019
Gestion de cookies problème directives CNIL. Administration d'un site Web 15 Novembre 2019
Search Console URL exclues : comment résoudre le problème ? Problèmes de référencement spécifiques à vos sites 15 Novembre 2019
Search Console Premier référencement et problèmes Débuter en référencement 11 Novembre 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice