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 :

Création dynamique / temporaire de colonne [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Création dynamique / temporaire de colonne
    Bonjour,

    Je suis actuellement en train de développer une application en html / php / js et j'ai un souci avec le php / sql. Sachant que ma base est sous pgadmin et que je suis pour le moment en local.

    Pour le moment, je propose à mon utilisateur de sélectionner une variable dans un menu déroulant, que je récupère pour trier ma base de donnée que je le renvoie après (sous forme de polygones dessinés sur une carte). Jusque la tout va bien.

    Sauf que j'aimerai que l'utilisateur puisse non pas choisir un champ mais le créer lui-même. Je m'explique. Ces champs sont des "scores" que j'ai créé en amont sous R et qui sont dans ma BDD. Pour que l'utilisateur puisse créer son propre indicateur/ score, je lui donne à disposition 5 menus déroulants (contenant les mêmes indicateurs, présent dans ma BDD) et 5 zones de chiffre pour qu'il choisisse les indicateurs qu'il veut utiliser (en les pondérant via les zones de chiffre).
    Une fois qu'il a fait ses choix, il faudrait que je récupère ces info, que j'ajoute une colonne à ma base de donnée, puis que je tri par cette nouvelle colonne et enfin que je supprime celle-ci.

    Pour le moment, je me heurte à :
    SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data" ;
    donc ma connexion ne passe pas, très probablement au niveau de la création / suppression de colonne, voir même avant. Sachant que tout fonctionne correctement si l'utilisateur ne choisi pas l'option "créer son propre indicateur" et qu'il utilise ce que je lui ai pre-calculé.

    J'espère que c'est le plus clair possible, voit-ci le code que j'ai pour le moment.

    Je m'excuse d'avance, je ne suis ni développer, ni codeur, ni quoi que ce soit, je suis géographe et je me retrouve à faire du web, même si c'est drôle à faire je galère pas mal.

    Je vous remercie d'avance !!!!!

    Un des 5 menus.
    Code HTML : 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
                          <p>Indicateur 1 :</p>
                          <SELECT id="liste1" size="1" >
                            <optgroup label="Indicateurs">
                              <OPTION value="" selected style="display:none;"> - Sélectionnez une valeur- </option>
                              <OPTION value="ind_c">Nombre d'habitant</option>
                              <OPTION value="nborne">Nombre de borne total</option>
                              <OPTION value="nbnormale">Nombre de borne normale</option>
                              <OPTION value="nbsemirapi">Nombre de borne semi-rapide</option>
                              <OPTION value="nbrapide">Nombre de borne rapide</option>
                              <OPTION value="nbemployer">Nombre d'employers</option>
                              <OPTION value="scr4054">Population 40-54ans</option>
                              <OPTION value="men_cll">Logement collectif</option>
                              <OPTION value="popact">Population active</option>
                              <OPTION value="ind_snv">Somme des niveaux de vie winsorisés </option>
                              <OPTION value="nbnormale">Autre (W.I.P.)</option>
                            </optgroup>
                          </SELECT>
                          <input type="number" min="1" max="10" id="pond1">

    Récupération des valeurs et requête Ajax

    Code JavaScript : 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
    // Choix + choix perso
      if (document.getElementById("ponderator").selected == true) {
        if (liste1.value) {
          var crit1 = liste1.value + ' * ' + pond1.value + ' as ' + liste1.value;
        } else {
          crit1 ="";
        };
        if (liste2.value) {
          var crit2 = ", " + liste2.value + ' * ' + pond2.value + ' as ' + liste2.value;
        } else {
          crit2 ="";
        };
        if (liste3.value) {
          var crit3 = ", " + liste3.value + ' * ' + pond3.value + ' as ' + liste3.value;
        } else {
          crit3 ="";
        };
        if (liste4.value) {
          var crit4 =  ", " + liste4.value + ' * ' + pond4.value + ' as ' + liste4.value;
        } else {
          crit4 ="";
        };
        if (liste5.value) {
          var crit5 = ", " + liste5.value + ' * ' + pond5.value + ' as ' + liste5.value;
        } else {
          crit5 ="";
        };
        console.log(crit1);
        var choixperso = crit1 + crit2 + crit3 + crit4 + crit5;
        console.log(choixperso);
      } else {
        var liste, choix;
        liste = document.getElementById("choix");
        choix = liste.options[liste.selectedIndex].value;
        console.log(choix);
      }
     
     
     
    // Ajax pour le SQL
      var data = 'bbox='+map.getBounds().toBBoxString();
      $.ajax({
        url: `ajax/ajaxiterationCarreaux.php?`+`varnbborne`+"&"+`choix=${choix}`+"&"+`choixperso=${choixperso}`,
        dataType :'json',
        data : data,
        error: function(xhr, textStatus, error){
        console.log(xhr.statusText);
        console.log(textStatus);
        console.log(error);
        },
        success: recupCarreaux2
      });
    };

    Code php pour la requête et le traitement du sql

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    <?php
    $link = pg_connect("host=localhost port=5432 dbname=postgres user=postgres password=localhost");
     
    if (!$link) {
      echo('Erreur de connexion');
    }
     
    // Variables
    //$variables = "id, typeborne, libgeo, ind_c, nbborne, nbnormale, nbsemirapi, nbrapide, point_x, point_y, unx, uny, deuxy, deuxx, troisx, troisy, quatrex, quatrey, idinspire, ind, men, men_pav, men_5nd, men_prp, ind_snv, men_cll, men_mas, log_soc, i_11_17, i_18_24, i_25_39, i_40_54, i_55_64, scorepo, scr4054, scrmncl, scrppct, scrndsn, scorett";
    $variables = " id , idinspire, typeborne, libgeo, nbnormale, nbsemirapi, nbrapide, ind_c, nbborne, ind, men, men_pav, men_5nd, men_prp, ind_snv, men_cll, men_mas, log_soc, i_11_17, i_18_24, i_25_39, i_40_54, i_55_64, popact, scorepo ,scr4054, scrmncl, scrppct, scrndsn, scorett, nbemployer, nbempbig,  nbempmoy, scorebrapide, scoreblente, scorebsemi, point_x ,point_y, unx, uny, deuxx, deuxy,troisx,troisy,quatrex,quatrey";
     
     
    if (isset($_GET['bbox'])) {
        $bbox=$_GET['bbox'];
    } else {
        // invalid request
        $ajxres=array();
        $ajxres['resp']=4;
        $ajxres['dberror']=0;
        $ajxres['msg']='missing bounding box';
        sendajax($ajxres);
    }
     
    if (isset($_GET['nb_borne'])) {
    	$borne=(int)$_GET['nb_borne'];
    }
     
    // SI on a un choix
    if (isset($_GET['choix'])) {
    	$choix=$_GET['choix'];
      $choix = " ORDER BY $choix DESC ";
    }
     
    // SI ce choix est choix perso
    // Pondération
    // ex de choixperso ind_c * 1/5 as ind_c, ...
    $choixcol = [];
    if (isset($_GET['choixperso'])) {
    	$choixperso=$_GET['choixperso'];
     
      // Requête SQL
      $req1 = "ALTER TABLE centroidesetcotes_finale ADD scoreperso AS ($choixperso) PERSISTED";
      pg_query($link, $req1)
     
      $choixperso = str_split(',', $choixperso);
      $variables = str_split(',', $variables);
      foreach ($variables as $value1) {
        foreach ($choixperso as $value2) {
          $indicateur = strtok($value2, '*')
          if ($value1 == $indicateur) {
            array_push($choixcol, $value2);
            $value1 = $value2;
          }
        }
      }
      $choixperso = implode(',', $choixperso);
      $variables = implode(',', $variables);
     
    // SI pas choixperso
    } else {
      if (empty($_GET['choix'])) {
        $choix = " ORDER BY ind_c DESC ";
      }
    }
     
     
     
    $irves ="";
     
    // split the bbox into it's parts
    list($left,$bottom,$right,$top)=explode(",",$bbox);
     
    $req = "SELECT $variables
            FROM centroidesetcotes_finale
            where $irves unx >= $left and troisx <= $right and uny <= $top and troisy >= $bottom
            $choix";
     
     
     
    $propri=[];
     
    if (isset($_GET['choixperso'])) {
      if ($result = pg_query($link, $req)) {
        while ($ligne = pg_fetch_assoc($result)) {
     
     
          $id = $ligne["id"];
          $idinspire = $ligne["idinspire"];
          $type = $ligne["typeborne"];
         ..........ETC..............
          $quatrex = $ligne["quatrex"];
          $quatrey = $ligne["quatrey"];
          $scorepo = $ligne["scoreperso"];
     
          $properties = ["id" => $id,
            "idinspire" => $idinspire,
            "ind_c"=> $ind_c,
            "libgeo" => $libgeo,
            .....ETC.........
            "scoreblente" => $scoreblente,
            "scorebsemi" => $scorebsemi,
            "scoreperso" => $scoreperso,
     
            'geometry'=>array( 'type' => 'Polygon', 'coordinates' => array([$unx, $uny],[$deuxx,$deuxy],[$troisx,$troisy],[$quatrex,$quatrey]))];
     
          array_push($propri, $properties);
     
        }
      } else{
        echo "Erreur de requete de base de données";
      }
    } else {
      if ($result = pg_query($link, $req)) {
        while ($ligne = pg_fetch_assoc($result)) {
     
     
          $id = $ligne["id"];
          $idinspire = $ligne["idinspire"];
          $type = $ligne["typeborne"];
         ............ETC...........
          $troisy = $ligne["troisy"];
          $quatrex = $ligne["quatrex"];
          $quatrey = $ligne["quatrey"];
     
     
          $properties = ["id" => $id,
            "idinspire" => $idinspire,
            "ind_c"=> $ind_c,
            "libgeo" => $libgeo,
        .................ETC
            "scorebrapide" => $scorebrapide,
            "scoreblente" => $scoreblente,
            "scorebsemi" => $scorebsemi,
     
            'geometry'=>array( 'type' => 'Polygon', 'coordinates' => array([$unx, $uny],[$deuxx,$deuxy],[$troisx,$troisy],[$quatrex,$quatrey]))];
     
          array_push($propri, $properties);
     
        }
      } else{
        echo "Erreur de requete de base de données";
      }
    }
     
     
      echo json_encode($propri, JSON_NUMERIC_CHECK);
     
    // SUPPRIMER la colonne
    if (isset($_GET['choixperso'])) {
      $req2 = "ALTER TABLE centroidesetcotes_finale DROP COLUMN scoreperso";
      pg_query($link, $req2)
    }
     
     
    ?>

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Suite du problème
    Bonjour,

    Suite à l’absence de réponse à ma question, je suppose qu'il manque des informations. Je suis donc présent pour vous donner plus d'info si nécessaire.

    Sinon je vais essayer de reformuler ma requête, on ne sait jamais.
    Le plus important ici est : ajouter une colonne à ma base de donnée PostegresSql. Et y ajouter des valeurs. Puis la supprimer.
    Pour ce faire, j'ai essayé ça aujourd'hui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
      $req1 = "ALTER TABLE centroidesetcotes_finale ADD  scoreperso";
      $req2 = "UPDATE centroidesetcotes_finale SET scoreperso=choixperso";
     
      pg_query($link, $req1)
      $result1 = pg_query($link, $req2)
    Donc je met à jour ma table avec une nouvelle colonne, puis j'essaye de la remplir avec une variable, choixperso, qui est un simple calcule. Sauf que, je ne suis pas sur de bien comprendre comment fonctionne le système de requête.
    Est-ce que ici mon " pg_query($link, $req1) " me créer bien une colonne et est-ce que " $result1 = pg_query($link, $req2) " y ajoute bien de l'info ? (pour le deuxième cas il y a un $result1 parce que je le réutilise après).

    Je reste connecté le plus souvent possible pour voir si quelqu'un a besoin de plus d'info ou si une réponse arrive

    Merci à vous !

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    poste le code complet de ton formulaire stp
    Et ne t'embraque surtout pas dans les ALTER TABLE à l'exécution.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/04/2017, 19h50
  2. Création dynamique colonne d'une grille
    Par Maglight dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/11/2005, 15h31
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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