Back to top

Autore Topic: problema funzione componente  (Letto 5000 volte)

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
problema funzione componente
« il: 17 Mar 2010, 13:30:22 »
Ciao a tutti ragazzi!
Mi sono iscritto oggi per chiedere se qualcuno ha la soluzione a questo mio problema..

Allora sto creando un nuovo componente per l'aggiunta di alcuni prodotti. Ecco il codice della funzione che uso:

Codice: [Seleziona]
<?php

defined
('_JEXEC') or die('Restricted access');
//echo '<div class="componentheading">Registrazione Prodotti</div>';

jimport('joomla.application.helper');
require_once(
JApplicationHelper::getPath('html'));
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');
 
switch(
$task) {
    default:
  
showProdotti($option);
break;
}


function 
showProdotti($option) {
$user =& JFactory::getUser();
$userid $user->get('id');
$db =& JFactory::getDBO();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' ");
$try $db->query();
    if (
$db->getNumRows($try) == 0)


$db->setQuery("INSERT INTO `#__user_products` SET `id`=NULL, `userid`='$userid', `nome1`=NULL, `codice1`=NULL, `data1`=NULL, `nome2`=NULL, `codice2`=NULL, `data2`=NULL, `nome3`=NULL, `codice3`=NULL, `data3`=NULL, `nome4`=NULL, `codice4`=NULL, `data4`=NULL, `nome5`=NULL, `codice5`=NULL, `data5`=NULL");
$db->query();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' LIMIT 1 ");
        $db->query();
}
else
        {

    $db->setQuery("UPDATE `#__user_products` SET `userid`='$userid', `nome1`='$_POST[nome1]', `codice1`=NULL, `data1`=NULL, `nome2`=NULL, `codice2`=NULL, `data2`=NULL, `nome3`=NULL, `codice3`=NULL, `data3`=NULL, `nome4`=NULL, `codice4`=NULL, `data4`=NULL, `nome5`=NULL, `codice5`=NULL, `data5`=NULL  WHERE `userid`='$userid' LIMIT 1");
$db->query();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' LIMIT 1 ");
        $db->query();
}
$rows $db->loadObjectList();
HTML_prodotti::showProdotti($rows$option);
}
?>

Questo è invece il codice della pagina prodotti.html.php dove sta il form per l'inserimento:

Codice: [Seleziona]
<?php
//no direct access
defined('_JEXEC') or die('Restricted access');
 
class 
HTML_prodotti {
function showProdotti($rows$option) {

?>



<img src="images/stories/banner_regprodotti.gif" /><br/>



<form method="post" action="<?php echo JRoute::_('index.php?option=com_prodotti&task=showProdotti'?>"  name="formProdotti" id="formProdotti">

<?php foreach ($rows as $row) {  ?>

<p><b><u>PRODOTTO 1</u></b></p>
<table cellpadding="0" cellspacing="0">
<tr>
    <td><?php echo 'Nome Prodotto' ?></td>
<td width="40"></td>
<td><?php echo 'Codice Seriale' ?></td>
<td width="40"></td>
<td><?php echo 'Data di Acquisto' ?></td>
</tr>


        <tr>
   <td><input type="text" name="nome1" id="nome1" value="<?php echo $row->nome1?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="codice1" id="codice1" value="<?php echo $row->codice1?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="data1" id="data1" value="<?php echo $row->data1?>" class="DatePicker" tabindex="1" /></td>
</tr>
</table><br/>



<p><b><u>PRODOTTO 2</u></b></p>
<table cellpadding="0" cellspacing="0">
<tr>
    <td><?php echo 'Nome Prodotto' ?></td>
<td width="40"></td>
<td><?php echo 'Codice Seriale' ?></td>
<td width="40"></td>
<td><?php echo 'Data di Acquisto' ?></td>
</tr>

    <tr>
   <td><input type="text" name="nome2" id="nome2" value="<?php echo $row->nome2?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="codice2" id="codice2" value="<?php echo $row->codice2?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="data2" id="data2" value="<?php echo $row->data2?>" class="DatePicker" tabindex="1"  /></td>
</tr>
</table><br/>

<p><b><u>PRODOTTO 3</u></b></p>
<table cellpadding="0" cellspacing="0">
<tr>
    <td><?php echo 'Nome Prodotto' ?></td>
<td width="40"></td>
<td><?php echo 'Codice Seriale' ?></td>
<td width="40"></td>
<td><?php echo 'Data di Acquisto' ?></td>
</tr>

   <tr>
   <td><input type="text" name="nome3" id="nome3" value="<?php echo $row->nome3?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="codice3" id="codice3" value="<?php echo $row->codice3?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="data3" id="data3" value="<?php echo $row->data3?>" class="DatePicker" tabindex="1"  /></td>
</tr>
</table><br/>

<p><b><u>PRODOTTO 4</u></b></p>
<table cellpadding="0" cellspacing="0">
<tr>
    <td><?php echo 'Nome Prodotto' ?></td>
<td width="40"></td>
<td><?php echo 'Codice Seriale' ?></td>
<td width="40"></td>
<td><?php echo 'Data di Acquisto' ?></td>
</tr>

        <tr>
   <td><input type="text" name="nome4" id="nome4" value="<?php echo $row->nome4?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="codice4" id="codice4" value="<?php echo $row->codice4?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="data4" id="data4" value="<?php echo $row->data4?>" class="DatePicker" tabindex="1"  /></td>
</tr>
</table><br/>

<p><b><u>PRODOTTO 5</u></b></p>
<table cellpadding="0" cellspacing="0">
<tr>
    <td><?php echo 'Nome Prodotto' ?></td>
<td width="40"></td>
<td><?php echo 'Codice Seriale' ?></td>
<td width="40"></td>
<td><?php echo 'Data di Acquisto' ?></td>
</tr>

        <tr>
   <td><input type="text" name="nome5" id="nome5" value="<?php echo $row->nome5?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="codice5" id="codice5" value="<?php echo $row->codice5?>" /></td>
   <td width="40"></td>
   <td><input type="text" name="data5" id="data5" value="<?php echo $row->data5?>" class="DatePicker" tabindex="1"  /></td>
</tr>
</table><br/> <?php ?>

<p><?php echo '<button type="submit" >'.INVIA.'</button>' ?></p>
</form>
 
<?php

 
}
  }

?>


Funziona tutto però quando riaggiorno la pagina il campo nome1 si svuota cioè ritorna vuoto sia nell'input del form sia nel database..

Qualcuno può aiutarmi?
Grazie in anticipo!

mau_develop

  • Visitatore
Re:problema funzione componente
« Risposta #1 il: 17 Mar 2010, 19:36:20 »
il campo nome1 si svuota
-------------------------

solo quello?

M.

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #2 il: 17 Mar 2010, 20:26:20 »
si perchè sto provando solo con quel campo infatti se vedi nelle query ho messo solo a nome1 la variabile $_POST.. gli altri infatti sono NULL e rimangono NULL

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:problema funzione componente
« Risposta #3 il: 18 Mar 2010, 08:42:14 »
ciao,
da una occhiata veloce il flusso, ad ogni caricamento della pagina, è:

leggi il db
è vuoto?
sì:
   inserisci un record
   leggi il primo record
no:
   aggiorna il record
   leggi il primo record
visualizza il record

il problema è che l'aggiornamento viene fatto indipendentemente dal fatto che ci sia un submit o meno!!

btw:
1. per fare cinque gruppi uguali si usa un for
2. i vettori si esprimono in colonne e non in righe (fondamentale regola di normalizzazione)

ciao,
marco


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

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #4 il: 18 Mar 2010, 09:43:20 »
Ciao Marco ti ringrazio per la tua risposta!

Potresti farmi degli esempi a livello di codice di come potrei risolvere gentilmente?

Grazie ancora

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:problema funzione componente
« Risposta #5 il: 18 Mar 2010, 17:33:24 »
basta che verifichi se in $_POST è presente uno dei campi...

btw: sai che con quel codice ti bucano il sito in tre secondi? NON SI PRENDE IL CONTENUTO DI POST E LO SI METTE IN UNA QUERY COSÌ COME È!!  >:( >:(

mi spiace ma è tutto sbagliato, sia la logica che l'implementazione  :( 

ti consiglio di ripartire dal wiki di joomla: studia gli articoli sulla costruzione di un componente e su come creare ed inizializzare le tabelle del db in fase di installazione.

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

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #6 il: 18 Mar 2010, 18:04:44 »
Ho risolto in questo modo!

Codice: [Seleziona]
<?php

defined
('_JEXEC') or die('Restricted access');
//echo '<div class="componentheading">Registrazione Prodotti</div>';



jimport('joomla.application.helper');
require_once(
JApplicationHelper::getPath('html'));
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');
 
switch(
$task) {
    default:
  
showProdotti($option);
break;
}


function 
showProdotti($option) {
$user =& JFactory::getUser();

 
if($user->id == 0) {
echo "Occorre effettuare il login per visualizzare questa pagina";
}

else {
$user =& JFactory::getUser();
$userid $user->get('id');
$db =& JFactory::getDBO();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' ");
$query $db->query();
    if (
$db->getNumRows($query) == 0)

//echo 'entro nell\'if senza un valore nel db';
$db->setQuery("INSERT INTO `#__user_products` SET `id`=NULL, `userid`='$userid', `nome1`=NULL, `codice1`=NULL, `data1`=NULL, `nome2`=NULL, `codice2`=NULL, `data2`=NULL, `nome3`=NULL, `codice3`=NULL, `data3`=NULL, `nome4`=NULL, `codice4`=NULL, `data4`=NULL, `nome5`=NULL, `codice5`=NULL, `data5`=NULL");
$db->query();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' LIMIT 1 ");
        $try1 =  $db->query();
    
$rows $db->loadObjectList();
HTML_prodotti::showProdotti($rows$option);
}
if ($db->getNumRows($query) != 0)
 {
    //echo 'entro nell\'if con un valore nel db - ';

        if(isset(
$_POST['submit'])) {
        
//echo 'entro nell\'if con submit settato';
    $db->setQuery("UPDATE `#__user_products` SET `userid`='$userid', `nome1`='$_POST[nome1]', `codice1`='$_POST[codice1]', `data1`='$_POST[data1]', `nome2`='$_POST[nome2]', `codice2`='$_POST[codice2]', `data2`='$_POST[data2]', `nome3`='$_POST[nome3]', `codice3`='$_POST[codice3]', `data3`='$_POST[data3]', `nome4`='$_POST[nome4]', `codice4`='$_POST[codice4]', `data4`='$_POST[data4]', `nome5`='$_POST[nome5]', `codice5`='$_POST[codice5]', `data5`='$_POST[data5]'  WHERE `userid`='$userid' ");
$db->query();
      $db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' LIMIT 1 ");
        $try2 $db->query();
$rows $db->loadObjectList($try2);
    HTML_prodotti::showProdotti($rows$option);
                               }
      }
 
 
if(!isset($_POST['submit'])) {
//echo 'entro nell\'if con submit non settato';
 $db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' ");
     $query $db->query();
$rows $db->loadObjectList($query);
    HTML_prodotti::showProdotti($rows$option);
                             }
     

} }
?>

Qualsiasi consiglio per migliorarlo è ben accetto

grazie a tutti!

Offline tonicopi

  • Global Moderator
  • Instancabile
  • ********
  • Post: 12790
  • Sesso: Maschio
    • Mostra profilo
Re:problema funzione componente
« Risposta #7 il: 20 Mar 2010, 23:21:24 »
Ciao Giode, ma tu leggi i post degli altri o solo i tuoi?
Giusto sopra il tuo ultimo post ti è stato spiegato che quel codice che hai scritto ha gravi problemi di sicurezza. E tu avanti tutta senza curarti dell'avviso?  ;D
joomlacsszengarden.com = il giardino dei css di Joomla!
L'attesa del piacere è essa stessa... piacere!

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #8 il: 21 Mar 2010, 14:05:15 »
ho editato il codice affinchè si piu sicuro gia da prima io intendevo la struttura della funzione.. comunque ecco il codice adesso:

Codice: [Seleziona]
<?php

defined
('_JEXEC') or die('Restricted access');
//echo '<div class="componentheading">Registrazione Prodotti</div>';



jimport('joomla.application.helper');
require_once(
JApplicationHelper::getPath('html'));
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables');
 
switch(
$task) {
    default:
  
showProdotti($option);
break;
}


function 
showProdotti($option) {
$user =& JFactory::getUser();


 
if($user->id == 0) {
echo "Occorre effettuare il login per visualizzare questa pagina";
echo '<img src="images/ritenta.gif" />';
}

else {
$user =& JFactory::getUser();
$userid $user->get('id');
$fullname $user->get('name');
$db =& JFactory::getDBO();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' ");
$query $db->query();
    if (
$db->getNumRows($query) == 0)

//echo 'entro nell\'if senza un valore nel db';
$db->setQuery("INSERT INTO `#__user_products` SET `id`=NULL, `userid`='$userid', `fullname`=NULL, `nome1`=NULL, `codice1`=NULL, `data1`=NULL, `nome2`=NULL, `codice2`=NULL, `data2`=NULL, `nome3`=NULL, `codice3`=NULL, `data3`=NULL, `nome4`=NULL, `codice4`=NULL, `data4`=NULL, `nome5`=NULL, `codice5`=NULL, `data5`=NULL");
$db->query();
$db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' LIMIT 1 ");
        $try1 =  $db->query();
    

}
if ($db->getNumRows($query) != 0)
 {
    //echo 'entro nell\'if con un valore nel db - ';

        if(isset(
$_POST['submit'])) {
        
//echo 'entro nell\'if con submit settato';
    $db->setQuery("UPDATE `#__user_products` SET `userid`='$userid', `fullname`='$fullname', `nome1`='".mysql_real_escape_string($_POST['nome1'])."', `codice1`='".mysql_real_escape_string($_POST['codice1'])."', `data1`='".mysql_real_escape_string($_POST['data1'])."', `nome2`='".mysql_real_escape_string($_POST['nome2'])."', `codice2`='".mysql_real_escape_string($_POST['codice2'])."', `data2`='".mysql_real_escape_string($_POST['data2'])."', `nome3`='".mysql_real_escape_string($_POST['nome3'])."', `codice3`='".mysql_real_escape_string($_POST['codice3'])."', `data3`='".mysql_real_escape_string($_POST['data3'])."', `nome4`='".mysql_real_escape_string($_POST['nome4'])."', `codice4`='".mysql_real_escape_string($_POST['codice4'])."', `data4`='".mysql_real_escape_string($_POST['data4'])."', `nome5`='".mysql_real_escape_string($_POST['nome5'])."', `codice5`='".mysql_real_escape_string($_POST['codice5'])."', `data5`='".mysql_real_escape_string($_POST['data5'])."'  WHERE `userid`='$userid' ");
$db->query();
      $db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' LIMIT 1 ");
        $try2 $db->query();
$rows $db->loadObjectList($try2);
    HTML_prodotti::showProdotti($rows$option);
                               }
      }
 
 
if(!isset($_POST['submit'])) {
//echo 'entro nell\'if con submit non settato';
 $db->setQuery("SELECT * FROM `#__user_products` WHERE `userid`='$userid' ");
     $query $db->query();
$rows $db->loadObjectList($query);
    HTML_prodotti::showProdotti($rows$option);
                             }
     

} }
?>


Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:problema funzione componente
« Risposta #9 il: 22 Mar 2010, 08:33:08 »
senti Giode,
  ti spiacerebbe proprio evitare di continuare a postare tutto questo codice?

dubito che possa servire a qualcuno, al più serve solo come esempio di che cosa non deve essere MAI fatto. È sbagliata la logica, è sbagliata la progettazione, è sbagliata l'implementazione nel framework, è sbagliato il disegno del db: solo per citare gli aspetti più rilevanti.

dico, ma lo hai visto o no che hai la stessa query ripetuta QUATTRO volte? non ti viene il dubbio che ci sia un problema di disegno?

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

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #10 il: 22 Mar 2010, 09:50:23 »
piu che altro mi viene da chiedere: perchè mi dite che è sbagliata ma non mi fate capire dove e perchè? grazie

mau_develop

  • Visitatore
Re:problema funzione componente
« Risposta #11 il: 22 Mar 2010, 10:55:36 »
perchè bisognerebbe avere la capacità di spiegare, con i limiti di un forum, il concetto di classe e di mvc... e non la vedo semplice.

M.

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #12 il: 22 Mar 2010, 11:36:35 »
Ti ringrazio mau per la risposta! Senza entrare nel codice potreste dirmi in modo teorico dove ho sbagliato e perchè? In questo modo mi informerò e non ripeterò gli errori..

Grazie

mau_develop

  • Visitatore
Re:problema funzione componente
« Risposta #13 il: 22 Mar 2010, 12:07:12 »
dovresti prendere un componente già esistente (semplice) e tentare di modificarlo inserendo il tuo codice.
Credo esiste (forse nel sito di Flavio,nn ricordo) proprio un tutorial di un form.

Tutto questo ti obbligherebbe a seguire scelte che probabilmente ti sembreranno poco logiche (capita con i framework) ma necessarie per rispettare l'mvc, che è un compromesso tra logica e funzionalità.

Ti accorgi che quell'helper contiene un po' troppe cose, che ripetere 4 volte una query alla stessa tabella potrebbe giustificare la costruzione di un metodo apposito, che istanziare in un helper quell'html non è proprio corretto... etc.

M.

Offline = odino =

  • Instancabile
  • ******
  • Post: 5696
  • Sesso: Maschio
  • "In realtà li trasforma in menomati" Danzel
    • Mostra profilo
Re:problema funzione componente
« Risposta #14 il: 22 Mar 2010, 12:24:14 »
senti Giode,
  ti spiacerebbe proprio evitare di continuare a postare tutto questo codice?

mi accodo, esiste il pastebin per queste cose  :)  è un servizio molto utile, e migliora la leggibilità del tuo codice per noialtri

Offline Giode

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:problema funzione componente
« Risposta #15 il: 22 Mar 2010, 12:34:59 »
Va bene mau!
Ti ringrazio per la dritta mi informerò di più e cercherò di implementare del codice in qualche componente esistente per inpratichirmi...

Citazione da: =odino=
mi accodo, esiste il pastebin per queste cose  :)  è un servizio molto utile, e migliora la leggibilità del tuo codice per noialtri

Hai ragione la prossima voltà userò pastebin ;)

 



Web Design Bolzano Kreatif