Back to top

Autore Topic: form compilabile una volta sola  (Letto 2954 volte)

Offline claudiovis

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
form compilabile una volta sola
« il: 27 Set 2013, 11:25:02 »
Ciao a tutti

ho un modulo di chronoforms accessibile solo ad utenti registrati.

quindi quando ci si accede pesca i dati dell'utente e precomplia alcuni campi. (username, mail e id hidden)
...quando viene inviato il form viene compilata una tabella con tutti i dati

Vorrei fare in modo che gli utenti possano compilarlo e spedirlo una volta sola.
come posso fare a dirgli ...if nella tabella trovi già l'id scrivi "hai già compilato il form" e NON consentirgli di accedervi ..o di scrivervi ...o di inviarlo?



Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #1 il: 27 Set 2013, 14:08:36 »
Devi impostare un action onsubmit che verifichi nel db se già presente l'id dell'utente attuale se vero mostra il messaggio se falso prosegue con l'invio. Non so dirti il codice giusto della action in quanto non uso chronoforms ma il concetto è quello.

Offline claudiovis

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #2 il: 27 Set 2013, 14:29:06 »
...quindi (ragionando ad alta voce) se io volessi controllare prima dell'invio del form basterebbe mettere il controllo nel onLoad del form stesso... 
hmmm ...ora vedo di cercare un qualche codice php che mi faccia questo controllo

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #3 il: 27 Set 2013, 14:51:06 »
Sì una azione che venga eseguita un attimo prima dell'invio del form, forse l'onload no perché se non carichi i valori non puoi fare controlli, ti ho suggerito l'action onsubmit che dovrebbe essere eseguita dopo aver ricevuto tutti i campi e prima di inviarli. Ma non sono sicuro perché non conosco a fondo le action di chronoforms.

Offline claudiovis

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #4 il: 27 Set 2013, 15:07:04 »
al forum si accede solo dopo essere loggati.

all'onLoad del form come primo controller gli do
Codice: [Seleziona]
<?php
$user 
=& JFactory::getUser();
$form->data['user_email'] = $user->email;
$form->data['user_name'] = $user->name;
$form->data['user_username'] = $user->username;
$form->data['user_id'] = $user->id;
?>
così pesco tutti i dati dell'utente. alcuni li tengo hidden (id,email) e altri li mostro a video nei campi relativi (name, username)

poi nel mio form ho altri dati aggiuntivi (es. via città etc etc)
e vado a scrivere il tutto  campi user e campi aggiuntivi in una nuova tabella  #_dati_due

quindi dovrei controllare se in #_dati_due è presente l'id dell'utente attualmente loggato.

ho trovato questo codice(che ho provato ad adattare) ma non funzia...
l'ho messo in un altro controller subito sotto quello di prima
Codice: [Seleziona]
<?php
$db 
=& JFactory::getDBO();
$query "
    SELECT COUNT(*)
        FROM `#_dati_due `
        WHERE `id` = '
{$form->data['id'];}' ;
"
;
$db->setQuery($query);
$count $db->loadResult();
if ( 
$count ) {
 echo 
"Hai già compilato il modulo.";
  return 
false;
}
?>


in attesa di consigli e suggerimenti continuo a ragionarci

Offline claudiovis

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #5 il: 27 Set 2013, 16:58:14 »
la mia soluzione:

ho messo mano al codice del form...  e non negli eventi.

prima di visualizzare i miei campi ho messo
Codice: [Seleziona]
<?php
$database 
= &JFactory::getDBO();
 
$sql "SELECT id FROM #_dati_due where id ='{$form->data['user_id']}' ";
 
$database->setQuery($sql);
 
$results $database->loadAssocList();
if (
$results != null){
echo 
"HAI GIà compilato";
}else{
?>
 
CAMPI E SUBMIT
<?php ?>

...sembra funzionare.

...vi sembra formalmente corretto? ...può generare errori?  ...la considero RISOLTA?

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #6 il: 27 Set 2013, 17:02:57 »
Non vedo dove confronti l'id utente nel db del form con l'id dell'utente loggato.

Offline claudiovis

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #7 il: 27 Set 2013, 17:13:56 »
nella mia logica da ignorante gli dico

prendi da #_dati_due l'id uguale a quello dell'user ( $form->data[user_id] ) come l'avevo richiamato in onLoad
quindi se mi restituisce qualcosa (diverso da null) vuol dire che hai già compilato e non te lo rifaccio compilare

sbaglio?

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #8 il: 27 Set 2013, 18:07:02 »
No devi prendere l'id utente dal db inteso come utente connesso al momento. nella tua ipotesi se ho compreso bene tu prendi l'id user del form corrente e lo confronti con eventuali id user nei form inviati. Tuttavia se non invii prima o memorizzi i dati del form corrente non puoi leggere nulla.

Offline claudiovis

  • Esploratore
  • **
  • Post: 91
    • Mostra profilo
Re:form compilabile una volta sola
« Risposta #9 il: 30 Set 2013, 09:17:06 »
provo a spiegarmi per capire se ho fatto giusto.
...a me sembra funzionare ma nn vorrei sbagliare

l'utente si registra su joomla .

per poter vedere il form deve essere loggato.

appena accede alla pagina del form vado a pescare i suoi dati
<?php
$user
=& JFactory::getUser();
$form->data['user_email'] = $user->email;
$form->data['user_name'] = $user->name;
$form->data['user_username'] = $user->username;
$form->data['user_id'] = $user->id;
?>quindi appena carico il form io ho già questi dati...
e gli faccio pescare dalla del form #dati_due l'id di questo utente che viene salvato quando viene inviato il form
(nela tabella faccio salvare sia l'id che user_id)

<?php
$database
= &JFactory::getDBO();
 
$sql = "SELECT id FROM #_dati_due where id ='{$form->data['user_id']}' ";
 
$database->setQuery($sql);
 
$results = $database->loadAssocList();
if (
$results != null){
echo
"HAI GIà compilato";
}else{
?> 
CAMPI E SUBMIT
<?php } ?>

se è la prima volta nella tabella #dati_due non comparirà nessun riferimento a questo $form->data[user_id] e quindi mi restituirà "null"

altrimenti se questo confronto mi rende qualcosa vuol dire che è già presente e lo blocco

se è sbagliato come lo posso scrivere questo controllo?






 



Web Design Bolzano Kreatif