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 :

Erreur de logique


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut Erreur de logique
    Bonjour

    Dans le code ci dessous je fais une erreur de logique pour laquelle je n'ai pas de solution.

    J'affiche des positions dans google maps.

    Je pars du code proposé par google

    https://developers.google.com/maps/d...ascript/?hl=fr

    en ligne 67 je rentre la position avec la variable $decimal

    cette variable est saisie plus bas (ligne 77) soit en valeur decimal (ligne 78) soit en valeur degré minute (ligne 79)

    dans le dernier cas je dois faire des extractions et calculs pour les retransformer en valeur decimal; le résultat est dans la variable $decideg en ligne 103

    les calculs se font bien mais je n'arrive pas à passer la valeur de la variable $decideg en variable $decimal qui soit lue à la ligne 42

    en début de page dans le head je fais un test pour donner à la variable $decimal utilisée par maps la valeur soit saisie (decimal), soit calculée (degre)

    Seule la variable issue de l'input htmlspecialchars($_POST['degre']); est passée dans la variable $decimal et la carte s'affiche; la variable $decideg n'est pas passée et la carte ne s'affiche pas

    Il y a une erreur de logique.

    je crois la comprendre mais je n'arrive pas à la résoudre

    tout d'abord la variable issue du formulaire est bien prise en compte dans le head, mais pas la variable issue d'un calcul qui ne peut remonter en début de page.

    Je ne connais pas assez le php mais je pense que cela a une incidence

    Maintenant, comment le résoudre ? le code de google est dans le head et je ne peux le mettre dans le body apparemment; comment faire remonter une varibale du body dans le head ?

    ou bien est autre chose ?

    le code ci joint marche sans besoin d'environnement


    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
     
     
        <head>
    	Position de l'avurnavs
    <?php
     
    //faire un if pour savoir si decimal ou degré
    if (htmlspecialchars($_POST['position'] <> "")){
    $decimal=htmlspecialchars($_POST['position']);
     
    echo $decimal;
    }
    ?>
    <?php
    if ($decideg <> ""){
    $decimal= $decideg;
     
    echo $decimal;
    }
    ?>
            <title>Voir une position dans Maps</title>
     
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
            <!-- Elément Google Maps indiquant que la carte doit être affiché en plein écran et
     
            qu'elle ne peut pas être redimensionnée par l'utilisateur -->
     
            <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
     
            <!-- Inclusion de l'API Google MAPS -->
     
            <!-- Le paramètre "sensor" indique si cette application utilise détecteur pour déterminer la position de l'utilisateur -->
     
            <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
     
            <script type="text/javascript">
     
                function initialiser() {
     
                    var latlng = new google.maps.LatLng(<?php echo $decimal?>);
     
                    //objet contenant des propriétés avec des identificateurs prédéfinis dans Google Maps permettant
     
                    //de définir des options d'affichage de notre carte
     
                    var options = {
     
                        center: latlng,
     
                        zoom: 9,
     
                        mapTypeId: google.maps.MapTypeId.ROADMAP
     
                    };
     
     
     
                    //constructeur de la carte qui prend en paramêtre le conteneur HTML
     
                    //dans lequel la carte doit s'afficher et les options
     
                    var carte = new google.maps.Map(document.getElementById("carte"), options);
        var marqueur = new google.maps.Marker({
     
            position: new google.maps.LatLng (<?php echo $decimal?>),
     
            map: carte
     
        });
                }
     
            </script>
     
        </head>
    <form action="" method="post">
     <p>Copier ici la position en valeur décimal: <input type="text" name="position" /></p>
     <p>Copier ici la position en degrés/minutes (avurnavs): <input type="text" name="degre" /></p>
     <p><input type="submit" value="OK"></p>
    </form>
    <?php echo htmlspecialchars($_POST['position']); 
    htmlspecialchars($_POST['degre']);
    echo $row=htmlspecialchars($_POST['degre']);
    $deglat = substr($row, 0,2);  
    $minlat = substr($row, 3,6);
    //echo (str_replace(",","",$minlat));
    //echo $var = number_format($minlat, 2, '.', '');
    //echo "seclat". $seclat = substr($row['latitude'], 6,3);
    //echo "minseclat".$minseclat =(($minlat/60)+($seclat/3600));
    //echo "minlat60".$minlat60=($var/60);
    $calculat=floatval(str_replace(',','.',$minlat))/60;
    //echo"en dur". $dur=(17657/60);
    $decilat = $deglat+$calculat;
     
    $deglong = substr($row, 11,3);  
    $minlong = substr($row, 14,6);
    //echo (str_replace(",",".",$minlong));
    //echo "seclong". $seclong = substr($row['longitude'], 7,3);
    //echo "minseclong".$minseclong =(($minlong/60)+($seclong/3600));
    $calculong=floatval(str_replace(',','.',$minlong))/60;
    $decilong = $deglong+$calculong;
    echo $decideg = $decilat.",".$decilong; 
     
    ?>
        <body onload="initialiser()">
     
            <div id="carte" style="width:100%; height:100%"></div>
        <script async defer
        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyA0cHoi9L65nczye5FaPOBr_hb4Jtpc3Cw&callback=initMap">
        </script>
        </body>
     
    </html>
    Merci de votre aide et désolé pour un code aussi long

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    qu'est ce que vous voulez dire par "la variable $decideg n'est pas passée" ?

  3. #3
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Bonsoir Mathieu et merci

    La variable $decideg calculée en ligne 103 ne se retrouve pas dans la variable $decimal de la ligne 17 quand je fais $decimal = $decideg

    je comprends bien qu'il y a peut être un problème de demander à ce qu'une variable en fin de document puisse mettre à jour une variable en début de document, mais le pb c'est que presque tout le code est dans le header et que le formulaire est en fin de document.

    Apparemment cela ne pose pas de pb pour la variable issue directement lors de la saisie du formulaire mais cela en pose un avec la variable calculée.

    J'ai donc imaginé de créer un "faux" formulaire avec un type=hidden pour essayer de passer la variable calculée et voir si cela pouvait fonctionner mais sans succès.

    C'est pourquoi je pense qu'il y a un pb de structure et de logique

  4. #4
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    J'ai rajouté ce bout de code en fin de page qui est un formulaire de type hidden

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ?>
    <form name="deci" action="" method="GET">
    <input type="hidden" name="id1" value="<?php echo $decideg; ?>">
    <input type="submit" name="bouton" value="envoyer" />
    </form>
    <?php echo $_GET['id1']; 
     
     
    ?>
    Cela fonctionne mais en revanche je dois appuyer deux fois pour afficher la carte

    sur le bouton Ok puis sur le boutons envoyé

    cela n'est pas élégant ni acceptable

    En revanche effectivement avec un formulaire je peux mettre à jour une variable situé en début de page

    Je progresse ... maintenant il faut que je trouve comment supprimer le bouton "envoyer"

  5. #5
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Je verrais demain car il se fait tard

    en effet il suffit de faire deux formulaires en séparant les saisies

  6. #6
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Ce n'est pas élégant ce que j'ai trouvé en faisant deux formulaires

    Si quelqu'un peut me montrer comment faire pour remonter la valeur d'une variable du body pour l'utiliser dans le head cela me serait bien utile

    Merci pour l'aide

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les variables PHP ne "remontent" pas.
    La construction de ton code PHP ne devrait pas être dépendante des parties HTML.
    Ton calcul de la ligne 103 doit être déplacé en début de code si tu as besoin du résultat à la ligne 17. S'il génère des affichages, met les dans une variable plutôt que des les afficher directement.

  8. #8
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup Sabotage

    Je suis rentré tard et je m'y remet

    Merci de ton aide et bonne soirée

Discussions similaires

  1. Erreur de logique sur lien OR
    Par dubitoph dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/02/2017, 20h31
  2. [Débutant] Mauvaise approche vis à vis d'une classe (erreur de logique)
    Par BenBout62 dans le forum C#
    Réponses: 16
    Dernier message: 31/07/2016, 16h44
  3. Erreur de logique avec do while switch
    Par artemis93 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 26/06/2011, 22h54
  4. erreur de logique
    Par 1debutante dans le forum C
    Réponses: 6
    Dernier message: 17/01/2007, 01h06
  5. Erreur de logique introuvée
    Par gorgonite dans le forum Prolog
    Réponses: 5
    Dernier message: 28/09/2006, 16h20

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