Newsgroup: it.comp.www.php
Titolo: stringa con spazio

Ciao a tutti.
Mi occupo di una piccola rete aziendale e, a fatica, sto cercando di
convincere
i Capoccia a integrare Linux in azienda. 
Per adesso sto mettendo su una intranet in NT con Apache, PHP e MySql ,
litigando,un giorno sě e uno anche, con un mio collega win-asp-iis
dipendente.
Nella creazione di un elenco telefonico centralizzato, ispirandomi ad un
tutorial apparso tempo fa su Apache3000 ( a proposito, qualcuno sa dove
sia finito?)ho trovato un problema che magari qualcuno di voi sa come
risolvere velocemente:
ricavo i dati da una tabella in cui il campo nome contiene sia il nome che
il cognome dell\'utente, separati da uno spazio.
Visualizzando il risultato con echo vedo tranquillamente sia il nome che
il cognome, inserendoli in una text imput hidden, mi viene troncato il
cognome e quindi diventa inutilizzabile nei passi seguenti.
La stessa cosa avviene per il campo cellulare, se il numero inserito
contiene uno spazio(335 3333333).
Come mai?  ------> Uno stralcio:
echo \"<tr><td width=50%><b><br>\";
echo \"<font color=\\\"#389094\\\" face=\\\"Verdana\\\"
size=\\\"4\\\">\".$row[\"nome\"].\"</font><br>\";   **** vedo il nome
completo 
<form method=\\\"POST\\\" action=$PATH_INFO?link=avviso>
<input type=\\\"text\\\" name=\\\"id\\\"  value=\".$row[\"id_user\"].\">\".
\"<input type=\\\"hidden\\\" name=\\\"Nome\\\"
value=\".$row[\"nome\"].\">\".
*********   vedo solo il nome
Bye e grazie

*********   vedo solo il nome
Beh, mi sembra che nel codice che hai postato siano finiti eccessivi
escape... Comunque l'errore che descrivi nasce dal fatto di non aver
inserito tra apici il valore di un attributo di un tag. È un problema
html, non dipende da php (il che ti discolpa agli occhi del tuo
collega... O meglio: discolpa PHP!!)
Per l'esattezza, dovresti fare:
echo "[...] <input type=\"hidden\" name=\"Nome\"
value=\"".$row[nome]."\">";
Nota bene: posto $row[nome] = "abc def", il codice parsato diventa: 
   <input type="hidden" name="Nome" value="abc def">
Il valore dell'attributo value è tra apici e quindi il browser sa
esattamente dove inizia e dove finisce. In caso contrario, per il
browser uno spazio equivale a fine dell'attributo:
1. <input type="hidden" value="123">
2. <input type="hidden" value=123>
3. <input type="hidden" value="456 789">
4. <input type="hidden" value=456 789>
1 e 2 funzionano entrambi, sia mettendo il valore dell'attribut tra
apici (come è corretto) sia senza apici.
Invece in 3 e 4, l'attributo contiene uno spazio: per cui 3 funziona,
mentre con 4 il browser prenderà come valore solo 123 e lascerà
perdere 789, non sapendo cosa sia.
Usando PHP, per non diventare matti con gli escape, puoi semplicemente
usare i singoli apici:
echo "[...] <input type='hidden' name='Nome' value='".$row[nome]."'>";
Matteo

 Matteo
Grazie dell'aiuto,Matteo!
In verita'il codice che hai visto non e' quello effettivo, non so come mai
si siano aggiuti tanti escape, forse nel copia incolla?
Nella rielaborazione del server News?
Questo e'il codice come l'avevo scritto io (se non si stravolge
nuovamente!):
<input type=\"hidden\" name=\"id\" value=".$row["id_user"].">".
******spelling: type uguale slash apici hidden slash apici  ;-)*******
.. esattamente come hai spiegato nel primo esempio.
La differenza tra il tuo esempio e il mio script e' quindi questa:
tuo  value=\"".$row[nome]."\">";
mio  value=".$row["nome"].">".
******spelling: value uguale apici .$Row [apici nome apici]. apici tag
apici  ;-)*******
ovvero io ho non ho inserito i gli escape e ho messo gli apici all'interno
delle parentesi quadre.
E... vuoi sapere il bello?
Stamattina ho ripreso la prima bozza del listato(nel frattempo, infatti,
avevo perso le modifiche del giorno prima),l'ho modificata come ieri per
poi correggerlo secondo i tuoi consigli e funzionava gia'.
Comunque la tua spiegazione mi ha chiarito molte cose e, probabilmente,
seguiro' il tuo consiglio di usare qli apici singoli: la leggibilita'
migliora parecchio.
Bye e grazie ancora
                  Maurizio

value=\".$row[\"nome\"].\">\".
Meglio:
	print <<< PIPPO
<TR><TD WIDTH="50%">
<BR>
<B><FONT COLOR="#389094" FACE="Verdana" SIZE=4>$row[nome]</FONT></B>
<BR>
PIPPO;
	print <<< FORM
<FORM METHOD="POST" ACTION="$PHP_SELF">
<INPUT TYPE="HIDDEN" NAME="link" VALUE="avviso">
<INPUT TYPE="HIDDEN" NAME="Nome" VALUE="$row[nome]">
<INPUT TYPE="TEXT" NAME="id" VALUE="$row[id_user]">
FORM;
...e anche cosi', se il nome contenesse un doppio apice... :-)
(pero' puoi usare UrlEncode).
Leonardo


Solo un suggerimento: perche' non integrare tutto con phprogect?
www.phproject.de
E' un ambiente integrato che ha elenco telefonico, chat, forum, gestione 
progetti e calendario...
Ciao,
Angelo

 Angelo
Vado subito a vedere il sito , anche se, voglio centralizzare tutto in un
db su MySql che gestisca l'intero sistema informativo aziendale.
La struttura del db è già approntata, devo implementare la parte web/php.
Ciao
Maurizio