Newsgroup: it.comp.www.php
Titolo: Problema script (newbie)

Ho questo script che mi stampa a schermo i valori di 3 colonne. Vorrei che
uno dei campi di queste colonne fosse "editabbile" dall'utente. Qualcuno
puo' aiutarmi???
<?php
mysql_connect ("localhost","fox80129","xxxxxx")
or die ("Impossibile connettersi al Database");
mysql_select_db ("fox80129_db")
or die ("Impossibile connettersi a fox80129_db")
$query= mysql_query("select * from delta where nome='Manuel'");
while ($row= mysql_fetch_array ($query, MYSQL_ASSOC)){
foreach($row as $key => $temp){
print "$key : $temp<br>\n";
}
}
?>

"FOX" ha scritto

se vuoi farlo 'editabile' devi associarlo ad un campo INPUT e relativo form
che punta ad una pagina che poi gestirą la modifica e l'aggiornamento del
DB...
<form action="modifica.php" method="POST">
<input type="text" name="testo" value="$temp[campo_che_devi_modificare]">
etc etc.
</form>
------------------------------
l'altra pagina, che inserisce le modifiche
UPDATE delta set campo=$_POST[testo] where etc etc
ciao
--
--
CLS

 UPDATE delta set campo=$_POST[testo] where etc etc
Il problema e che in una pagina ci devono essere tanti campi editabili a
seconda delle colonne che mi stampa a schermo. Quindi puo capitare che a una
pagina mi servano 10 campi editabili e ad un'altra 30.
Con il form che mi hai postato mi esce sempre e solo un campo editabile.

}
Ti serve prima di tutto un array che dica al PHP cosa e' editabile e
cosa non lo e', perche', per quanto all'utente paia strano, il PHP a
tutt'oggi certe cose non le capisce da solo :-)
	$edit = array(
		'cognome'	=> 'TEXT',
		'nome'		=> 'HIDDEN',
		'indirizzo'	=> 'HIDDEN',
	);
Poi modifichi il tuo ciclo:
	while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
	{
		print <<< TESTATA
<HR SIZE=1 NOSHADE />
<FORM ACTION="POST" METHOD="$_SERVER[$PHP_SELF]">
<INPUT TYPE="HIDDEN" NAME="__cmd__" VALUE=1>
TESTATA;
		foreach($row as $key => $value)
		{
			if (!isset($edit[$key]))
			{
				print "<B>Errore, la chiave $key non e'
definita in \$edit.</B><BR/>";
			}
			else 
			{
				switch($edit[$key]))
				{
					case 'HIDDEN':
						print $value;
						break;
					case 'TEXT':
					case 'PASSWORD':
						break;
				}
				// Se VALUE contiene ", si ride
				print "<INPUT TYPE=\"$edit[$key]\"
NAME=\"$key\" VALUE=\"$value\">";
			}
			print "<BR/>";
		}
		print "</FORM>";
	}
In testa al file devi metterci un qualche sistema di aggiornamento:
	if (isset($_REQUEST['__cmd__']))
	{
		$SQL = 'UPDATE delta SET ';
		$WHERE = '';
		$cmmf = '';
		$cmmw = '';
		foreach($edit as $key => $editable)
		{
			if (!isset($_REQUEST[$key]))
			{
				// Inutile dare spiegazioni
				exit();
			}
			if ('HIDDEN' == $editable)
			{
				$WHERE .= $cmmw . $key . "='" .
AddSlashes($_REQUEST[$key]);
				$cmmw = ' AND ';
			}
			else
			{
				$SQL .= $cmmf . $key . "='" .
AddSlashes($_REQUEST[$key]);
				$cmmf = ', ';
			}
		}
		print "La query dovrebbe essere $SQL WHERE
$WHERE;<br/>";
	}
Leonardo

				switch($edit[$key]))
				switch($edit[$key])
Leonardo errata corrigens
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.