Joomla.it Forum
Non solo Joomla... => Database => : pupi93 27 Feb 2013, 18:27:56
-
Salve ragazzi! Spero possiate darmi una mano!
E' da un po' che cerco di eseguire delle semplicissime query SQL, ma non funzionano!
La prima dovrebbe aggiornare una riga di una tabella del database, dopo aver preso come chiave WHERE un valore da un form!
Ecco il codice:
<?php
$database =& JFactory::getDBO();
$stato = JRequest::getVar('stat');
$codice = JRequest::getVar('cod');
$sql = "UPDATE avjos16_chronoforms_data_Gestione SET stato ='$stato' WHERE codice='$codice'";
$database->setQuery( $sql );
if (!$result = $database->query())
echo $database->stderr();
else
$database->query();
echo"$sql";
?>
[size=78%]cod_eli sarebbe il name dell'edit text del form.[/size]
[size=78%]Questa invece è la query per l'eliminazione di un record:[/size]
<?php
$database =& JFactory::getDBO();
$sql = "DELETE FROM avjos16_chronoforms_data_Gestione WHERE codice='".JRequest::getVar('cod_eli')."'";
$database->setQuery( $sql );
if (!$result = $database->query())
echo $database->stderr();
else
$database->query();
echo"$sql";
?>
[size=78%]Sapete dirmi dove sbaglio? Per me sono corrette! Ma non funzionano![/size]
[size=78%]Help![/size]
[size=78%]Grazie[/size]
-
Nessuno sa aiutarmi! :(
-
1) la sintassi della query è sbagliata ... ma non quella joomla... anche quella joomla ... i quotename....
2) se funzionasse ti bucherebbero il sito in 0 secondi
3) che ci fa quell'echo? ... visualizzi ciò che metti nella query non certo il risultato....
-
Si va be ovvio! la echo l'ho messa lì per vedere se c'erano errori nella query! Non la lascio lì! ;D Sarei un folle altrimenti!
Sai come posso creare una query funzionante e sicura per i due casi?
Grazie!
-
no, non hai capito ..non è l'echo che causa le vulnerabilità ma il mancato casting dei valori passati da un form o dalla get.
l'echo non serve a vedere i risultati te l'ho scritto.
Sai come posso creare una query funzionante e sicura per i due casi?
------------------------------------------------------------------------------------------------
Funzionante basta che guardi l'esatta sintassi
http://docs.joomla.org/Accessing_the_database_using_JDatabase/2.5
sicura basta che leggi quì
http://docs.joomla.org/Retrieving_and_Filtering_GET_and_POST_requests_with_JRequest::getVar
o così nella nuova plattform
http://docs.joomla.org/Retrieving_request_data_using_JInput
-
Ok grazie! Darò un occhiata! :)
-
Momentaneamente ho provato l'update con valori statici, senza essere presi dal form, ma non funge comunque
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$fields = array(
'profile_value=\'Updating custom message for user 1001.\'',
'ordering=2');
// Conditions for which records should be updated.
$conditions = array(
'user_id=42',
'profile_key=\'custom.message\'');
$query->update($db->stat('avjos16_chronoforms_data_Gestione'))->set('Riparazione effettuata')->where('1234567');
$db->setQuery($query);
try {
$result = $db->query(); // Use $db->execute() for Joomla 3.0.
} catch (Exception $e) {
// Catch the error.
}
Ritornando al discorso sicurezza, non andava bene perchè usavo il metodo get per l'acquisizione di variabili?
-
..ma dov'è che stai facendo queste query? ... in che file?
no, non hai capito ..non è l'echo che causa le vulnerabilità ma il mancato casting dei valori passati da un form o dalla get.
-
sto usando il plugin chronoforms. Al suo interno posso inserire del codice php! Non so di preciso in quale file andrà a scrivere!
Penso quindi che andrà a scrivere su appositi file! Quindi penso che siano giusti!
Volevo sapere in oltre cosa è il parametro $db->quoteName
cioè al posto di quoteName cosa devo scrivere?
Sto tentando tutti i modi possibili per fare queste maledette query >:(
Grazie per la disponibilità comunque :)
-
hai guardato nella sezione form dove si parla di chronoform?
-
No, ma credo sia una questione di codice PHP! In fondo chronoforms mette a disposizione un layout grafico dove scrivere il proprio codice, con l'aiuto della grafica.
-
1)da dove vengono? dalla get o dal post?
2) che entità sono? ... numeri, stringhe, booleani.....
-------------------------------------------------------------
$stato = JRequest::getVar('stat');
$codice = JRequest::getVar('cod');
se apri una cartella models e guardi nel file "plurale" trovi l'esempio classico della select, come si fa a chiamare il db e a crearne un istanza; nel tuo caso non serve costruire l'array per poi passarlo, conviene passare i valori direttamente.
Se guardi sotto dove applica i filtri vedi anche come divide i "where" i "from" eccetera.
Io non so come funziona chronoform ma molte query in joomla sono semplificabili usando il CRUD di joomla... in pratica usando, quando si tratta dell'handling di un item, la table. esempio se uno volesse in un controller un record corrispondente ad un id basta il metodo getItem($cid) senza fare nessuna query.