Newsgroup: it.comp.www.php
Titolo: form html non trasferisce a PHP

Ciao a tutti,
sono nuovo del gruppo e di PHP con cui sto facendo qualche
esperimento. Ho un problema di questo genere:
il codice che posto mi genera correttamente un form con campi testo.
Quando vado a inserire i dati il valore della stringa $sql è sempre
vuoto e, quindi, continuo a vedere lo steso form senza inserimento di
dati nel db.
Ho fatto un controllo e, infatti, i valori della stringa SQL sono
tutti vuoti.
Grazie in aniticipo a chi può aiutarmi
<HTML>
<?php
if($submit)
	{
	$db = mysql_connect("localhost", "root","");
	mysql_select_db("myVIA",$db);
	echo "connected\n";
	$sql = "INSERT INTO PROGETTO_DESCRIZIONE
(ID_PROCEDIMENTO,DESCRIZIONE,ID_OPERA,ID_INTERVENTO) VALUES
('$ID_PROCEDIMENTO','$DESCRIZIONE','$ID_OPERA','$ID_INTERVENTO')";
	$result = mysql_query($sql);
	if(!$result)
		{echo "connection failed";}
	else
		{echo " Information entered.\n";}
	}
else
	{
	?>
	<form method="post" action="inPROGETTO.php">
	CODICE PROCEDIMENTO:<input type="text" name="ID_PROCEDIMENTO"><br>
	DESCRIZIONE:<input type="text" name="DESCRIZIONE"><br>
	TIPO DI OPERA:<input type="text" name="ID_OPERA"><br>
	INTERVENTO:<input type="text" name="ID_INTERVENTO"><br>
	<input type="submit" name="submit" value="Enter information"></form>
	<?
	print "descrizione:$DESCRIZIONE";
	echo "input form";
	}
?>
</HTML>


Nella query usa, per esempio, $_POST[DESCRIZIONE] invece di
$DESCRIZIONE.
E' anche decisamente più sicuro.
(Comunque, questione di gusti personali, scrivi in minuscolo.)


Grazie, del consiglio e della celerità. Significa che dai campi del
form tiro fuori un array?


Funziona così.
Se passi dei dati col metodo POST, otterrai i dati in un array
denominato $_POST['nomecampo'],
se li passi tramite GET, allora l'array ottenuto sarà $_GET, quindi il
valore sarà $_GET['nomecampo'].
Altri array importanti sono $_SERVER (informazioni sul server e sulla
connessione col client), $_FILES (per il trasferimento dei file),
$_COOKIE e $_SESSION rispettivamente per cookie e sessioni.
Il tuo script utilizza una caratteristica chiamata register_globals,
utile per scrivere velocemente programmi pieni di bug di sicurezza.
Questa permette di usare $ciao al posto di $_POST['ciao'], ma questo
crea problemi perché $ciao corrisponde sia a $_POST['ciao'] che $_GET
['ciao'] o anche $_COOKIE['ciao'].
Appena ci si è accorti delle falle di sicurezza dovute a questa
funzionalità è stata lentamente tolta da PHP: Disattivata da PHP >
4.2, Deprecata su PHP5 e rimossa completamente da PHP6 (fonte:
http://it.php.net/manual/en/ini.core.php#ini.register-globals
).
Se non sono stato chiaro ti rimando ad un articolo su HTML.it:
http://it.php.net/manual/en/ini.core.php#ini.register-globals
Ciao.

 Se non sono stato chiaro ti rimando ad un articolo su HTML.it
chiarissimo, il problema è che ora ottengo un messaggio di errore del
tipo;
"Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/
inPROGETTO.php on line 8"
la linea 8 è la solita SQL:
$sql = "INSERT INTO PROGETTO_DESCRIZIONE
(ID_PROCEDIMENTO,DESCRIZIONE,ID_OPERA,ID_INTERVENTO) VALUES ($_POST
['ID_PROCEDIMENTO'],$_POST['DESCRIZIONE'],$_POST['ID_OPERA'],$_POST
['ID_INTERVENTO'])"
non mi sebra di avere lasciato spazi impropri.
grazie

 ['ID_INTERVENTO'])"
Cambia tutto cosi`:
$sql = "insert into progetto_descrizione (blablabla) values (";
$sql .= "'".mysql_real_escape_string($_POST['ID_PROCEDIMENTO'])."',";
$sql .= "'".mysql_real_escape_string($_POST['DESCRIZIONE'])."',";
$sql .= "'".mysql_real_escape_string($_POST['ID_OPERA'])."',";
$sql .= "'".mysql_real_escape_string($_POST['ID_INTERVENTO'])."'";
E butta via la guida che stai seguendo, come minimo e` aggiornata a 5 
anni fa e ti sta facendo scrivere codice insicuro, oltre che sbagliato.
Bye.

 $sql .= "'".mysql_real_escape_string($_POST['ID_INTERVENTO'])."'";
Inoltre dovrebbe essere sicuro al 100% che la $_POST['quellochetipare']
esista altrimenti si becca un bel warning sulla pagina (di solito gli
ISP hanno il verbosity di PHP su questo livello). Io i campi dei form
(sia in get che post) li passo prima ad un bel isset(). Forse una
precauzione di troppo..
saludos,
M.