Newsgroup: it.comp.www.php
Titolo: Passare dati tramite form

Salve,
premettendo che so fare pochino con php, ci sono un paio di problemi che non
riesco a risolvere.
Primo problema -
Ho un form di questo tipo:
<form action="<? print("
http://localhost/citta.php
"); ?>" method="get">
<select name="num" size="1">
<option value="1">Aosta</option>
<option value="27">Torino</option>
<option value="75">Milano</option>
...
</select>
<input type="submit" value="submit">
</form>
nel file citta.php vengono richiamati dei dati da un file di testo in questo
modo:
<?php
$city=file("citta.txt");
$city=explode("\t",$city[$num]);
?>
Quindi le pagine saranno del tipo 
http://localhost/citta.php?num=1
 ecc.
Domanda: e' possibile far apparire sulla barra degli indirizzi al posto del
numero il nome corrispettivo della citta'?
Secondo problema -
tornando al form, avevo pensato invece di specificare le option una per una
di scrivere qualcosa del genere:
<form action="<? print("
http://localhost/citta.php
"); ?>" method="get">
<select name="num" size="1">
<?php
$prov=file("localita.txt");
for($num=0;$num<=801;$num++)
print ("<option value=\"$num\">$prov[$num]</option>");
?>
</select>
<input type="submit" value="submit">
</form>
Senonche' si pone un problema: nel file localita.txt c'e' un elenco di
localita, ma il file e' gia' predisposto per delle aggiunte successive. Ci
sono quindi righe con il nome di una localita' reale intervallate con righe
in cui il nome della localita' e' "Unknown" (nel senso che c'e' proprio
scritto Unknown). Le localita' "Unknown" non dovrebbero comparire nel form.
Ho provato in vari modi ad ottenere quanto voluto ma non ci sono riuscito.
Qualcuno mi puo' dare una dritta?
Ringrazio in anticipo.
Max

 Qualcuno mi puo' dare una dritta?
<form action="
http://localhost/citta.php
" method="get">
<select name="num" size="1">
<?php
$prov=file("localita.txt");
for($num=0;$num<= count($prov); $num++)
if ($prov[$num] != "Unknown")
    print ("<option value=\"$num\">$prov[$num]</option>");
?>
</select>
<input type="submit" value="submit">
</form>
NOTA UNA COSA: se il file localita.txt č fatto cosě:
localita1
localita1
localita1

NOTA UNA COSA: se il file localita.txt è fatto così:
_________
localita1
localita1
localita1
...
_________
quando prendi $prov[0] questa non sarà esattamente localita1, ma ci sarà il
carattere di invio a capo dopo.
usa trim()
<?php
$prov=file("localita.txt");
for($num=0;$num<= count($prov); $num++)
if (trim($prov[$num]) != "Unknown")
    print ("<option value=\"$num\">trim($prov[$num])</option>");
?>
LAMASE

 capito bene, cosa deve fare questo programma (non come)
Il file citta.txt contiene dati che provengono da un file di excel quindi
separati da un carattere di tabulazione come nell'esempio seguente:
...
aosta    1    5    4    2    2
...
torino    5    7    9    5    2
...
milano    2    2    5    3    3
...
ecc.
Nel file citta.php inserisco questo script <?php
$city=file("citta.txt");
$city=explode("\t",$city[$num]);
?>
alla cui elemento dell'array $city viene passato il valore $num  dal form
seguente:
<form action="
http://127.0.0.1/citta.php
" method="get">
<select name="num" size="1">
<?php
prov=file("localita.txt");
for($num=0;$num<=801; $num++)
if (trim($prov[$num]) != "Unknown")
    print ("<option value=\"$num\">$prov[$num]</option>");
?>
</select>
<input type="submit" value="submit">
</form>
In pratica il numero passato corrisponde alla riga (-1) del file di testo
riferita alla localita' di cui voglio visualizzare i dati.
Questo numero appare pero' anche nella barra degli indirizzi, se sul form
clicko su Aosta, nella barra dell'indirizzo della pagina richiamata viene
visualizzato citta.php?num=1.
Io vorrei che il numero 1 venisse passato come valore dell'elemento
dell'array $city[$num], ma che sulla barra dell'indirizzo apparisse al suo
posto il nome della citta' corrispondente. E' possibile?
Grazie.
Max

 usa trim()
Ti ringrazio moltissimo. In effetti il problema era proprio quello.
Max

posto il nome della citta' corrispondente. E' possibile?
print "<TITLE>$city[$num]</TITLE>";
Se non metti TITLE, Explorer (o chi ne fa le feci) usa l'URL come titolo.
Leonardo
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.

 Se non metti TITLE, Explorer (o chi ne fa le feci) usa l'URL come titolo.
No, forse mi sono spiegato male, non mi riferivo al <title>, mi riferivo
proprio all'indirizzo, ma credo
che non sia possibile fare quello che avevo in testa. Usero' il metod="post"
come formato di invio del form in modo da visualizzare solo il nome del file
senza il numero di variabile.
Grazie cmq
Max
lucamax{*ola}
libero.it

 senza il numero di variabile.
Come mai questa richiesta? É solo una questione estetica o qualcos'altro?
LAMASE

 Come mai questa richiesta? É solo una questione estetica o qualcos'altro?
Piu' che altro estetica, anche se poteva essere utile per gli utenti poter
digitare direttamente nella barra dell'url il nome della citta'.
Max
lucamax{*ola}
libero.it

 digitare direttamente nella barra dell'url il nome della citta'.
beh, nessuno te lo vieta: invece che il numero di riga passi il nome della
città: l'unico inconveniente è che poi devi leggerti il file e cercare la
riga corrispondente
LAMASE

 riga corrispondente
Forse me lo vieta il fatto che al momento non lo so fare :-))
per questo ho chiesto aiuto sul ng.
Max
lucamax{*ola}
libero.it


Beh, non è difficile: immaginiamo che il tuo file ("nomefile.txt") sia fatto
così:
Nomecittà1[separatore]altrocampo...
Nomecittà2[separatore]altrocampo...
Nomecittà3[separatore]altrocampo...
Nomecittà4[separatore]altrocampo...
Avendo il nome di una città devi cercarlo:
$file = file("nomefile.txt");
for ($loop = 0; $loop < count($file); $loop++)
{
    $parti = explode("[separatore]",$file[$loop]);
    if ($parti[0] == $cittàdatrovare) echo "trovata alla riga ".$loop;
}
LAMASE