IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Amélioration de mon code PHP avec allegement de ma base de données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut Amélioration de mon code PHP avec allegement de ma base de données
    Bonjour à tous.


    J'ai actuellement un script qui me permet de saisir les informations de chaque participant à un jeu.

    Parmi ces informations l'on peut inscrire cette personne dans maximum 20 ligues, donc des que j'ouvre la fiche d'un joueur j'ai mon script qui créé les 20 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $joueur=@$_GET['joueur']; 
     
    $res_ligue = mysql_query("SELECT * FROM `".$sufftable."dem_ligue` where idJOUEUR='$joueur' order by nbligue asc");
    for ($i = 2; $i <= 20; $i++) 
    {
    $res_nbligue = mysql_query("SELECT * FROM `".$sufftable."dem_ligue` where idJOUEUR='$joueur' and nbligue ='$i'");
    $nb=mysql_num_rows($res_nbligue );
    if ($nb==0){$modif=mysql_query("INSERT INTO `".$sufftable."dem_ligue` (`idJOUEUR`,`nbligue `) VALUES ('$joueur','$i')");}
    }

    Alors que dans mon admin PHP j’utilise un nombre aléatoire de lignes sans jamais savoir combien à l'avance mais toujours max 20.

    La premier ligne est affichée, les autres sont cachées et s'affichent en cliquent sur un plus en queue de ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    													echo '<div class="form-group normal">
    														<div class="col-sm-1">Ligue</div>
    														<div class="col-sm-1">niveau</div>
    														<div class="col-sm-1-1">points</div>
    														<div class="col-sm-1-1">Infos/CP</div>
    													</div>';	
    													$res_ligue = mysql_query("SELECT * FROM `".$sufftable."dem_ligue` where idJOUEUR='$joueur' order by nbligue asc");
    													for ($i = 2; $i <= 20; $i++) 
    													{
    													      $res_nbligue = mysql_query("SELECT * FROM `".$sufftable."dem_ligue` where idJOUEUR='$joueur' and nbligue ='$i'");
    													      $nb=mysql_num_rows($res_nbligue );
    													      if ($nb==0){$modif=mysql_query("INSERT INTO `".$sufftable."dem_ligue` (`idJOUEUR`,`nbligue `) VALUES ('$joueur','$i')");}
    													}													
    													while($clligue = mysql_fetch_array($res_ligue , MYSQL_ASSOC))
    													{
    													      $nbligue =$clligue ['nbligue'];
    													      if ($clligue ['nomligue'] =="1"){$ncl_nomligue="Bronze";}
    													      if ($clligue ['nomligue'] =="2"){$ncl_nomligue="Argent";}
    													      if ($clligue ['nomligue'] =="3"){$ncl_nomligue="Or";}
                                                                                                                 $niveauligue=$clligue ['niveauligue'];
                                                                                                                 $pointsligue=$clligue ['pointsligue'];
                                                                                                                 $infosligue=$clligue ['infosligue'];
     
    													echo '  	
    													<div name="divligue_'.$nbligue.'" id="divligue_'.$nbligue.'">
     
    														<div class="col-sm-1"><select name="nomligue_'.$nbligue.'" id="nomligue_'.$nbligue.'" onchange="envoi_ligue(\'nomligue_'.$nbligue .'\','.$joueur.',.$nbligue .');" ><option disabled>Organisme</option>';if ($clcred['credracsoc']<>''){echo '<option value="'.$clligue['credracsoc'].'" selected="selected">'.$ncl_nomligue.'</option>';} echo '<option value=""></option>'; require ('liste_ligue.php');echo '</select></div>
     
    														<div class="col-sm-1"><div id="niveauligue_'.$nbligue.'" style="'; if ($clligue['niveauligue']=="10"){echo 'display:none';}echo '"><input type="text"  id="niveauligue_'.$nbligue.'" name="niveauligue_'.$nbligue.'" value="'.$clligue['niveauligue'].'" onblur="envoi_ligue(\'niveauligue_'.$nbligue.'\','.$joueur.','.$nbligue.')" ></div></div>
     
    														<div class="col-sm-1"><div id="pointsligue_'.$nbligue.'" style="'; if ($clligue['pointsligue']=="10"){echo 'display:none';}echo '"><input type="text"  id="pointsligue_'.$nbligue.'" name="pointsligue_'.$nbligue.'" value="'.$clligue['pointsligue'].'" onblur="envoi_ligue(\'pointsligue_'.$nbligue.'\','.$joueur.','.$nbligue.')" ></div></div>
     
    														<div class="col-sm-1"><div id="infosligue_'.$nbligue.'" style="'; if ($clligue['infosligue']=="10"){echo 'display:none';}echo '"><input type="text"  id="infosligue_'.$nbligue.'" name="infosligue_'.$nbligue.'" value="'.$clligue['infosligue'].'" onblur="envoi_ligue(\'infosligue_'.$nbligue.'\','.$joueur.','.$nbligue.')" ></div></div>
    														';
    														$i=$nbcred + 1;
    														echo '
    														<div class="col-sm-1-1"><span style="float:right;"><a href="javascript:;" onclick="document.getElementById(\'divligue_'.$i.'\').style.display = \'block\'"><b>+</b></a></span></div>														
    													</div>';
    													}
    Chaque info tapée dans un champ d'une ligne est envoyée via une fonction javascript qui traite l'info en ajax et retourne un CSS sur le champ pour montrer que l'inf a été enregistrée.

    Le problème est le suivant, pour chaque joueur j'enregistre à a chaque fois mes 20 lignes de codes dans ma base même si au final j'en utilise que 2 ou 3.

    Quel serait le moyen pour alléger ce genre d'utilisation s'il vous plait.

    Merci pour votre aide
    Olivier

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Ne pas créer les 20 lignes quand tu ouvres un joueur. Mais seulement quand tu enregistres.
    Faire comme tu fais actuellement et supprimer les lignes en trop quand tu as tout enregistré.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu devrais te mettre à PDO (d'urgence), aux requêtes préparées et ne pas escmarmotter escamoter la validation des données GET (et de tout ce qui vient de l'extérieur d'une manière générale), car écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $joueur=@$_GET['joueur']; 
     
    $res_ligue = mysql_query("SELECT * FROM `".$sufftable."dem_ligue` where idJOUEUR='$joueur' order by nbligue asc");
    c'est même plus un trou de sécurité, c'est un gouffre pour les injections SQL. (autrement dit si ce script est accessible en ligne, n'importe qui peut faire ce qu'il veut de ta base de données.)

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Tu devrais te mettre à PDO (d'urgence), aux requêtes préparées et ne pas escmarmotter escamoter la validation des données GET (et de tout ce qui vient de l'extérieur d'une manière générale), car écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $joueur=@$_GET['joueur']; 
     
    $res_ligue = mysql_query("SELECT * FROM `".$sufftable."dem_ligue` where idJOUEUR='$joueur' order by nbligue asc");
    c'est même plus un trou de sécurité, c'est un gouffre pour les injections SQL. (autrement dit si ce script est accessible en ligne, n'importe qui peut faire ce qu'il veut de ta base de données.)
    Je comprends CosmoKnacki, mais il m'est impossible pour le moment de me mettre a PDO, j'ai essayé et c'est suffisamment compliqué pour que je ne puisse trouver le temps de m'y mettre.
    Ensuite c'est un script qui fait partie d'une administration avec accès sécurisé dont l'URL de la page connexion n'est connue que des seuls professionnels qui l'utilisent, tous issus de la meme société.


    Merci badaze pour cette information mais tant que l'année n'est pas terminée, l'on ne sait pas à l'avance combien il y aura de ligues, donc durant 12mois, meme une fois enregistré, l'on peut revenir régulièrement sur la fiche du joueur et y rajouter des ligues

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    @kaolivier.

    A ta place je ferai d'urgence ce que préconise CosmoKnacki ou tout du moins dans un premier temps contrôler la validité les paramètres passés aux pages ($_GET, $_POST). Même si l'url d'administration n'est connue que de quelques personnes, je suppose que le site est accessible à tous et que les failles de la partie admin se retrouvent dans la partie publique. Bref. Là ça n'est même pas urgent c'est plusqurgent.

    Pour ce qui est de l'allègement de la bdd tu peux fort bien faire comme suit :

    - Lecture des ligues associées au joueur (0 ligne lue lors de la création du joueur)
    - Remplissage d'un tableau contenant les données des ligues du joueur.
    - Complément du tableau jusqu'à 20 avec des valeurs par défaut.
    - Parcours du tableau pour afficher les données.

    Quand tu fais une modification ou un ajout tu insères ou mets à jour selon que tu trouves où pas des données dans la table.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Par défaut
    Non il n'y a aucun accès public, l'admin est interne un peu comme un intranet, bien qu'il faille une connexion internet pour se connecter.

    D'ici quelques mois je financerai un freelance pour qu'il me traduise tous ces scripts avec PDO, mais franchement je ne comprends pas cette urgence ???

    OVH, et 1and1 qui sont les seuls serveurs sur lesquels tous mes scripts sont installés pour des centaines de personnes me disent eux-memes que le PHP 5.6 restera encore actif pour 2 ou 3 ans minimum et mysql fonctionnera encore durant cette période, alors pourquoi faudrait il se jeter de suite sur PDO ?? pour la sécurité c'est clair que les fonctions les plus sensibles sont accessibles dans mes scripts sur la base de séquence hachées ou cryptées, après tout reste piratable de toute façon.

    - Lecture des ligues associées au joueur (0 ligne lue lors de la création du joueur)
    - Remplissage d'un tableau contenant les données des ligues du joueur.
    - Complément du tableau jusqu'à 20 avec des valeurs par défaut.
    - Parcours du tableau pour afficher les données.

    Quand tu fais une modification ou un ajout tu insères ou mets à jour selon que tu trouves où pas des données dans la table.
    C'est ce que je fais déjà. En fait je cherchais plus une fonctions qui en cliquant sur le plus créé à la fois la ligne en BDD et en meme temps affiche la lignes pour la remplir ensuite.

Discussions similaires

  1. [MySQL] Beug avec mon code php
    Par baalc dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/04/2017, 20h07
  2. Livre d'Or PHP avec fichier texte (sans base de données)
    Par Invité dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 7
    Dernier message: 24/04/2016, 06h53
  3. [MySQL] Problème avec mon code PHP
    Par af.zakaria dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/04/2012, 17h51
  4. [EasyPHP] Problème d'affichage avec mon code PHP
    Par LegioKilt dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/11/2007, 04h13
  5. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo