Back to top

Autore Topic: Aggiornare i campi di un form dopo un submit [RISOLTO]  (Letto 2916 volte)

Offline chico_

  • Nuovo arrivato
  • *
  • Post: 11
  • Sesso: Maschio
    • Mostra profilo
Buongiorno.
Ho il seguente problema:
ho creato una pagina in cui l'amministratore puo' selezionare un record da una tabella del database (tramite combobox) per poi eliminarlo alla pressione di un tasto "submit". Il record viene correttamente eliminato dal database, ma il record eliminato rimane comunque nella combobox a meno che non si faccia il refresh della pagina.
Ecco il codice che ho usato:
Codice: [Seleziona]
<?php


// No direct access
defined'_JEXEC' ) or die( 'Restricted access' );


//recupero dati
$values $_POST['values'];
//--costruisco il form ***********
?>

<form name="names" id="names" action="<?php echo JURI::current(); ?>" method="post" >
<?php
//START Carico dati ********************************************
$db =& JFactory::getDBO();
$query "SELECT id FROM `#__test` order by id";
$db->setQuery($query);
$nomes $db->loadColumn();


echo
'<div style="width:230px;float:left;">Selezionare item da eliminare<>';
echo 
'<select name="values">';
foreach(
$nomes as $value){
echo 
'<option value="'.$value.'">'.$value.'</option>'."\n";
}
echo 
'</select>[br /]';
//END Carico dati ********************************************
?>

<p><input id="submit" name="submit" type="submit" value="Submit " /></p>
</form>
<?php
if ($values!=""){
//START Elimina record ********************
$db JFactory::getDbo(); 
 
$query $db->getQuery(true); 
 
$query->delete($db->quoteName('#__test')) 
       ->
where(array($db->quoteName('id') . '='.$values)); 
 
$db->setQuery($query); 
 
$result $db->execute(); 
} else {
//
}
//END Elimina record ********************
?>




Ho provato anche a togliere l'action dal form, ma il problema rimane.


(PHP 5.5.11, Joomla 3.3.3, il codice è inserito in un articolo con il plugin  Sourcerer)


Qualche idea?


Grazie


Chico_
« Ultima modifica: 25 Ago 2014, 17:44:42 da chico_ »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Aggiornare i campi di un form dopo un submit
« Risposta #1 il: 25 Ago 2014, 12:36:07 »
sposta la query di selezione dopo quella di rimozione del record, altrimenti continuerai a vedere i records.

ps: stai prendendo un dato dal canale post e lo stai passando così come è al server db: non è una cosa saggia  :-X

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

Offline chico_

  • Nuovo arrivato
  • *
  • Post: 11
  • Sesso: Maschio
    • Mostra profilo
Re:Aggiornare i campi di un form dopo un submit
« Risposta #2 il: 25 Ago 2014, 14:21:11 »
Grazie mille.
In merito alla tua giusta osservazione in merito alla sicurezza dell $_POST, a tuo avviso è corretto sostituire il codice  con cui passo i dati con:
Codice: [Seleziona]
$values =JRequest::getInt('values');


?


Chico

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:Aggiornare i campi di un form dopo un submit
« Risposta #3 il: 25 Ago 2014, 14:30:18 »
ok per getInt(), ma con J3 e php5.5 è da usare JInput (http://docs.joomla.org/Retrieving_request_data_using_JInput).

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

Offline chico_

  • Nuovo arrivato
  • *
  • Post: 11
  • Sesso: Maschio
    • Mostra profilo
Aggiornare i campi di un form dopo un submit
« Risposta #4 il: 25 Ago 2014, 16:46:17 »

Grazie mille delle indicazioni, Marco.
Ho aggiustato il codice come da indicazioni, funziona perfettamente (non che ne dubitassi.... ;) )
Nel caso possa servire a qualcuno posto il codice modificato :
Codice: [Seleziona]
<?php
// No direct access
defined'_JEXEC' ) or die( 'Restricted access' );


// START recupero dati
$jInput JFactory::getApplication()->input;
$values $jInput->get('values'0'INT');
// END recupero dati


if ($values!=""){
//START Eventuale eliminazione record ********************
$db JFactory::getDbo(); 
$query $db->getQuery(true); 
$query->delete($db->quoteName('#__test')) 
->
where(array($db->quoteName('id') . '='.$values)); 
$db->setQuery($query); 
$result $db->execute(); 
} else {
//
}
//END Eventuale eliminazione record ********************
?>



<!-- START costruzione form ************************************ -->
<form name="names" id="names" action="<?php echo JURI::current(); ?>" method="post" >
<?php
//START Carico dati ********************************************
$db =& JFactory::getDBO();
$query "SELECT id FROM `#__test` order by id";
$db->setQuery($query);
$nomes $db->loadColumn();
echo
'<div style="width:230px;float:left;">Selezionare item da eliminare<>';
echo 
'<select name="values">';
foreach(
$nomes as $value){
echo 
'<option value="'.$value.'">'.$value.'</option>'."\n";
}
echo 
'</select>[br /]';
//END Carico dati ********************************************
?>

<p><input id="submit" name="submit" type="submit" value="Submit " /></p>
</form>
<!-- END costruzione form ************************************ -->


Grazie ancora


Chico_
« Ultima modifica: 25 Ago 2014, 17:45:07 da chico_ »

 



Web Design Bolzano Kreatif