Newsgroup: it.comp.www.php
Titolo: Ancora parse error...

Che significa?
---------------------------------
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in
c:\programmi\easyphp\www\newww\form.php on line 9
---------------------------------
E qui riporto la riga 9
---------------------------------
if (mysql_query("insert into nomi
values('".$_POST['nome']".','".$_POST['cognome']."')")
---------------------------------
Listato completo
---------------------------------
<?
$db_host="localhost";
$db_name="ricman";
$db_user="root";
$db_pass="";
mysql_connect($db_host,$db_user,$db_pass) or die("Impossibile connettersi al
server MySQL.");
mysql_select_db($db_name,$conn) or die("Impossibile connettersi al database
$db_name.<br>");
if (mysql_query("insert into nomi
values('".$_POST['nome']".','".$_POST['cognome']."')")
   or die ("Non riesco ad eseguire la query $dati"))
{echo "I dati sono stati archiviati con successo nel Database $database";}
else
{echo "Impossibile archiviare i dati nel database";}
echo "<meta http-equiv=\"refresh\" content=\"3;url=".$PATH_INFO."\">";
?>
<html>
<head>
       <meta name=Proprietà content=Apache3000>
       <meta name=ProgID content=PHP Pratico>
       <title> Form per la Rubrica</title>
</head>
 <body>
 <table border=0 width=100% cellpadding=3>
 <tr>
 <td width=100% colspan=2>
 <p align=center><b>Inserisci nuovi recapiti nella rubrica
 <form method=POST action= <? $PHP_SELF ?>>
 </b></td>
 </tr>
 <tr>
 <td width=18%><b>Nome</b></td>
 <td width=82%><input type=text name=nome size=20></td>
 </tr>
 <tr>
 <td width=18%><b>Cognome</b></td>
 <td width=82%><input type=text name=cognome size=20></td>
 </tr>
 </table>
 </body>
 </html>
---------------------------------

 ---------------------------------
if (mysql_query("insert into nomi
values('".$_POST['nome']."','".$_POST['cognome']."')")
occhio ai ." e ".
se non riesci ad abituarti, puoi usare
$query="inizio query ";
$query.=$variabile;
$query.=" ecc.";
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.gnu.org/philosophy/shouldbefree.html

> if (mysql_query("insert into nomi
values('".$_POST['nome']".','".$_POST['cognome']."')")
C'è un doppio apice nel posto sbagliato:
if (mysql_query("insert into nomi values( ' " . $_POST['nome'] . " ' ,' " .
$_POST['cognome'] . " ' ) " )
poi, non dovresti specificare i nomi dei campi in cui vai a scrivere? La
sintassi corretta della query SQL dovrebbe essere:
INSERT INTO nomi (nome, cognome) VALUES ( ' " . $_POST['nome'] . " ' ,' " .
$_POST['cognome'] . " ' )
CIaO!
Stefano

 > values('".$_POST['nome']".','".$_POST['cognome']."')")
Io la farei cosě...
values('$_POST[nome]','$_POST[cognome]')

 values('$_POST[nome]','$_POST[cognome]')
Giusto, se si voleva evitare che il php facesse il parsing della stringa
allora doveva essere:
if ( mysql_query( 'insert into nomi values(
\''.$_POST['nome'].'\',\''.$_POST['cognome'].'\' )' ) ){
    // codice da eseguire
}
mancava anche una parentesi
Ciao

 values('$_POST[nome]','$_POST[cognome]')
E sarebbe sbagliata, gli indici degli arrays, quando non sono numerici,
devono essere racchiusi tra apici...

> poi, non dovresti specificare i nomi dei campi in cui vai a scrivere?
Beh, se la query deve riempire tutti i campi del record, non è necessario
specificare i nomi dei campi, ma solo il valore da inserire...

 specificare i nomi dei campi, ma solo il valore da inserire...
Si, questo lo so. Ma č una pratica alquanto sconsigliata: se modifico la
tabella aggiungendo un campo, devo modificare anche la query. Non mi sembra
un approccio molto furbo.
--
Stefano Vita Finzi Zalman
ho...@despammed.com

 Ciao
ad escaparti gli apicini fai ancora + casini, comunque 1 a 0 per la 
parentesi che non avevo proprio visto...
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.gnu.org/philosophy/free-software-for-freedom.it.html

 ha scritto nel messaggio
news:Ue%e9.72580$ub2.1...@news1.tin.it...

funziona regolarmente almeno sotto linux, anche se in teoria non sarebbe
corretta, infatti sotto windows ti segnala una costante non definita o
qualcosa del genere
Ciao

 sembra un approccio molto furbo.
giusto, esattamente come 'select *'...
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.gnu.org/gnu/manifesto.it.html


Precisiamo con un estratto dal manuale PHP:
-----
You should always use quotes around an associative array index. For example,
use $foo['bar'] and not $foo[bar]. But why is $foo[bar] wrong? You might
have seen the following syntax in old scripts:
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
This is wrong, but it works. Then, why is it wrong? The reason is that this
code has an undefined constant (bar) rather than a string ('bar' - notice
the quotes), and PHP may in future define constants which, unfortunately for
your code, have the same name. It works, because the undefined constant gets
converted to a string of the same name.
-----
Ovviamente il fatto che su linux io non abbia nessun warning dipende dal
livello di  errore impostato nel php.ini
Ciao


Si è vero diventa facilmente illeggibile, nemmeno io ci avevo fatto caso
alla parentesi ci ho fatto caso escapando gli apicini.
Ciao

 Punkarruso
Se vai a modificare la struttura della tabella aggiungendo dei campi tutte
le insert fatte in quel modo falliscono, le 'select *..', i delete e gli
update continuano a funzionare.
Ciao

 update continuano a funzionare.
ci sono due motivi validissimi per evitare le select *.
(parto dal presupposto che ti servano TUTTI i records della tabella, 
altrimenti fai già danni di IO)
1 . a livello di lettura del codice:
<?
$result=mysql_query("select * from pippuzzo");
while($riga=mysql_fetch_row($result))
        echo $riga[2].":".$riga[1].":".$riga[0];
?>
è meno comprensibile di:
<?
$result=mysql_query("select anno,nome,cognome from pippuzzo");
while($riga=mysql_fetch_row($result))
        echo $riga[2].":".$riga[1].":".$riga[0];
?>
per il semplice fatto che VEDI cosa selezioni e non devi debuggare il 
codice con la struttura della tabella sottomano.
2 . se sviluppi un programma e i clients si connettono tutti sullo stesso 
db, se vuoi creare una release successiva aggiungento un campo opzionale, 
rischi di segarti le gambe e di dover distribuire le patches ai clienti per 
non far impiantare la loro release che non aveva previsto il campo nuovo 
(se lo trova nel resultset)...
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.gnu.org/gnu/why-gnu-linux.it.html

 ha scritto nel messaggio
news:Ev0f9.589$6O4....@twister1.libero.it...

Sul punto 1 hai ragione anche in relazione ad un db remoto, facendo così
eviti magari di trasferire inutilmente i dati dei campi che non ti servono
in quella query particolare, per il punto 2 non mi è chiaro perchè un
programma che non conosce un campo si dovrebbe piantare facendo select *, in
teoria dovrebbe semplicemente ignorarlo, ma questo comunque dipende
dall'architettura del programma. Comunque la mia osservazione riguardava
l'esecuzione della query fine a se stessa e non gli eventuali effetti
collaterali sul programma, cioè una select * non fallirà mai come query
indipendentemente dal fatto che tu aggiunga o tolga dei campi (salvo il caso
in cui il campo che togli faccia parte della clausola WHERE).
Ciao


Ho modificato come dicevi.
Ora mi da' questo errore...
----------------------------
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link
resource in c:\programmi\easyphp\www\newww\form.php on line 7
Impossibile connettersi al database ricman.
----------------------------
Possibile? Che c'entra?
Riga 7:
----------------------------
mysql_select_db($db_name,$conn) or die("Impossibile connettersi al database
$db_name.<br>");
----------------------------
----------------------------
<?
$db_host="localhost";
$db_name="ricman";
$db_user="root";
$db_pass="";
mysql_connect($db_host,$db_user,$db_pass) or die("Impossibile connettersi al
server MySQL.");
mysql_select_db($db_name,$conn) or die("Impossibile connettersi al database
$db_name.<br>");
if (mysql_query("insert into nomi
values('".$_POST['nome']."','".$_POST['cognome']."')")
   or die ("Non riesco ad eseguire la query $dati"))
{echo "I dati sono stati archiviati con successo nel Database $database";}
else
{echo "Impossibile archiviare i dati nel database";}
echo "<meta http-equiv=\"refresh\" content=\"3;url=".$PATH_INFO."\">";
?>
<html>
<head>
       <meta name=Proprietą content=Apache3000>


 caso in cui il campo che togli faccia parte della clausola WHERE).
sisi, hai ragione.
è solo una questione di pulizia (e di prevenzione in casi estremi)... o di 
bellezza del codice, se ci tieni di + (un make-up ogni tanto non fa male).
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://simson.net/clips/98.Globe.05-07.Read_them_and_weep.htm

    or die ("Non riesco ad eseguire la query $dati"))
qui perché dopo il die chiudi 2 parentesi?? una va chiusa prima dell'or.
che casino quotare sto post!
:-)
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.gnu.org/philosophy/free-world.html

 > qualcosa del genere
Supponiamo di avere error_reporting  =  E_ALL.
Produce warning o notice (non ricordo bene) nel caso non siano all'interno
delle virgolette.
echo "$_SERVER[HTTP_HOST]"; // ok
echo $_SERVER[HTTP_HOST]; // messaggio di errore
echo $_SERVER['HTTP_HOST']; // ok
Io ho messo solo il pezzo della query da modificare.. e quindi in effetti se
si guarda solo quello produrrebbe un errore...
values('$_POST[nome]','$_POST[cognome]')
ma se la mettiamo intera...
mysql_query("insert into nomi (nome, cognome) values
('$_POST[nome]','$_POST[cognome]')")
non produce nessun messaggio di errore visto che è all'interno delle
virgolette doppie.

 (conta un po'??)
Allora....non ci sto più capendo un cacchio!!!!
Ho provato a ritoccare il codice in vari modi. Il problema adesso è che
quando il vado sulla pagina **form.php**, pagina che ogni 3 secondi mi
dovrebbe inserire i dati che trova nei campi nell'apposita tabella **nomi**
(nome, cognome), non ho più messaggi di errore. Sembra che tutto funzioni
bene (si "vede" il refresh e i dati "spariscono" dai due campi di testo).
PERO' quando vado a visualizzare il contenuto della tabella trovo SOLO dei
CAMPI VUOTI.
form.php
-----------------------------
<?
$db_host="localhost";
$db_name="ricman";
$db_user="root";
$db_pass="";
$conn=mysql_connect($db_host,$db_user,$db_pass) or die("Impossibile
connettersi al server MySQL.");
mysql_select_db($db_name,$conn) or die("Impossibile connettersi al database
$db_name.<br>");
if (mysql_query("insert into nomi
values('".$_POST['nome']."','".$_POST['cognome']."')")
   or die ("Non riesco ad eseguire la query $dati"))
{echo "I dati sono stati archiviati con successo nel Database $database";}
else
{echo "Impossibile archiviare i dati nel database";}
{echo "<meta http-equiv=\"refresh\" content=\"3;url=".$PATH_INFO."\">";}
?>
<html>
<head>
       <meta name=Proprietà content=Apache3000>
       <meta name=ProgID content=PHP Pratico>
       <title> Form per la Rubrica</title>
</head>
 <body>
 <table border=0 width=100% cellpadding=3>
 <tr>
 <td width=100% colspan=2>
 <p align=center><b>Inserisci nuovi recapiti nella rubrica
 <form method=POST action= <? $PHP_SELF ?>>
 </b></td>
 </tr>
 <tr>
 <td width=18%><b>Nome</b></td>
 <td width=82%><input type=text name=nome size=20></td>
 </tr>
 <tr>
 <td width=18%><b>Cognome</b></td>
 <td width=82%><input type=text name=cognome size=20></td>
 </tr>
 </table>
 </body>
 </html>
-----------------------------

"~RicMan~" <ale...@XXiol.it> ha scritto nel messaggio
news:ali6cb$pck$1...@fe2.cs.interbusiness.it...

Forse se assegni il risultato della mysql_connect a $conn potrebbe anche
funzionare:
$conn = mysql_connect($db_host,$db_user,$db_pass);
Ciao

 SOLO dei CAMPI VUOTI.
 <?
 $db_host="localhost";
 $db_name="ricman";
 $db_user="root";
 $db_pass="";
 $conn=mysql_connect($db_host,$db_user,$db_pass) or die("Impossibile
 connettersi al server MySQL.");
 mysql_select_db($db_name,$conn) or die("Impossibile connettersi al
 database $db_name.<br>");
 
 mysql_query("insert into nomi
 values('".$_POST['nome']."','".$_POST['cognome']."')")
    or die ("Non riesco ad eseguire la query $dati");
//se fai il die il blocco if non ti serve +
 echo "I dati sono stati archiviati con successo nel Database $database";
// else
//questo non veniva mai raggiunto, se funzionava la tua sintassi
 //{echo "Impossibile archiviare i dati nel database";}
 
 echo "<meta http-equiv=\"refresh\" content=\"3;url=".$PATH_INFO."\">";
 ?>
 
 <html>
 <head>
        <meta name=Proprietà content=Apache3000>
        <meta name=ProgID content=PHP Pratico>
        <title> Form per la Rubrica</title>
 </head>
  <body>
  <table border=0 width=100% cellpadding=3>
  <tr>
  <td width=100% colspan=2>
  <p align=center><b>Inserisci nuovi recapiti nella rubrica
  <form method=POST action= <? $PHP_SELF ?>>
<?//se dài un occhio al codice HTML generato l'action è stampato 
correttamente?  (non penzo)
?>
  </b></td>
  </tr>
  <tr>
  <td width=18%><b>Nome</b></td>
  <td width=82%><input type=text name=nome size=20></td>
  </tr>
  <tr>
  <td width=18%><b>Cognome</b></td>
  <td width=82%><input type=text name=cognome size=20></td>
  </tr>
  </table>
  </body>
  </html>
la submit non gliela dai??
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://www.php.net

 CAMPI VUOTI.
Ovvio tu fai un refresh della pagina mica un POST, l'array $_POST quando fai
il refresh è vuoto
Ciao

 la submit non gliela dai??
Già!! "Magicamente" con la submit invece di riempire di bianco inserisce nel
db ciò che scrivo.
Naturalmente dopo aver fatto le opportune modifiche che mi avete consigliato
tutti quanti....
Vi ringrazio. Sto iniziando a capire qualcosina in più!!