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 à :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é.SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data" ;
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) } ?>
Partager