Newsgroup: it.comp.www.php
Titolo: ottenere valore casella di testo con nome variabile

Ciao a tutti!
stavo cercando di effettuare un'operazione non semplice, per questo 
chiedo gentilmente il vostro aiuto!
in un database ho i campi: "nome","valore".
con un ciclo while ho stampato a video tante caselle di testo quanti 
sono i record..ogni casella di testo si chiama come la stringa 
contenuta nel campo "nome", e come value vi è la stringa del 
campo "valore"..chiaro?
così facendo riporto i valori esistenti a video, chiamo le caselle non 
in modo fisso ma variabile, dando la possibilità all'utente di 
modificarli!
ora..
tramite un bottone apro un'altra pagina in cui dovrei fare (ed è qui il 
mio problema!!): lo stesso ciclo while all'interno del database, in cui 
associo $variabile=$."nome" (non sapendo a priori il nome della casella 
di testo, dovrei concatenare a $ la stringa del campo "nome", formando 
così il nome della casella di testo della form precedente!!!!!)
avete capito il ragionamento contorto?? (che in teoria dovrebbe 
funzionare ma che non riesco a fare???)
spero sia chiaro, e soprattutto che sappiate consigliarmi..
grazie moltissime anticipatamente!
baci, Cri

 modificarli!
non mi è chiaro perchè dai nomi variabili ai campi di testo
l'utente dovrebbe modificare il contenuto e non certo il nome del campo
ciao frasca


Se ho capito bene.
Attento che se fai così nel form, se ci sono le " nel valore, potrebbe
essere soggetto a HTML injection.
Comunque non ho capito come mai ti fai questi problemi: puoi
estrapolarti dal database il vecchio valore che andrà rimpiazzato e
usare quello per sostituirli (ipotizzando che $vecchio sia il vecchio
nome da sostituire).Ti faccio un esempio:
(il programma delle volte va a capo, ma non c'è effettivamente una nuova
riga).
<form name="form1" method="POST" action="script2.php">
<input type="text" name="nome-pippo" value="pippo2" />
<input type="text" name="valore-pluto" value="pluto2" />
<input type="text" name="nome-topolino" value="topolino2" />
<input type="text" name="valore-paperino" value="paperino2" />
<input type="submit" value="OK" />
</form>
<!-- dal lato della pagina web -->
<?
# Questo nel secondo script (quello che riceve il form)
# Presupponendo che non sappiamo che la stringa sia pippo
# ma la abbiamo nel db: la estrapoliamo
$mysql = mysql_connect("localhost", "root", "");
mysql_select_db("database");
$ris = mysql_query("SELECT nome,valore FROM tabella");
while($riga = mysql_fetch_array($ris, MYSQL_ASSOC)) {
  $vecchionome[] = $riga["nome"];
  $vecchiovalore[] = $riga["valore"];
}
foreach($_POST as $chiave => $valore) {
  # $chiave è il nome della casella
  # $valore è il valore della casella
  # se $chiave contiene nome- (quindi è
  # una casella nome-
  # altrimenti esegue il secondo pezzo di codice (sotto)
  if(eregi("nome-", $chiave)) {
     $chiave = explode("-", $chiave, 1); # divido $chiave in due
                                         # $chiave[0] è "nome"
                                         # $chiave[1] è il vecchio nome
     mysql_query("UPDATE nometabella SET nome=".$valore." WHERE nome=
\"".$chiave[1]."\""); # aggiorno il db
  }
  elseif(eregi("valore-", $chiave)) {
     $chiave = explode("-", $chiave, 1); # divido $chiave in due
                                         # $chiave[0] è "valore"
                                         # $chiave[1] è il vecchio
                                         #                 valore
     mysql_query("UPDATE nometabella SET valore=".$valore." WHERE
valore=\"".$chiave[1]."\""); # aggiorno il db
  }
}
?>
Spero di essere stato abbastanza chiaro. Copia e incolla lo script su un
editor che colora la sintassi così riesci a capire meglio ;-)
Enrico

Il perchè dei nomi variabili alle caselle di testo non per 
autosuicidarmi, ma perchè non sò a priori con esattezza quante caselle di 
testo avrò!
(qui entrano in ballo alcuni controlli, se il "valore" è di un certo tipo 
avrò un combobox, oppure se compreso fra avrò 2 caselle di testo DA A 
etc..)
Siccome per ogni record il campo "nome" è sempre univoco e nominativo, ho 
optato per questa soluzione, ossia che nella form all'interno del ciclo 
while nomino la casella come la stringa univoca all'interno del 
campo "nome"..
Enrico ho letto la tua rispostae ci sto provando, ma non demordo nel 
chiedere questo:
- ho una casella di testo che si chiama ad esempio $nomecli (ma di cui 
non conosco il nome!!);
- ho la stringa $stringa che contiene "nomecli" (ossia il nome della mia 
casella di testo, ricavata dal while);
come faccio a concatenare $ e $stringa in modo che componga $nomecli a 
cui fare riferimento (agli occhi del php) ed io possa sapere il valore 
della casella di testo $nomecli ???
grazie...

 della casella di testo $nomecli ???
Vedi se è quello che ti serve, non ho capito cosa intendi però ci provo:
$stringa = "nomecli";
echo $$stringa;
questo echo in realtà stampa il contenuto della variabile $nomecli,
perché il nome della variabile lo ha preso dalla variabile $stringa.
Se hai direttamente in PHP le variabili del form, senza passare per
$_GET, $_POST o simili, stai attento che può essere pericoloso, e molti
web hosting provider non lo attivano per questo.
Enrico

web hosting provider non lo attivano per questo.
Enrico perfetto sei riuscito a capirmi!!
Ed infatti così funziona non mi era venuto in mente di usare 
$$stringa!!!!!
ma visto che ci siamo:
perchè pericoloso? all'inizio della seconda form ho fatto un include 
della pagina precedente, così che possa far riferimento alle variabili 
direttamente, senza GET o POST!
questo è dannoso?
grazie 1000!

 
Ti conviene sempre usare $_GET e $_POST, mai in modo predefinito creare
variabili direttamente con i valori passati dal browser, perché
potrebbero sfruttare in qualche modo questo a tuo svantaggio.
L'eventualità è abbastanza remota, ma mai dire mai.
Confronta sempre i risultati. Se è un numero, usa intval();
Usa le funzioni di sostituzione per gli apici (per evitare SQL o HTML
Injection), meglio se li elimini se non ti servono.
Enrico