Joomla.it Forum
Non solo Joomla... => Sviluppo => : Arkimede360 12 Feb 2010, 16:43:13
-
Ciao a tutti, scrivo qui perchè questa volta mi occorre il consiglio di un esperto.
Ho la necessità di andare a sovrascrivere un dato nel DB di joomla. Vi spiego il progetto:
Ho uno script che fa una certa equazione aritmetica, che equivale alla spesa (o costo) dell'utente. Es: 2€.
Ho aggiunto un campo al com_users e l'ho chiamato credito. Es. 10€
Quello che mi occore è sottrarre il costo (2€) al credito (10€) e il risultato andarlo a sovrascrivere nella tabella "credito" dell'utente.
Un'altra cosa che vorrei fare, ma non so quanto sia possibile, è far disabilitare l'occount utente quando la tabella "credito" è uguale a 0.
Spero di essere stato chiaro nell'esposizione e di travare qualuno che mi aiuti.
Grazie, F.
-
Ho aggiunto un campo al com_users
---------------------------------
perchè?
M.
-
Mi serviva un nuovo campo da poter gestire dal pannelo di amministrazione.
Ho fatto male?
-
non so se tu abbia fatto bene o male, volevo sapere se c'era un ragionamento.
solo che mo che fai?
sottrarre il costo (2€)
Devi modificare o aggiungere metodi e script al com_component...
... sei in grado?
soprattutto, come fai se devi aggiornare joomla?
M.
-
Ho omesso di dire che uso chronoforms!!
Non è un problema l'aggiornamento...
Quello che mi occorre è sapere come faccio ad andare a mettere il risultato nel DB.
-
Devi modificare o aggiungere metodi e script al com_component
come? ... così
http://www.pilloledijoomla.it/livello-intermedio/accesso-al-database-di-joomla.html
M.
-
il seguente script mi richiama i dati inseriti in DB:
// qualora non fosse globalizzato, recupero il mainframe
global $mainframe;
// istanzio un oggetto di accesso al DB
$db =& JFactory::getDBO();
// Voglio le email di tutti gli utenti, notate #__
$query = 'SELECT email FROM #__users';
// effettuo la query
$db->setQuery( $query );
// recupero il resultset
$rows = $db->loadObjectList();
// stampo a schermo l'elenco
foreach($rows as $row) {
echo $row->email.'<br/>';
}
ma come faccio ad andare a scrivere (e non leggere) i dati nel DB?
-
...quello non è un problema di joomla, ma di mysql...
invece di select usi la insert
M.
-
Ok, penso di potercela fare...cerco qualche guida per crearmi lo script che mi occorre.
Solo una cosa. Con questo script:
<?php
// qualora non fosse globalizzato, recupero il mainframe
global $mainframe;
// istanzio un oggetto di accesso al DB
$db =& JFactory::getDBO();
// Voglio le email di tutti gli utenti, notate #__
$query = 'SELECT credito, name FROM #__users';
// effettuo la query
$db->setQuery( $query );
// recupero il resultset
$rows = $db->loadObjectList();
// stampo a schermo l'elenco
foreach($rows as $row) {
echo $row->name. '<br/>' ;
echo $row->credito.'<br/>';
}
?>
visualizzo i dati a schermo. Ho provato ad aggiungere
<?php echo $row->name; ?>
<?php echo $row->credito; ?>
ma mi visualizza solamente i fati dell'ultimo utente. Come faccio per avere l'elenco completo....
-
aiutati che il ciel ti aiuta :)
qui trovi tutto e di più
http://docs.joomla.org/How_to_use_the_database_classes_in_your_script
ps quando vuoi verificare qualcosa non usare echo usa print_r($variabile); oppure var_dump($variabile);
il risultato spesso in joomla è un'array e con l'echo non vedresti nulla
M.
-
giuro che mi sto applicando :)
quindi se voglio inserire il nuovo credito nella tabella prova a fare così:
<?php
$db =& JFactory::getDBO();
$query = 'INSERT credito FROM #__users';
$db->setQuery($insertObject);
$result = $db->query();
?>
adesso devo collegare questo
Credito
<input type="text" value="" id="credito" name="credito" maxlength="4" size="4" />
allo script su
Ecco....mi manca questo passaggio (sperando che il resto è giusto :-[ )
-
INSERT credito FROM #__users';
-------------------------------
no, una insert non si fa così
http://www.tizag.com/mysqlTutorial/mysqlinsert.php
M.
-
Vediamo se ho capito
// Insert a row of information into the table "example"
mysql_query("INSERT INTO #__users
(credito) VALUES('credito') ")
or die(mysql_error());
-
Allora questa dovrebbe essere giusta:
<?php
$db = JFactory::getDBO();
$query = "insert into #__users values('credito')";
$db->setQuery($query);
?>
chiedo conferma :)
Passo successivo
ho una casella di testo dove andrà a finire un numero
Credito
<input type="text" value="" id="credito" name="credito" maxlength="4" size="4" />
È sufficiente inserire "credito" nell' ID e nel NAME oppure devo fare qualcos'altro??
Carneade!!
-
values('credito')"; -> no
values $credito"; -> si
È sufficiente inserire "credito" nell' ID e nel NAME oppure devo fare qualcos'altro??
----------------------------------------------------------
non vuol dir nulla qs domanda, provo a risponderti dicendo che nel form passerà il value di name=credito, ovvero una variabile GET/POST credito col valore inserito nel form.
-
Qui non funziona niente.
Grazie comunque. Provo a fare da solo.
-
Qui non funziona niente.
--------------------------
credo sia normale... mica ho capito cosa stai facendo... quello che ti ho suggerito è il codice e ti assicuro che è corretto...
come e dove lo usi tu nn lo posso sapere, Joomla solitamente ha un suo mvc e non conosco altro modo di implementare o modificare codice.
M.
-
Quello che devo fare è semplice, solo che io non so farlo...
...ed è scrivere un "numero" in una tabella del DB quando l'utente loggato invia il form.
-
devi seguire il processo di quel form ci sarà un punto dove vengono restituiti i dati per l'inserimento nel db preposto da chronoform, poi ci sarà la query che li inserisce, li aggiungi la tua...
occhio ai nomi standard che vanno in conflitto
-
questo è il codice che dici:
<?php
$MyForm =& CFChronoForm::getInstance("inviofile");
if($MyForm->formparams("dbconnection") == "Yes"){
$user = JFactory::getUser();
$row =& JTable::getInstance("chronoforms_inviofile", "Table");
srand((double)microtime()*10000);
$inum = "I" . substr(base64_encode(md5(rand())), 0, 16).md5(uniqid(mt_rand(), true));
JRequest::setVar( "recordtime", JRequest::getVar( "recordtime", date("Y-m-d")." - ".date("H:i:s"), "post", "string", "" ));
JRequest::setVar( "ipaddress", JRequest::getVar( "ipaddress", $_SERVER["REMOTE_ADDR"], "post", "string", "" ));
JRequest::setVar( "uid", JRequest::getVar( "uid", $inum, "post", "string", "" ));
JRequest::setVar( "cf_user_id", JRequest::getVar( "cf_user_id", $user->id, "post", "int", "" ));
$post = JRequest::get( "post" , JREQUEST_ALLOWRAW );
if (!$row->bind( $post )) {
JError::raiseWarning(100, $row->getError());
}
if (!$row->store()) {
JError::raiseWarning(100, $row->getError());
}
$MyForm->tablerow["stampa_chronoforms_inviofile"] = $row;
}
?>
se io volessi che ognni utente registrato che si logga possa cambiare ad esempio il proprio Username direttamente dal mio form....cosa devo fare?
ti prego aiutami sono in alto mare... :-\
-
questa è la query
if (!$row->store()) {
o meglio $row->store è il metodo che esegue la query di inserimento
se io volessi che ognni utente registrato che si logga possa cambiare ad esempio il proprio Username direttamente dal mio form....cosa devo fare?
--------------------------------------------------------------------
un componente amministrativo con abilitazione alla modifica anche agli utenti registrati
...però ribadisco... secondo me stai andando per campi... ovvero devi seguire l'mvc di joomla non aggiungere pezzetti qua e la.
Quello che vuoi fare tu non è difficilissimo, ma nemmeno banale...serve
- Un componente lato pubblico che mostri il form, faccia il check dei dati e inserisca nel db e permetta la modifica e l'update
- Un componente amministrativo che permetta tutte le funzioni di gestione del dato
Ora non ti rimane che vedere come è fatto un componente e capire cosa va scritto dove.
Io ti seguo ugualmente ma con quello che stai facendo finisci in ... nulla.
M.
-
Visto che hai aperto un post anche qui
http://forum.joomla.it/index.php/topic,95144.0.html
considero questo post come risolto.
M.
-
Ok, ti ringrazio!! Ma credo prorprio che sia fuoro dalla mia portata!
Devo trovare una soluzione alternativa.
Grazie comunque!!