Joomla.it Forum
Joomla! 3 => Joomla! 3 => : 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!
-
$cod_azie = $_POST['azienda']; non funziona!
----------------------------------------------------
grazie a dio! non si prendono variabili dall'esterno
-
Una risposta utile come un paio di mutandoni della nonna in un film *** :)
Soluzione..? :)
-
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
-
Ho provato ma non funziona....
$cod_azie =$form->azienda;
-
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
-
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!
-
non c'è bisogno di scomodare le variabili esterne, se così fosse qualcosa è sviluppato male in joomla o nell'estensione
-
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!
-
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!