Back to top

Autore Topic: query UPDATE con Chronoform  (Letto 4947 volte)

Offline nofc_nofc

  • Appassionato
  • ***
  • Post: 255
    • Mostra profilo
query UPDATE con Chronoform
« il: 24 Nov 2013, 21:29:29 »
Salve a tutti :)

Ho creato un semplice form con Chronoform che ha una text box con il field name chiamato "yyy". In events ho creato un custom code dove ho inserito una query UPDATE. Come faccio a richiamare i valori?

Codice: [Seleziona]
<?php
 
$db 
JFactory::getDbo();

$yyy $_POST["yyy"];

$query $db->getQuery(true);
$query->update('#__tabella');
$query->set("maglia=$yyy");
$db->setQuery($query);
$db->query(); 
?>



Cosa sbaglio? :(
Ho provato anche con
Codice: [Seleziona]
$posted['yyy']

Offline giovi

  • Instancabile
  • ******
  • Post: 9835
  • Sesso: Maschio
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #1 il: 24 Nov 2013, 21:42:45 »
Se sei su joomla 2.5 prova con
Codice: [Seleziona]
$jinput = JFactory::getApplication()->input;
$yyy = $jinput->get('yyy');
 

Offline nofc_nofc

  • Appassionato
  • ***
  • Post: 255
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #2 il: 24 Nov 2013, 21:57:30 »
No, purtroppo non funziona :(

Offline nofc_nofc

  • Appassionato
  • ***
  • Post: 255
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #3 il: 25 Nov 2013, 15:56:36 »
Nessuno sa come poter risolvere il problema? :)

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #4 il: 25 Nov 2013, 16:10:09 »
e per fortuna che non funziona!
se no ti spianava tutta la tabella: manca la condizione di filtro, quindi tutti i campi sono impostati al valore indicato;

Codice: [Seleziona]
$query->set("maglia=$yyy");
funziona solo se maglia è un campo di tipo numerico, se no genera un errore perché mancano gli apici attorno a $yyy. abilita il debug di joomla.

Codice: [Seleziona]
$yyy = $_POST["yyy"];
$query->set("maglia=$yyy");
server bucato per sqli in cinque minuti  >:(

fidati: o ti fermi e cominci a studiare un po'di sql e di php o corri il rischio di fare dei grossi danni.  :( :(

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline nofc_nofc

  • Appassionato
  • ***
  • Post: 255
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #5 il: 26 Nov 2013, 15:41:02 »
In Joomla, e in Chronoform in particolare, il procedimento è un po' differente, e se la query INSERT o SELECT viene scritta in automatico, quella UPDATE no. E siccome le guide che si trovano in giro non sono esaustive circa il richiamo dei _POST nell'UPDATE, chiedevo informazioni. Tutto qui  :)
Poi appena varò tempo approfondirò  ;)

Il codice corretto dovrebbe essere questo:
Codice: [Seleziona]
<?php 
$db 
JFactory::getDbo();
$campo1 JRequest::getString('campo1''''post');
$campo2 JRequest::getInt('campo2''''post');
$campo3 JRequest::getInt('campo3''''post');

$query $db->getQuery(true);
$query->update('#__tabella');
$query->set("campo1=$campo1, campo2=$campo2, campo3=$campo3");
$db->setQuery($query);
$db->query(); 
echo 
"campo1: " $campo1 " - campo2: " $campo2 " - campo3: " $campo3;
?>
« Ultima modifica: 26 Nov 2013, 16:20:12 da nofc_nofc »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #6 il: 26 Nov 2013, 16:06:40 »
tanto per spiegare perché sono così categorico:

Codice: [Seleziona]
    $errori=array();
    if (!empty($errori)){
        $messaggio = "Errore";
    }else{   
        // query
    }   

non ha senso. empty($errori) sarà sempre true, dato che $errori è definito la riga sopra come un array vuoto!
anche la var $messaggio non è usata nel resto del codice.


Codice: [Seleziona]
    $variabile = $_POST['variabile'];   //ripresa dal form
    $query = "UPDATE tabella SET campo = '$variabile' WHERE condizion1";
    $risultato = mysql_query($query, $conn);
prendi un dato proveniente da una form, quindi untrusted per definizione, e lo inserisci così come è in una query? già detto sopra: il primo che prova un attacco sqli buca il sito al primo colpo.


Codice: [Seleziona]
   if (mysql_affected_rows()){
sicuramente meglio di ==1, a meno che tu non intendessi: avevo dimenticato il WHERE.

mi spiace, ma non è questione di Joomla o Chronoform, è proprio questione di padronanza del linguaggio di programmazione.

questa cosa sta diventando pericolosa per te, ed è problema tuo, e per gli altri, come ti ho detto nell'altro topic, e questo è anche problema mio.
per questo ho smesso di rispondere fornendo il codice corretto.  :(

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline nofc_nofc

  • Appassionato
  • ***
  • Post: 255
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #7 il: 26 Nov 2013, 16:36:05 »
Hai ragione, è che per togliere i dati personali avevo tagliato un po' troppo  :P
Il codice era questo:

Codice: [Seleziona]
<?php  if (isset($_POST["aggiorna"]))
    {
        
$errori=array();
        
        if (!isset(
$_POST['yyy']) || empty($_POST['yyy']))
        {
$errori[]='Errore nel campo yyy';}
        
        if (!empty(
$errori))
        {
            
$messaggio "Errore";
        }
        else
        {    
            
$campo1 $_POST['campo1'];
            
              
$query "UPDATE tabella SET campo1 = '$campo1' WHERE condizione1";
        
            
$risultato mysql_query($query$conn);
            
            if (
mysql_affected_rows() == 1)
            {
                
//Update andato a buon fine
                
echo "ok";
                exit;
            }
            else
            {
                
//Update non riuscito
                
$messaggio "Inserimento non riuscito[br /]" mysql_error();
            }
        }    
    }            
?>

<?php 
                
if (!empty($messaggio))
                {            
                    echo 
"<p>" $messaggio "</p>";
                    
                    if (!empty(
$errori))
                    {
                        foreach(
$errori as $campoerrore)
                        {
                            echo 
"* " $campoerrore "[br /]" "[br /]";
                        }
                    }
                }
?>

Probabilmente ora torna un po' di più  ;)
Comunque nel post precedente ho modificato il codice, che funziona se lo inserisco in Events->Custom Code; invece se lo inserisco in Events->Confirmation Page->Custom Code il valore _POST (splittato quindi in due passaggi) perde il suo contenuto. Ho provato col multipage ma senza successo.
Tuttavia capisco la tua preoccupazione e la condivido, l'unica rassicurazione è che il sito che sto facendo è un sito di calcetto, quindi al massimo un malintenzionato può modificare la classifica cannonieri  :P
« Ultima modifica: 26 Nov 2013, 16:39:06 da nofc_nofc »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • ********
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:query UPDATE con Chronoform
« Risposta #8 il: 26 Nov 2013, 17:19:23 »
quindi al massimo un malintenzionato può modificare la classifica cannonieri

no, ti buca il sito, ci installa uno spam engine, inizia a rompere le palle al mondo, fa bannare l'ip del server e chiunque altro sia su quel server, che immagino non sia dedicato a te con ip in uso esclusivo, non potrà più spedire una sola email per giorni. oppure installa una form per fare phishing e ti trovi polizia postale e guardia di finanza a bussare alla tua porta.

quindi almeno questo:
Codice: [Seleziona]
$campo1 = mysql_real_escape_string($_POST['campo1']);
$query = "UPDATE tabella SET campo1 = '$campo1' WHERE condizione1";

ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

 



Web Design Bolzano Kreatif