Joomla.it Forum
Non solo Joomla... => Sviluppo => : chico_ 24 Aug 2014, 11:13:30
-
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:
<?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_
-
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
-
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:
$values =JRequest::getInt('values');
?
Chico
-
ok per getInt(), ma con J3 e php5.5 è da usare JInput (http://docs.joomla.org/Retrieving_request_data_using_JInput).
ciao
-
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 :
<?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_