Newsgroup: it.comp.www.php
Titolo: Form multipli

Dunque ho questo problema, devo inserire dei dati in una rubrica 
"gerarchica", nel quale il massimo della gerarchia si può avere con
-org => reparto => persona
ma si può anche avere
-org => persona
o direttamente
-persona
Se vengono selezionai org e reparto vanno poi inseriti nell'oggetto 
persona, altrimenti devo comunque dare la possibilità di inserirli.
La cosa in teoria semplice mi sembra un delirio da gestire con php+html 
liscio.
1. Come gestire la sequenza di eventi? _submit_check è vero a ogni 
submit, quindi usare header e flag nell'indirizzo? controllare in $_POST?
2. Le liste org e reparto vengono generate in automatico, così come i 
form con gli attributi, come si potrebbe fare in modo intelligente a 
scrivere nel form di input i valori di reparto e org se settati 
precedentemente??
Qui ci sono le classi degli oggetti generici...
http://paste-it.net/6644
Vale forse la pena di inserire javascript o altre tecnologie?

 
http://paste-it.net/6644
Ti consiglio vivamente di valutare la possibilita' di utilizzare un
template engine oppure un framework di sviluppo che ti permetta di
separare la logica applicativa da quella di presentazione.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 
La valuto e alla prossima implementazione sarà sicuramente fatta almeno 
con smarty, però per adesso volevo provare a manina..

 Quindi javascript?
Per il lato server PHP (od linguaggio equivalente), per il lato client,
una tecnologia lato client (Javascript, Flash, Java, Siverlight, etc.).


 
Sono riuscito con una certa soddisfazione a creare la parte di 
inserimento dati  con javascript-php e smarty.
Ho ancora qualche dubbio però (più di qualche a dir la verità).
Praticamente nella pagina di inserimento principale avrei 3 form, due 
select e un form di input, e un solo bottone finale che fa il check.
Ora purtroppo ho dovuto fare creare funzioni per la creazione di form 
come array di stringhe, tipo così:
function getForm () {
		$f = array();
		$f = array_merge($f, getInput());
		array_push($f, "<INPUT type=\"hidden\" name=\"_submit_check\" 
value=\"1\">");
		array_push($f, "<INPUT type=\"button\" value=\"invia\" 
onclick=checkForm()>");
		array_push($f, "<INPUT type=\"reset\" value=\"cancella\">");
		return $f;
	}
function getInput () {
		if ($_SESSION['tipo'] == 'persona') {
			$o = new Person();
		}
		else $o = new Ditta();
		$inp = array();
		foreach ($o->attrs as $a) {
			$val = $o->ldapIt[$a];
			array_push($inp, "$val: ");
			array_push($inp, "<INPUT type=\"text\" name=\"$val\">");
		}
		return $inp;
	}
Ho poi usato questo sistema BARBARO nel template
<table width="80%" border="1">
<th> {include file='top.tpl'}</th>
{if $smarty.session.tipo == 'persona'}
	<tr>
		<td> Ditta: {foreach from=$ditta item=d} {$d} {/foreach} </td>
	</tr>
	<tr>
		<td> Reparto: {foreach from=$reparto item=r} {$r} {/foreach} </td>
	</tr>
{/if}
<tr> <td>
<FORM name={$smarty.session.tipo}>
{html_table loop=$data cols="Attributo,Valore" table_attr='id="valori"'}
</FORM>
</td></tr>
</table>
Per impaginarli ulteriormente, d'altronde le OPZIONI nella select non 
gradiscono di essere intabellate.
C'è qualche modo più intelligente (di sicuro)? Forse usare i css e 
abbandonare le tabelle??
Altro?
Consigli vari ed eventuali?
Inoltre il check dell'input lo faccio con javascript per cui non dovrei 
aver problemi (quando invia vuol dire che è valido) però dovrei poter 
gestire gli altri errori.
Quindi ho pensato di prendere il valore di ritorno di create_data() (che 
a sua volta lo prende da ldap_add() ) e vedere di conseguenza che fare.
Forse converrebbe semplicemente un alert con javascript in caso di 
successo e un ritorno alla pagina con i valori inseriti precedentemente 
in caso di insuccesso.
Per fare questo salvo l'ultimo oggetto creato in $_SESSION['last'], può 
andare?
tipo così
	if ($_POST['_submit_check']) {
		if (create_data()) {
			// print "hai aggiunto correttamente";
			print_r($_SESSION);
			$smarty->assign('data', $_SESSION['last']->show());
			$smarty->display('ok.tpl');
		}
		else
 
qui il codice completo di index.php e insert.tpl..
http://paste-it.net/6830
Grazie a tutti

 dovrei poter gestire gli altri errori.
E se l'utente ha Javascript disattivato? 


 
Questi problemi non si pongono (per adesso) dato che è un programmino 
che girerà nell'azienda in cui faccio il sysadmin, per cui le 
impostazioni le decido io :D
Ho notato però con dispiacere che non funziona con safari accidenti a 
loro, forse perché su <OPTION> non supportano "onclick"?
Che rottura sto web programming ognuno fa come c**** gli pare!

 
Oppure con Quickform di Pear[1]; tra l'altro c'e' anche un package per 
le interrogazioni dell'ldap (
http://pear.php.net/package/Net_LDAP
)
[1] Per la decantata par codicio!
	Francesco

 loro, forse perché su <OPTION> non supportano "onclick"?
E' sufficiente gestire l'onChange del tag SELECT.


 
Ok grazie