Joomla.it Forum

Joomla! 3 => Joomla! 3 => : andreasuriani 13 Sep 2017, 16:42:33

: Chronoforms > Autocompleter > Json - Problema definizione variabile
: andreasuriani 13 Sep 2017, 16:42:33
Buon pomeriggio a tutti,
ho questo problema su CF5:
Ho creato un form A dove vado a selezionare una serie di cose tra cui un azienda tramite dropdown per poi passare in POST i dati al form B.
Nel form B ho la necessità di mettere un autocompleter: fin qua nessun problema.
Quando vado a scrivere il Jquery per l'autocompleter, non riesco a fargli definire una variabile: mi spiego meglio.
Questo è il codice funzionante:
:

<?php
$db 
JFactory::getDbo();
$db->setQuery("SELECT  * FROM db WHERE cod_azie = 406");
$results $db->loadObjectList();
foreach(
$results as $result ){
   if(!empty(
$form->data['tag']) AND stripos($result->nominativo$form->data['tag']) === false){
      continue;
   }
   
$json[] = array('id' => $result->id'text' => $result->nominativo);
}
echo 
json_encode($json);



Il problema sorge quando il dato cod_azie lo devo dichiarare a seconda del dato che arriva in POST.
L'array che ricevo è il seguente:
Array ( [option] => com_chronoforms5 [chronoform] => protocollo_corrispondenza_post [azienda] => 406 [tipo_posta] => Entrata [tipo_doc] => Lavoratore [button5] => Submit [protocollo_corrispondenza_lavoratore] => )

Se io dichiaro $cod_azie = 406; e modifico la select in ("SELECT  * FROM db WHERE cod_azie = {$cod_azie}") funziona.
Ma se dichiaro $cod_azie = $_POST['azienda']; non funziona! Eppure se faccio un echo di $_POST['azienda']; mi restituisce 406!!!

Sto impazzendo!
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: Ahmed Salvini 13 Sep 2017, 19:35:17
$cod_azie = $_POST['azienda']; non funziona!
----------------------------------------------------

grazie a dio! non si prendono variabili dall'esterno
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: andreasuriani 14 Sep 2017, 12:12:21
Una risposta utile come un paio di mutandoni della nonna in un film *** :)


Soluzione..? :)
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: Ahmed Salvini 14 Sep 2017, 15:48:52
When the On Submit action starts exactly the same thing happens. The contents of the $_POST array - the form results - are added to the $form->data array and are available and/or used in all of the succeeding actions. Again you can use Custom Code actions and some others to manipulate or add values to the object.

https://www.chronoengine.com/faqs/63-cfv4/cfv4-working-with-form-data/2594-how-can-i-use-the-form-data-with-php


The contents of the $_POST array - the form results - are added ....
-----------------------------------------------------
perchè spero applichino dei filtri e un minimo di casting prima di usare le var
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: andreasuriani 15 Sep 2017, 10:10:43
Ho provato ma non funziona....
:
$cod_azie =$form->azienda;
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: Ahmed Salvini 16 Sep 2017, 15:10:27
se stampi a video $form vedi cosa contiene e come lo contiene
Se dice che il valore lo infila in un array sarà un array che devi estrarre
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: Alex21 17 Sep 2017, 19:48:50
Se io dichiaro $cod_azie = 406; e modifico la select in ("SELECT  * FROM db WHERE cod_azie = {$cod_azie}") funziona.
Ma se dichiaro $cod_azie = $_POST['azienda']; non funziona! Eppure se faccio un echo di $_POST['azienda']; mi restituisce 406!!!
Le query del db possono essere delle vere rompiscatole, ne so qualcosa  ???
Questa crea dei problemi perché (probabilmente):
:
"SELECT  * FROM db WHERE cod_azie = 406"    406 è un numero e funziona
$cod_azie = $_POST['azienda'];             sempre 406  ma stavolta è una stringa.
Io proverei con    "SELECT  * FROM `db` WHERE  `cod_azie` = '$cod_azie'";   dove db è la tabella interessata.
  phpMyAdmin mette sempre i caratteri  ` e quindi ce li metto pure io. ;)

Per quanto riguarda la lettura diretta di $_POST sarebbe effettivamente meglio mettere un filtro, tipo
$var = filter_var($_POST['input'], FILTER_SANITIZE_STRING);

Ciao!

: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: Ahmed Salvini 17 Sep 2017, 21:46:40
non c'è bisogno di scomodare le variabili esterne, se così fosse qualcosa è sviluppato male in joomla o nell'estensione
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: andreasuriani 19 Sep 2017, 10:22:03

Ciao Alex, e grazie per l'aiuto.


Ho già provato a mettere `cod_azie` = '$cod_azie' ma niente da fare.
Premesso che non sono un esperto programmatore (della serie, mostrami come si fa e mi impegno a capire e a faro :P ) ma mi sono dovuto ingegnare per fare alcune cose.

in  TUTTI i miei form utlizzando la stringa $_POST ha sempre funzionato. Infatti il debug del form cita:
Array ( [option] => com_chronoforms5 [chronoform] => protocollo_corrispondenza_post [azienda] => 406 [tipo_posta] => Uscita [tipo_doc] => Lavoratore [button5] => Submit [protocollo_corrispondenza_lavoratore] => )
Ora, non ho idea di quello che significa ciò che hai scritto te, ovvero:
$var = filter_var($_POST['input'], FILTER_SANITIZE_STRING);

Se me lo spieghi provo a comprendere :P

Grazie Mille!!

And

Le query del db possono essere delle vere rompiscatole, ne so qualcosa  ???
Questa crea dei problemi perché (probabilmente):
:
"SELECT  * FROM db WHERE cod_azie = 406"    406 è un numero e funziona
$cod_azie = $_POST['azienda'];             sempre 406  ma stavolta è una stringa.
Io proverei con    "SELECT  * FROM `db` WHERE  `cod_azie` = '$cod_azie'";   dove db è la tabella interessata.
  phpMyAdmin mette sempre i caratteri  ` e quindi ce li metto pure io. ;)

Per quanto riguarda la lettura diretta di $_POST sarebbe effettivamente meglio mettere un filtro, tipo
$var = filter_var($_POST['input'], FILTER_SANITIZE_STRING);

Ciao!
: Re:Chronoforms > Autocompleter > Json - Problema definizione variabile
: Alex21 19 Sep 2017, 13:52:18
Ho già provato a mettere `cod_azie` = '$cod_azie' ma niente da fare.

Ora, non ho idea di quello che significa ciò che hai scritto te, ovvero:
$var = filter_var($_POST['input'], FILTER_SANITIZE_STRING);

Allora è proprio una query di quelle fastidiose!
:
$var = filter_var($_POST['input'], FILTER_SANITIZE_STRING);   

nel tuo caso significa:


$cod_azie = filter_var($_POST['azienda'], FILTER_SANITIZE_STRING);
Se l'input contiene malware viene sterilizzato.

Per la query si può provare a rendere esplicito che si tratta di un numero con l'ulteriore assegnazione
$cod_azie = intval($cod_azie);
Se non funziona ancora si prova a comporre la query con sprintf(); (ricerca in rete per la sintassi giusta)
Oppure si ricorre ai metodi di joomla per comporre la query. Più laboriosi ma la stringa di query risultante è molto accurata.

E' opportuno seguire passo passo l'esecuzione del codice, in particolare esaminare  $results . Con var_dump($results); che è il sistema più immediato.
Ma anche vedere cosa è  db che dovrebbe essere una tabella di joomla.
Ciao!