Back to top

Autore Topic: Chronoforms > Autocompleter > Json - Problema definizione variabile  (Letto 1685 volte)

Offline andreasuriani

  • Appassionato
  • ***
  • Post: 470
  • Sesso: Maschio
  • Rag,Gran ladr.farabut, figlio di put . Direttore
    • Mostra profilo
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:
Codice: [Seleziona]

<?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!
« Ultima modifica: 13 Set 2017, 16:45:36 da andreasuriani »
"Ragionere che fa, batti?! - Ma, mi dà del tu?? - No No dicevo, Batti Lei? - Ah Congiuntivo!"

Offline Ahmed Salvini

  • Appassionato
  • ***
  • Post: 337
    • Mostra profilo
$cod_azie = $_POST['azienda']; non funziona!
----------------------------------------------------

grazie a dio! non si prendono variabili dall'esterno

Offline andreasuriani

  • Appassionato
  • ***
  • Post: 470
  • Sesso: Maschio
  • Rag,Gran ladr.farabut, figlio di put . Direttore
    • Mostra profilo
Una risposta utile come un paio di mutandoni della nonna in un film *** :)


Soluzione..? :)
"Ragionere che fa, batti?! - Ma, mi dà del tu?? - No No dicevo, Batti Lei? - Ah Congiuntivo!"

Offline Ahmed Salvini

  • Appassionato
  • ***
  • Post: 337
    • Mostra profilo
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

Offline andreasuriani

  • Appassionato
  • ***
  • Post: 470
  • Sesso: Maschio
  • Rag,Gran ladr.farabut, figlio di put . Direttore
    • Mostra profilo
Ho provato ma non funziona....
Codice: [Seleziona]
$cod_azie =$form->azienda;
"Ragionere che fa, batti?! - Ma, mi dà del tu?? - No No dicevo, Batti Lei? - Ah Congiuntivo!"

Offline Ahmed Salvini

  • Appassionato
  • ***
  • Post: 337
    • Mostra profilo
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
« Ultima modifica: 16 Set 2017, 15:12:15 da Ahmed Salvini »

Offline Alex21

  • Appassionato
  • ***
  • Post: 645
    • Mostra profilo
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):
Codice: [Seleziona]
"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!


Offline Ahmed Salvini

  • Appassionato
  • ***
  • Post: 337
    • Mostra profilo
non c'è bisogno di scomodare le variabili esterne, se così fosse qualcosa è sviluppato male in joomla o nell'estensione

Offline andreasuriani

  • Appassionato
  • ***
  • Post: 470
  • Sesso: Maschio
  • Rag,Gran ladr.farabut, figlio di put . Direttore
    • Mostra profilo

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):
Codice: [Seleziona]
"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!
"Ragionere che fa, batti?! - Ma, mi dà del tu?? - No No dicevo, Batti Lei? - Ah Congiuntivo!"

Offline Alex21

  • Appassionato
  • ***
  • Post: 645
    • Mostra profilo
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!
Codice: [Seleziona]
$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!


 



Web Design Bolzano Kreatif