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

Langage PHP Discussion :

Empecher de creer des doublons dans un fichier


Sujet :

Langage PHP

  1. #21
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    J'ai suivi le tutoriel de Mateo21 pour php et le mysql.

    Si tu as une documentation possible a me passer...
    J'ai deja pris toute la faq en php sur le forum.

    Je prefere eviter la POO et apprendre la bases d'abord.

    Edit:
    J'ai eu un aperçu de la POO avec le tutoriel de Mateo21.

  2. #22
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Si je te dis ça c'est parce que là tu aborde un thème qui, sans POO, est (allez on va dire que rien n'est impossible) d'une grande complexité.
    Il serait mieux de mettre ton projet en attente, de consolider tes bases avec un projet plus simple pour ensuite aborder la POO et là reprendre ton jeu.

    As-tu bien réalisé les TP du tutoriel ? Et je dis bien "réalisé" c'est à dire essayé de coder toi même avant de regarder la solution ?
    Parce que là au final quand tu présente la page de ton jeu on a l'impression qu'il est très avancé mais au final as-tu vraiment des choses qui tournent derrière tous ces boutons et images ou est-ce que tu n'as que ça : de l'affichage ?
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  3. #23
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Tout fonctionne, apres je dit pas que je regarde pas un peu beaucoup la solution avant dans le TP, mais petit a petit j'essais a ma vitesse, de realiser ce que tu demande.

  4. #24
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Si tu n'essaye pas de faire toi même les exercices et te contente de regarder la solution, ça ne m'étonne pas vraiment que tu bloque sur quelque chose de portant élémentaire

    Tu dis que tout fonctionne, loin de moi l'idée de vouloir mettre ta parole en doute (personnellement je ne pige pas grand chose à ton jeu), mais du coup y'a t-il un morceau de code qui ne soit pas du copié-collé (modifié ou non) de quelque part ? As-tu vraiment codé une partie de tes mains ? Car là ce que tu cherches à faire, bien que plutôt bancal est quand même simple.
    Il faut faire un test (condition) sur la variable sélectionnée pour voir si elle est contenue dans ton fichier.
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  5. #25
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Les tutoriel sur le php sont en general axé sur la creation de site et de forum, jusque la pas trop de probleme, mais je debute, et continue d'apprendre a ma vitesse. Oui il y a du copié collé, mais j'en comprend le travail,
    et j'essais toujours d'approfondir jusqu'a me passer de ça.

    Creer une application demande beaucoup plus de connaissance et surtout de connaitre pas mal de nouvelle fonction, en sommes on reapprend le php mais a un autre niveau, sur ce coup là j'ai pas mal de lacune.

    Au debut j'ai appris le php juste pour passer le temps, mais vu ce qu'il peut faire... maintenant ca m'interesse d'avantage.
    Ce que je trouve bien dommage, c'est que le php n'est que tres superficiellement abordé dans les tutos, c'est a nous de faire tout le reste quand c'est une application.

    Edit:
    Je reviens sur le "blocage elementaire", dans les tutos il n'y a rien qui permettent d'aprehender ce type de code, on en est loin.
    De plus je rappelle que je n'ai jamais programmé de ma vie.

  6. #26
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Ben le truc c'est que du PHP "poussé" ça passe inévitablement par la POO
    Il ne sert à rien de choisir un langage de programmation orienté objet si tu ne fais que du procédural et là pour le coup des tutoriels PHP orienté objet tu en trouveras.

    Tu dis que tu comprends ce que tu copie et là par contre j'ai déjà plus de mal à te croire quand je te vois faire
    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
    <?php
    if(!empty($_POST)){//On defini pour foreach le post avant de lancer foreach
    echo '<pre';
    print_r($_POST);
    echo '<pre>';
     
     
    //On recupere la liste d'armée et ses valeurs
    foreach($_POST['armeesdiv'] as $valeur)  // On recupere toutes les cases armees, et toutes les cle dans $valeur grace a foreach
    {
    $recup = $valeur;
    $fp = fopen("styleposition.css","a"); // si le fichier n'existe pas on le crée avec le mode de lecture a, et on l'ouvre, ici on cree un nouveau fichier du nom de rapport.txt a l'aide du mode a
     fputs($fp, "\n"); //On ecris dans le fichier crée avec retour a la ligne
     fputs($fp, "$recup"); //On ecris dans les deux fichiers
    }
    fclose($fp); //On ferme le fichier
    }
     
     
    //On recupere la liste d'armée et ses valeurs
    foreach($_POST['armeesdiv'] as $valeur)  // On recupere toutes les cases armees, et toutes les cle dans $valeur grace a foreach
    {
    $recup = $valeur;
    $fp = fopen("nomdoublonside1.txt","a"); // si le fichier n'existe pas on le crée avec le mode de lecture a, et on l'ouvre, ici on cree un nouveau fichier du nom de rapport.txt a l'aide du mode a
     fputs($fp, "\r\n"); //On ecris dans le fichier crée avec retour a la ligne
     fputs($fp, "$recup"); //On ecris dans les deux fichiers
    }
    fclose($fp); //On ferme le fichier
     
     
    ?>
     
    <?php
    require'Doublons_avec_noms_d_armee.php';
    ?>
    et qu'ensuite tu me dis que le contenu de ton fichier ne doit pas bouger
    Rien que les commentaires le disent explicitement que tu "écris" dans ton fichier.

    Encore une fois je ne saurais que te conseiller de repartir d'un peu plus loin (quitte à relire les tutoriels déjà lus et cette fois ci faire vraiment les TP ) avant de continuer ton jeu.

    Citation Envoyé par Patr77 Voir le message
    Edit:
    Je reviens sur le "blocage elementaire", dans les tutos il n'y a rien qui permettent d'aprehender ce type de code, on en est loin.
    De plus je rappelle que je n'ai jamais programmé de ma vie.
    Justement c'est bien là que je veux en venir. Pour moi tu te lance dans un projet trop complexe pour quelqu'un qui débute

    Ce que tu appelle "ce type de code" c'est juste une affaire de conditions et de boucles (et ça c'est toujours abordé en première partie de tous les tutoriels de débutants).
    Là ton problème vient surtout du fait que tu te complique la vie avec tes fichiers texte.
    Essaye du coup de décomposer ton problème.

    Tu cherches en fait à :
    - Lister tes armées (ça apparemment ça fonctionne, c'est donc que tu arrives à lire dans ton fichier texte)
    - Sélectionner une armée (ça est-ce que ça marche aussi du coup ? Tu arrive à récupérer la valeur correspondante au choix ? C'est la première étape)
    - Vérifier que cette valeur n'as pas déjà été sélectionnée avant.
    Et c'est là que tu bloque parce que tu tourne en rond dans ton fichier texte. Mais à ce stade ton fichier texte a déjà joué son rôle : afficher toutes les armées disponibles.
    Ici c'est plus ton fichier texte qui importe. Ce qui importe c'est de mémoriser les valeurs sélectionnée tour à tour pour ne pas les réutiliser.
    Et pour ça tu peux éventuellement, comme je te le disais un peu plus tôt, utiliser un tableau pour les stocker.
    Exemple :
    Ton joueur choisi l'unité 14.
    Tu stocke 14 dans ton tableau.
    Ensuite il choisi 23.
    Tu ajoute 23 dans ton tableau qui contient donc : 14, 23.
    Et ainsi de suite.
    (Je sais il manque une étape, j'y viens )
    A chaque tour lorsqu'il sélectionne une valeur, tu regarde si cette valeur est déjà ou non dans le tableau. Si elle n'y est pas, il peut sélectionner l'unité et tu ajoute cette valeur dans la tableau. Si elle y est déjà, tu lui indique qu'il ne peut pas sélectionner cette valeur et qu'il doit en prendre une autre.
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  7. #27
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Il est evident que je manque de pratique,
    mais je m'y remet,

    Quand aux manuels, il faut chercher les complements sur internet pour avoir a peu pres ce qui nous convient.

    J'avais pensé aussi aux boucles.

  8. #28
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Bonjour,
    j'ai modifier le code, mais je n'obtiens pas ce que je veux,
    a partie le message "Vous pouvez utiliser cette unité'',

    Ce code ne m'empeche ( ne me verifie ) pas s'il y a les doublons, j'ai pourtant vu pas mal de page internet la dessus, et ca ne fonctionne pas...
    Pourriez vous m'apporter des precisions ?
    merci a vous.




    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
    <?php
     
    if(isset($_POST['armeesdiv'])){//On verifie s'il y a initialisation de la variable avec isset
    //On recupere la liste d'armée et ses valeurs dans le fichier nomdoublonside1.txt
    foreach($_POST['armeesdiv'] as $valeur)  // On recupere toutes les cases armees, et toutes les cle dans $valeur grace a foreach
    {
    $recup = $valeur;
     
       $a = file_get_contents('nomdoublonside1.txt');//On ouvre le fichier pour recuperer son contenu et ou sera inscrit la nouvelle ligne
     
    if($recup==$a)
    {
       echo 'Vous avez deja utilisé cette unitée';
    }	     
    elseif($recup!=$a)
    {
     echo 'Vous pouvez utiliser cette unité' ;
    }
    $fp = fopen("nomdoublonside1.txt","a"); // si le fichier n'existe pas on le crée avec le mode de lecture a, et on l'ouvre, ici on cree un nouveau fichier du nom de rapport.txt a l'aide du mode a
     fputs($fp, "\r\n"); //On ecris dans le fichier crée avec retour a la ligne
     fputs($fp, "$recup"); //On ecris dans les deux fichiers
    }
     
    fclose($fp); //On ferme le fichier
     
     
    }
     
    }
     
    ?>

  9. #29
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Tu es en train de comparer chaque valeur choisie une à une (foreach) à l'intégralité de ton fichier à chaque fois.
    Il ne risque pas de te trouver quelque chose
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  10. #30
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Merci de l'interet que tu porte a mon probleme.

    En effet c'est ce que je voyais, et je ne vois pas trop quelle fonction permet de gerer les ligne une a une :
    fopen et fgets avec un while serait valable ?
    Parce que je l'avais utilisé et ca n'a pas marché.



    De mon coté j'ai mis tout sur bdd:
    Voici ce que ca donne...

    Formulaire:
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
      <form action="stylepositionside1armeenumero.php" method="post"> 
                    <p align="center"><select size="1" name="armeesdiv[]"><!--Si ajout de [ ] a armeesdiv cela donne array dans la bdd--->
              <option selected="selected">All</option>
    		  <option value="#div1"> 1-----Napoleon</option>
             		  <option value="#div2">2-----Ney </option>      
          		  <option value="#div3">3-----Oudinot</option>
             		  <option value="#div4">4-----Murat</option>     <!--Value peut etre nommé autrement que pour la partie visible, et est placé dans le $_POST pour servir de #div numeroté dans le fichier css--->   
    		  <option value="#div5"> 5-----Ie Corps - Vandamme</option>
             		  <option value="#div6">6-----IIe Corps - Victor</option>      
          		  <option value="#div7"> 7-----IIIe Corps - Souham</option>
             		  <option value="#div8">8-----IVe Corps - Bertrand</option>     
    		  <option value="#div9">9-----Ve Corps - Lauriston</option>
             		  <option value="#div10">10-----VIe Corps - Marmont</option>      
          		  <option value="#div11">11-----VIIe Corps - Reynier</option>
             		  <option value="#div12"> 12-----VIIIe Corps - Poniatowski</option>        
    		  <option value="#div13">13-----IXe Corps - Augereau</option>
             		  <option value="#div14">14-----XIe Corps - macdonald</option>      
          		  <option value="#div15">15-----XIIe Corps - Lobau</option>
             		  <option value="#div16">16-----XIIIe Corps - Davout</option>
    		  <option value="#div17"> 17-----XIVe Corps - Gouvion St-Cyr</option>
             		  <option value="#div18">18-----2e Div VG - Curial</option>      
          		  <option value="#div19">19-----10e Div - Girard</option>
             		  <option value="#div27"> 27-----Cav. Garde - Nansouty</option>        
    		  <option value="#div28"> 28-----I CC - Lt Maubourg</option>
             		  <option value="#div29">29-----II CC - Sebastiani</option>      
          		  <option value="#div30"> 30-----III CC - Arrighi</option>
             		  <option value="#div31">31-----V CC - Pajol</option>     
    		  <option value="#div32">32-----Garde Imp. - Mortier</option>
             		  <option value="#div33"> 33-----37 Div - Hammerstein</option>      
          		  <option value="#div34">34-----Corps observ - Lemoine</option>
            </select></p>
     
    		 <p>
     <input type="submit" value="Valider l'armee" />
     <input type="reset" value="Annuler" />
     </p>
      </form>
     
     
      <?php
      require'BDD.php';
      ?>
     
      <?php
      if(isset($_POST['armeesdiv']))//Si l'armée a ete envoyée
      if(empty($_POST['armeesdiv']))//Si il y a quelque chose
     
    // On utilise la fonction PHP htmlspecialchars pour éviter d'enregistrer du code HTML dans la table
     
    {
    $armeesdiv = mysql_real_escape_string(htmlspecialchars($_POST['armeesdiv']);//On retire l'effet des quote pour eviter les scripts
     
     
    // Requête qui récupère la derniere unité
    $armeesdiv_doublons = mysql_query("SELECT UnitesSide1 FROM xxxxxxtourSide1 ORDER BY ID DESC LIMIT 0, 250");
             $row = mysql_fetch_array($armeesdiv_doublons);
    		 $armeesdiv = $row[0];
     
    		 // Début du bloc d'instruction conditionnelle.
      if ($_POST['armeesdiv'] == $armeesdiv)
        {
    	echo 'Vous avez deja joué cette unité';
    	}
    	else
    	{
    	   //On enregistre dans la table 
    mysql_query("INSERT INTO xxxxxxxxx_tourSide1 VALUES('', '$armeesdiv')");
    }
    mysql_close();
    }
    }
      ?>


    PHP:

    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
    <?php
    require'BDD.php';
    ?>
     
     
    <?php //on doit récupérer les 10 dernières entrées de la table
    mysql_select_db("campagne_rapport_tourSide1"); //On selectionne la table
    if (isset($_POST['armeesdiv']))  //retrait des [] dans le formulaire, qui n'etait bon qu'avec foreach, pas avec la bdd
    { 
        if (!empty($_POST['armeesdiv']))  
        { 
    	foreach($_POST['armeesdiv'] as $valeur)
    	{
    	$recup2 = $valeur;//On recupere la variable $valeur pour avoir la div numerotée et non l'array dans la bdd
     
            $armeesdiv = mysql_real_escape_string(utf8_decode($recup2)); //On protege...
     
     
    		// On utilise la requête suivante pour envoyer les armées jouées dans un tour de jeu :
            $reponse = mysql_query("INSERT INTO xxxxxxxxtourSide1(UnitesSide1) VALUES('$armeesdiv')"); 
        } 
    } 
    // Puis on fait une boucle pour afficher tous les résultats :
    $reponse = mysql_query("SELECT * FROM  xxxxxxxxxxxtourSide1"); 
    while($val = mysql_fetch_array($reponse)) 
    { 
      echo '<p>Vous avez joué l\'unité <strong>' .htmlentities(stripslashes($val['UnitesSide1'])).'</strong></p>'; 
    } 
    }
    ?>
    Evidement toujours un probleme,
    les doublons peuvent passer.

  11. #31
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Bon ben du coup si tu as tout mis en base de données, plus de problème avec les fichiers (mais sinon oui une boucle pour lire ligne par ligne ton fichier c'était bon).

    J'ai quand même un problème de fond : Pourquoi t'obstine tu à vouloir réécrire des choses dans la BDD ? C'est normal que tu te retrouve avec des doublons.
    Tes armées ne changent jamais, non ?
    Donc que tu ai besoin de les avoir en base pour les lister (et les lier à d'autres choses j'imagine) c'est logique.
    Mais ta table n'intervient pas dans ton problème. Ce dont tu as besoin c'est de mémoriser les choix de ton utilisateur (un tableau devrait faire l'affaire) pour t'assurer qu'il ne peut pas choisir à nouveau la même armée dans le même tour.

    Donc :

    Tour 1 :
    - Création du tableau
    - Choix de l'armée A par l'utilisateur
    - On regarde si l'armée choisie est déjà dans le tableau ou non. A n'est pas contenu dans le tableau => Choix autorisé.
    - Stockage de A dans le tableau
    - Choix de l'armée B par l'utilisateur
    - On regarde si l'armée choisie est déjà dans le tableau ou non. B n'est pas contenu dans le tableau => Choix autorisé.
    - Stockage de B dans le tableau
    - Choix de l'armée A par l'utilisateur
    - On regarde si l'armée choisie est déjà dans le tableau ou non. A est déjà contenu dans le tableau => Choix refusé.

    Tour 2 :
    On redémarre avec le tableau vide...


    Si j'ai bien tout compris c'est un truc comme ça que tu cherche à faire non ?

    Là du coup je t'ai donné la logique, y'a plus qu'à transformer ça en code
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  12. #32
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Fahelis Voir le message
    Bon ben du coup si tu as tout mis en base de données, plus de problème avec les fichiers (mais sinon oui une boucle pour lire ligne par ligne ton fichier c'était bon).
    Je reverrais cela.



    Citation Envoyé par Fahelis Voir le message
    J'ai quand même un problème de fond : Pourquoi t'obstine tu à vouloir réécrire des choses dans la BDD ? C'est normal que tu te retrouve avec des doublons.
    Citation Envoyé par Fahelis Voir le message
    Tes armées ne changent jamais, non ?
    J'ai une liste qui ne change pas.

    Citation Envoyé par Fahelis Voir le message
    Donc que tu ai besoin de les avoir en base pour les lister (et les lier à d'autres choses j'imagine) c'est logique.
    Pas encore en bdd, je ne sais pas trop encore le choix que je prendrais.



    Citation Envoyé par Fahelis Voir le message
    Mais ta table n'intervient pas dans ton problème. Ce dont tu as besoin c'est de mémoriser les choix de ton utilisateur (un tableau devrait faire l'affaire) pour t'assurer qu'il ne peut pas choisir à nouveau la même armée dans le même tour.
    La je vois pas du tout l'idée.

    Citation Envoyé par Fahelis Voir le message
    Donc :

    Tour 1 :
    - Création du tableau
    qui pourrait se faire a partir de fichier, bdd, je vois pas l'idée, est ce possible sur bdd ?

    Citation Envoyé par Fahelis Voir le message
    Choix de l'armée A par l'utilisateur
    - On regarde si l'armée choisie est déjà dans le tableau ou non. A n'est pas contenu dans le tableau => Choix autorisé.
    - Stockage de A dans le tableau
    - Choix de l'armée B par l'utilisateur
    - On regarde si l'armée choisie est déjà dans le tableau ou non. B n'est pas contenu dans le tableau => Choix autorisé.
    - Stockage de B dans le tableau
    - Choix de l'armée A par l'utilisateur
    - On regarde si l'armée choisie est déjà dans le tableau ou non. A est déjà contenu dans le tableau => Choix refusé.

    Tour 2 :
    On redémarre avec le tableau vide...


    Si j'ai bien tout compris c'est un truc comme ça que tu cherche à faire non ?

    Là du coup je t'ai donné la logique, y'a plus qu'à transformer ça en code

  13. #33
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    C'est peut-être moi qui comprends mal ta demande.
    J'essaye de reformuler de manière la plus détaillée possible, dis moi si c'est bien ça.

    Tu as une liste fixe d'armée (fichier texte ou BDD là pour le coup on s'en fout c'est pas le sujet)

    Durant un tour de jeu le joueur pour agir avec plusieurs armées de la liste mais pas deux fois la même dans le tour.
    formulé autrement : Plusieurs actions par tour mais une seule action par armée (dans le même tour).

    En revanche au tour suivant il peut de nouveau accéder à toutes les armées.


    Et donc toi ce que tu cherches à faire c'est de limité ton joueur pour que lors de son tour il ne puisse pas agir deux fois avec la même armée.

    J'ai tout bon ? (Comme ça on repose les bases avant de reprendre ce que j'ai dis plus tôt )
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  14. #34
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Fahelis Voir le message
    C'est peut-être moi qui comprends mal ta demande.
    J'essaye de reformuler de manière la plus détaillée possible, dis moi si c'est bien ça.

    Tu as une liste fixe d'armée (fichier texte ou BDD là pour le coup on s'en fout c'est pas le sujet)
    C'est dans le formulaire, dans les select...




    Citation Envoyé par Fahelis Voir le message
    Durant un tour de jeu le joueur pour agir avec plusieurs armées de la liste mais pas deux fois la même dans le tour.
    formulé autrement : Plusieurs actions par tour mais une seule action par armée (dans le même tour).
    Oui.


    Citation Envoyé par Fahelis Voir le message
    En revanche au tour suivant il peut de nouveau accéder à toutes les armées.
    Oui, c'est dans cette idée.


    Citation Envoyé par Fahelis Voir le message
    Et donc toi ce que tu cherches à faire c'est de limité ton joueur pour que lors de son tour il ne puisse pas agir deux fois avec la même armée.

    J'ai tout bon ? (Comme ça on repose les bases avant de reprendre ce que j'ai dis plus tôt )
    C'est cela.

  15. #35
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Bon alors maintenant que tout est clair, reprenons

    Tu affiche la liste de tes armées dans ton formulaire. Elle est complète et elle ne bougera pas.
    Donc jamais tu n'auras besoin de modifier ta table ou ton fichier texte contenant cette liste, il faut te sortir cette idée de la tête pour de bon.

    Ta base de données (ou ton fichier texte) sert à sauvegarder un état persistant.
    Le choix de l'armée par le joueur n'est pas un état persistant puisque ça va changer plusieurs fois dans le tour. Tu n'as donc aucun besoin de stocker cette information plus longtemps que pendant un tour de jeu.

    Petit exemple pour un jeu de rôle, j'espère te parlera :
    Ton personnage peux avoir plusieurs armes.
    Tu as donc une épée, une dague, un fléau d'arme, une massue et un bâton.
    Toutes ces armes vont être stockées en base puisqu'elles seront gardées tout le temps par ton personnage (sauf si tu les jette ou les vends mais disons que non).
    Donc en base de données tu aura une table "armes" dans laquelle se trouvent la liste ci-dessus.
    Quand tu joue tu es d'accord que tu peux changer d'arme quand tu le souhaites.
    Tu va donc équiper ton épée dans un premier temps. Un peu plus tard tu tombes sur une porte qui a besoin d'être défoncée, hop tu équipe ta massue pour passer à l'acte. Une fois fait tu reprend ton épée. Puis tu tombe sur un troll contre lesquelles tu as un bonus d'attaque avec ton fléau. Tu équipes donc ce dernier.
    Maintenant essaye de trouver un intérêt à stocker dans ta base de données l'historique de tes changements d'armes (épée -> massue -> épée -> fléau)...
    Normalement tu ne devrait pas en trouver car ça n'a pas d'intérêt dans ce cas. Le fait de savoir quelle arme était équipée avant celle avec laquelle tu frappe ne sert à rien (et les autres avant elle non plus).

    Fin de l'exemple, retour à ta situation.
    Ici c'est exactement pareil, le choix de ton personnage n'a pas d'intérêt sur le long terme.
    Il en a en revanche pendant le tour de jeu mais uniquement celui-ci. Une fois le tour fini on se fiche de se souvenir de quelles armées il a joué puisqu'il peut rejouer n'importe laquelle.

    Inutile donc ici de vouloir stocker en base de données le choix du joueur.

    En revanche il faut le stocker quelque part pendant le tour de jeu pour pouvoir l'empêcher de choisir la même armée deux fois.
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  16. #36
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    il faut savoir prendre du recul.
    Ce qui permet de voir les choses autrement.

    au lieu de tester dans un fichier, ou dans une base de données (ce qui multiplie inutilement les échanges) :

    1/ Initialisation en début de tour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['MesArmees'] = array(); // Initialisation en début de tour
    2/ à chaque armée sélectionnée, on vérifie si elle est déjà dans l'array. Sinon, on l'ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $armee = $_POST['armee'];
    if( !in_array($armee, $_SESSION['MesArmees']) )
    {
       // on l'ajoute
       $_SESSION['MesArmees'][] = $armee;
    } else {
      echo 'cette armée est déjà en action pour ce tour de jeu!';
    }
    On peut ajouter un compteur, si le nombre d'armées sélectionnable est limité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( count($_SESSION['MesArmees'])<=10) ) // 10 maxi, par exemple
    {
    ...
    }
    3/ Là, tu peux, au choix, enregistrer dans un fichier ou en BdD les armées sélectionnées pour le tour de jeu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_SESSION['MesArmees'] as $monarmee)
    {
     ...
    }
    @Fahelis
    L'enregistrement du "tour de jeu" dans un fichier (ou en BdD) est utile pour les AUTRES joueurs, car ils n'ont pas accès aux variables de SESSION des autres (ce qui est normal) !

  17. #37
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Fahelis Voir le message
    Bon alors maintenant que tout est clair, reprenons

    Tu affiche la liste de tes armées dans ton formulaire. Elle est complète et elle ne bougera pas.
    Donc jamais tu n'auras besoin de modifier ta table ou ton fichier texte contenant cette liste, il faut te sortir cette idée de la tête pour de bon.

    Ta base de données (ou ton fichier texte) sert à sauvegarder un état persistant.
    Le choix de l'armée par le joueur n'est pas un état persistant puisque ça va changer plusieurs fois dans le tour. Tu n'as donc aucun besoin de stocker cette information plus longtemps que pendant un tour de jeu.

    Petit exemple pour un jeu de rôle, j'espère te parlera :
    Ton personnage peux avoir plusieurs armes.
    Tu as donc une épée, une dague, un fléau d'arme, une massue et un bâton.
    Toutes ces armes vont être stockées en base puisqu'elles seront gardées tout le temps par ton personnage (sauf si tu les jette ou les vends mais disons que non).
    Donc en base de données tu aura une table "armes" dans laquelle se trouvent la liste ci-dessus.
    Quand tu joue tu es d'accord que tu peux changer d'arme quand tu le souhaites.
    Tu va donc équiper ton épée dans un premier temps. Un peu plus tard tu tombes sur une porte qui a besoin d'être défoncée, hop tu équipe ta massue pour passer à l'acte. Une fois fait tu reprend ton épée. Puis tu tombe sur un troll contre lesquelles tu as un bonus d'attaque avec ton fléau. Tu équipes donc ce dernier.
    Maintenant essaye de trouver un intérêt à stocker dans ta base de données l'historique de tes changements d'armes (épée -> massue -> épée -> fléau)...
    Normalement tu ne devrait pas en trouver car ça n'a pas d'intérêt dans ce cas. Le fait de savoir quelle arme était équipée avant celle avec laquelle tu frappe ne sert à rien (et les autres avant elle non plus).

    Fin de l'exemple, retour à ta situation.
    Ici c'est exactement pareil, le choix de ton personnage n'a pas d'intérêt sur le long terme.
    Il en a en revanche pendant le tour de jeu mais uniquement celui-ci. Une fois le tour fini on se fiche de se souvenir de quelles armées il a joué puisqu'il peut rejouer n'importe laquelle.

    Inutile donc ici de vouloir stocker en base de données le choix du joueur.

    En revanche il faut le stocker quelque part pendant le tour de jeu pour pouvoir l'empêcher de choisir la même armée deux fois.
    Non, ca n'a rien a voir avec ce type trop connu de jeu, je comprend qu'il faille du POO.



    Mon jeu:
    Cela representent des armées, placées sur une carte,
    positionnées historiquement, et qu'il faut deplacer sur la carte a l'aide du formulaire, ( c'est fait, sauf le controle total sur le deplacement),

    Le joueur pourra utiliser a sa guise toutes ls armées ou une partie de la liste d'armée de son camps, ( la liste d'armée restant fixe tant qu'il ne perd pas trop d'unité dans son armée),

    A chaque rencontre avec l'enemie, avec une ou des armées de l'autre camps, une bataille se creera, ( tout est manuel dans cette partie, mais il faudra que je l'automatise).
    Bref c'est un jeu sur la strategie.

    Et si vous preferez un jeu ( gratuit) sur la tactique voici un petit aperçu:
    http://tpgames.free.fr/phpBB2/viewtopic.php?f=16&t=849


    On recree toutes les batailles sur une base assez historique, c'est un jeu gratuit.
    Si vous voulez vous enregistrer sur le forum, dites me le, j'arrangerais ça, la capcha est a un niveau difficile a lire, j'ai du le faire a cause de pas mal de spameurs.


    Pour en revenir a mon jeu, ce que je cherche a faire c'est de creer une campagne de type "operationnelle".

  18. #38
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    @Fahelis
    L'enregistrement du "tour de jeu" dans un fichier (ou en BdD) est utile pour les AUTRES joueurs, car ils n'ont pas accès aux variables de SESSION des autres (ce qui est normal) !
    Je suis d'accord que certaines informations d'un tour de jeu sont nécessaires, mais l'historique de sélection des armées, je ne vois pas bien l'intérêt.
    Ce qui importe aux autres joueurs c'est la position finale de chaque armée (qu'elles aient bougé ou non d'ailleurs). Enfin après il est possible que je ne pige pas totalement le jeu
    Sinon je suis d'accord avec tout le reste, c'est ce que j'essayais d'expliquer avec des mots, toi tu l'explique avec du code

    Si tu arrives à mieux te faire comprendre que moi alors peut-être parviendras tu à l'aider.
    Moi j'ai l'impression de parler chinois (mais c'est peut-être le cas, parfois c'est clair dans ma tête mais pas trop à la sortie ) et du coup de tourner en rond.


    Sinon au passage Patr je n'ai jamais dis que ton jeu était un jeu de rôle, je te donnais juste un exemple que je trouvais parlant pour exprimer ce que je voulais dire.
    Apparemment c'est un échec
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  19. #39
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Fahelis Voir le message
    Je suis d'accord que certaines informations d'un tour de jeu sont nécessaires, mais l'historique de sélection des armées, je ne vois pas bien l'intérêt.
    Ce qui importe aux autres joueurs c'est la position finale de chaque armée (qu'elles aient bougé ou non d'ailleurs). Enfin après il est possible que je ne pige pas totalement le jeu
    Sinon je suis d'accord avec tout le reste, c'est ce que j'essayais d'expliquer avec des mots, toi tu l'explique avec du code

    Si tu arrives à mieux te faire comprendre que moi alors peut-être parviendras tu à l'aider.
    Moi j'ai l'impression de parler chinois (mais c'est peut-être le cas, parfois c'est clair dans ma tête mais pas trop à la sortie ) et du coup de tourner en rond.


    Sinon au passage Patr je n'ai jamais dis que ton jeu était un jeu de rôle, je te donnais juste un exemple que je trouvais parlant pour exprimer ce que je voulais dire.
    Apparemment c'est un échec
    C'est a dire que d'habitude ce sont ces type de jeu, j'ai repondu en lisant trop rapidement ta reponse.

  20. #40
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    A Jreaux62
    Je ne comprend pas cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       // on l'ajoute
       $_SESSION['MesArmees'][] = $armee;
    Pourquoi ces [] avant = $armee; ???

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] .bat pour éliminer des doublons dans 2 fichiers
    Par Nono Sto dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 04/05/2014, 06h42
  2. Supprimer des doublons dans un fichier
    Par lawrenz23 dans le forum C++
    Réponses: 6
    Dernier message: 27/10/2013, 16h27
  3. Eliminer des doublons dans un fichier
    Par fennec62 dans le forum Général Python
    Réponses: 13
    Dernier message: 11/01/2009, 12h40
  4. Rechercher des doublons dans un fichier de type csv
    Par phoenixatareva dans le forum C++
    Réponses: 6
    Dernier message: 12/08/2008, 21h02
  5. Prbleme de liaison avec des doublons dans le fichier lié.
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/10/2005, 12h03

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