Newsgroup: it.comp.www.php
Titolo: Domanda da super principiante

Mi immagino che per molti di voi sia una grossa sciocchezza risolvere il
problema , ma essendo agli inizi mi sono veramente arenato su questo
problema , i due file sono stati prelevati da un cd allegato ad un libro e
non capisco perchè sul mio pc non funzionino ,( non voglio pensare che ci
sia un errore sul libro ) ma date le mie scarse conoscenza non riesco a
risolvere il problema , qualcuno può essere cos' gentile da spiegarmi il
perchè ?
Grazie ciao Marco
FILE GRADI.PHP
<?php //gradi.php
if ((($c0=="") && ($f0=="")) || (($c0!="") && ($f0!="")))
  {
  echo "ERRORE!";
  }
  else
  {
  if ($c0!="")
    {
    echo "Gradi Fahrenheit=".(9*$c0+160)/5;
    }
  if ($f0!="")
    {
    echo "Gradi Celsius =".($f0-32)*5/9;
    }
  }
?>
FILE TEXT.HTML
<?php //gradi.php
if ((($c0=="") && ($f0=="")) || (($c0!="") && ($f0!="")))
  {
  echo "ERRORE!";
  }
  else
  {
  if ($c0!="")
    {
    echo "Gradi Fahrenheit=".(9*$c0+160)/5;
    }
  if ($f0!="")
    {
    echo "Gradi Celsius =".($f0-32)*5/9;
    }
  }
?>
problema è che al click sul pulsante OK mi viene fuori questi errori
Notice: Undefined variable: c0 in C:\www\libro\gradi.php on line 2
Notice: Undefined variable: f0 in C:\www\libro\gradi.php on line 2
ERRORE!
Grazie ,e ciao
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Notice: Undefined variable: f0 in C:\www\libro\gradi.php on line 2
Se con il click sul pulsante OK esegui il submit di un form con cui
passi i parametri c0 e f0, allora è probabile che il libro usi la
direttiva register_globals = On, mentre tu, giustamente, hai
register_globals = Off. Per recuperare i dati provenienti da un form
usa *sempre* gli array superglobal $_GET o $_POST (a seconda dei
casi). Inoltre, per verificare l'esistenza di un parametro, usa la
funzione isset($parametro) e non $parametro == '', perché in
quest'ultimo modo se $parametro non esistesse si solleverebbe un
Notice.
Ulteriori informazioni:
http://www.php.net/manual/en/language.variables.external.php
http://it2.php.net/manual/en/security.globals.php
http://it2.php.net/isset
Ciao.
-- 
Federico

<?php //gradi.php
	$mievar = explode(',',  'c0,f0'  );
	foreach($mievar as $miavar)
		$$var = isset($_REQUEST[$miavar])?$_REQUEST[$miavar]:'';
Puoi riciclare queste tre righe nei vari script sostituendo l'elenco di
variabili usate da ciascuno.
Leonardo
-- 
There is nothing makes a man suspect much, more than to know little,
and therefore men should remedy suspicion by procuring to know more,
and not keep their suspicions in smother.            (Francis Bacon)


--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 quindi abbastanza in difficoltà , scusate di nuovo , e grazie
La risposta piu` semplice (e corretta) e` quella di Federico.
Usa $_GET["c0"] al posto di $c0, e $_GET["f0"] al posto di $f0
Questo se nel tuo form hai scritto
<form method="get" ...>
Se invece hai <form method="post"> devi usare $_POST["c0"] e $_POST["f0"]
Dopodiche`, prendi quel libro e mettilo a fianco del caminetto. Potrai 
usarlo il prossimo inverno per accendere il fuoco. E` forse l'uso migliore 
che puoi farne. :)
Se vuoi sapere perche`, cerca su google gruppi tutte le discussioni su 
questo newsgroup che contengono la parola "register_globals"
Bye.
P.S.: La risposta di Leonardo va bene se persisti a seguire quel libro, ma 
ti avviso che se continui a farlo imparerai a programmare male.


Grazie per la risposta , ma a questo punto mi sorge spontanea una domanda e
se volessi imparare a programmare "bene " che strada dovrei percorrere ?
pensavo che un libro fosse la migliore , e tu cosa proponi ??
grazie
PS: tieni presente che non ho nessun amico " a portata di mano "" quindi
consultabile a voce che possa insegnarmi , quindi dovrò fare tutto da solo ,
da considerare anche che fdaccio un'altro lavoro, e il tempo è quello che è
, e che php è solo un hobby


 quello che è , e che php è solo un hobby
Sul sito 
www.php.net
 c'e` il manuale ufficiale. Se conosci bene l'inglese, 
leggi quello inglese, che e` piu` aggiornato. Se conosci l'inglese ma non 
tanto bene, leggi comunque quello in inglese, cosi` impari meglio sia la 
lingua che il linguaggio. Se proprio non sai niente di inglese, c'e` la 
tradizione italiana, ma spesso e` un po' indietro (o alcune parti non sono 
tradotte) rispetto all'originale.
Poi, questo newsgroup e` fatto apposta per darsi una mano a vicenda, se le 
domande sono poste nel modo giusto (e con questo non intendo che tu 
l'abbia posta nel modo sbagliato, anzi).
In pratica, io ce l'ho col libro che stai usando, non con te. ;)
Bye.

 Bye.



ti ringrazio, ma protresti essere così gentile da scrivermi almeno un
pezzetto di codice con ciò che mi spiegato ? in modo che possa vedere in
pratica cosa intendi ? sono nel panico + totale
Grazie



un ultima cosa ( per il momento ) comincio con PHP 4 o PHP 5 ??
grazie
ps: se sono un pò rompi dillo No problem


 vedere in pratica cosa intendi ? sono nel panico + totale
Il file gradi.php riceve i due parametri c0 e f0 da un form. Per
usarli [1] devi usare o l'array $_GET o l'array $_POST, a seconda del
metodo usato nel form che li invia, appunto get o post. Per scoprire
qual è devi guardare il valore dell'attributo method del tag <form>.
Se tale attributo non ci fosse, allora il metodo dovrebbe essere
quello di default, cioè get.
[1] In realtà, potresti evitare di usare gli array superglobal,
impostando (nel file php.ini) la direttiva register_globals a On
(impostazione che l'autore del libro dà per scontata). Tuttavia, io
ti consiglio di lasciare register_globals = Off. I motivi sono
diversi e li puoi trovare all'indirizzo
http://it2.php.net/manual/en/security.globals.php
.
Non sapendo il metodo che hai usato, lo scelgo io: post. Se poi non
fosse così dovrai sostituire tutti i $_POST con $_GET.
Per recuperare i parametri passati, quindi, non devi usare
direttamente $c0 e $f0, ma $_POST['c0'] e $_POST['f0']. Inoltre, per
verificarne l'esistenza o meno è opportuno usare la funzione isset().
Vedi 
http://www.php.net/isset
.
Il tuo controllo (salvo errori) si può riscrivere in questo modo (ci
vorrebbe anche il controllo sul tipo di parametro, visto che ti
aspetti un numero e non una stringa):
 <?php
 $esiste_c0 = (isset($_POST['c0']) && trim($_POST['c0']) != '');
 $esiste_f0 = (isset($_POST['f0']) && trim($_POST['f0']) != '');
 if ($esiste_c0 && !$esiste_f0) {
     echo 'Gradi Fahrenheit = '.(9*$_POST['c0']+160)/5;
 } elseif (!$esiste_c0 && $esiste_f0) {
     echo 'Gradi Celsius = '.($_POST['f0']-32)*5/9;
 } else {
     echo 'Errore';
 }
 ?>
La variabile intermedia $esiste_c0 vale true se il parametro
$_POST['c0'] esiste e non è una stringa nulla, altrimenti vale false.
La stessa cosa vale per $esiste_f0. Naturalmente, di queste variabli
intermedie ne puoi fare a meno e scrivere direttamente le condizioni
nell'if. Le ho usate solo per rendere più chiaro il codice (spero).
La funzione trim() serve solo a eliminare gli spazi eventualmente
presenti all'inizio e alla fine del parametro passato. Vedi
http://www.php.net/trim
.
Esiste anche l'array $_REQUEST, che contiene get, post e cookie, ma
personalmente, per evitare possibili ambiguità, preferisco non
usarlo. Comunque, tutti i vari array superglobal li puoi trovare
all'indirizzo
http://it2.php.net/manual/en/language.variables.predefined.php#language.variables.superglobals
Ciao.
-- 
Federico

ti avviso che se continui a farlo imparerai a programmare male.
Non sono d'accordo :-)
...nel senso: nello script, la variabile ha un suo contenuto; che senso ha
che io, tutte le volte, mi vada a rileggere $_GET o $_POST? Tanto vale che
me le importi all'origine, in un unico punto.
In quel punto importo solo le variabili che mi servono, magari non in quel
modo bovino che ho usato sopra (li', sono d'accordo - tanto varrebbe usare
register_globals), magari controllando il formato.
<?php
	$mievar = array(
		'c0'	=> '\d+',
		'f0'	=> '\d+',
	);
	foreach($mievar as $var => $regexp)
	{
		if (!isset($_REQUEST[$var]))
			$val = '';
		else
			$val = $_REQUEST[$var];
		if (!preg_match("/$regexp/", $val))
			$val = '';
		${$var} = $val;
	}
?>
Volendo si potrebbe rendere la cosa anche piu' flessibile (lo script muore
se una variabile non matcha, sostituisce le variabili mancanti con default
appropriati, distingue fra variabili opzionali e non...). Alla fine potrei
aggiornare gli script con
	$vars = array(
		'c0'	=> array('^\d+$', true, 0),
		'css'	=> array('^[a-z0-9A-Z]+$', false, 'screen'),
		...
	);
	require 'sanitize.php';
In effetti, gia' una cosa come 'user'=>'^[a-z]+$' potrebbe bloccare alcuni
dei piu' semplici SQL-injection attacks.
Leonardo megalomane


 suscettibilità di qaulcuno ... devo pagare il noviziato :-)))
be', direi non solo il noviziato.
se non fai come quelli che "dimenticano" i pagamenti per l'accesso a
questo NG, puoi star tranquillo. :-) hai tempo un mese, ricordalo.
se hai perso le coordinate, dimmelo che te le reinvio.
Ciao.
Maverick
-- 
«Che non siete più liberi di non avere una casa con letto per dormire.
 Lavorate voi - schiavi dei soldi - che non sentite la puzza della
 schiavitù!» (a Mario di Monte Mario, Roma) # 
http://libre.netsons.org/

 fine potrei aggiornare gli script con
L'idea e` ottima, ma ti hanno preceduto, anche se di poco:
http://www.php.net/manual/en/ref.filter.php
Purtroppo e` disponibile solo da PHP 5.2.0 (assieme ad altre cose tipo 
JSON, per le quali io consiglio di rompere le balle ai provider per avere 
la 5.2.x di PHP installata. Ha troppe cose belle in piu` rispetto alle 
precedenti).
Bye.

 ilprezzo mi sembra equo .
A me non fa una bella impressione un libro di 238 pagine (che poi 
diventano meno di 200 con indici, ringraziamenti, ecc.) che dichiara 
"Verrà spiegato tutto, ma proprio tutto ciò che occorre sapere per 
scrivere programmi in PHP"
So che costa il triplo (ma e` grosso il quadruplo), ma ti consiglio
http://www.librinformatica.com/trade/productview/3663/396/
E` vecchio (ottobre 2004), ma per le basi va bene. Io ho visto l'edizione 
inglese, ma la Hoepli di solito traduce bene. Copre bene gli argomenti 
base e spiega anche alcune convenzioni di codifica. Ha solo un'appendice 
abbastanza inutile con la lista delle funzioni di alcuni moduli, che puoi 
comodamente trovare online piu` completa.
Invece questo lascialo stare e non farti venire la tentazione solo perche` 
spiega PHP assieme a MySQl e Apache:
http://www.librinformatica.com/trade/productview/4103/396/
E` un fiorire di bad practices, tipo usare $_REQUEST, global, short-tags, 
asp-tags, ecc.
Questo mi incuriosisce, ma non l'ho ancora visto in giro, e` uscito a 
marzo:
http://www.librinformatica.com/trade/productview/4729/396/
Sembra che si basi su esempi concreti per spiegare il codice, anche se le 
pagine non sono tantissime, e mi fa temere che abbiano concentrato un po' 
troppo le spiegazioni.
Bye.

 troppo le spiegazioni.
 è quello che mi ha consigliato anche Maverick ... 2 indizi potrebbero fare
una prova , e quindi passare all'acquisto . Certo le pagine non sono
tantissime e forse il rischio che gli argomenti siano un pò compressi ci
potrebbe essere , però anche il prezzo mi sembra molto accessibile . Credo
che andrò per questo .. poi ti/vi farò sapere
Grazie


Che versioni mi consigli ?
Apache : 2 o 1.3 ?
Php :
MySql :
Grazie


> un ultima cosa ( per il momento ) comincio con PHP 4 o PHP 5 ??
5.
--
rob4you

 Grazie
Prego
ps: a parità di prezzo (e nel nostro caso il prezzo è ZERO) 
preferiresti una vettura ultimo modello o una versione antecedente?
...e allora lo vedi che la risposta la sai!!! :-)
--
rob4you

Purtroppo e` disponibile solo da PHP 5.2.0
Io ci avevo pensato fin da PHP 4.x ;-) ...senz'altro la versione embed
e' piu' performante, piu' stabile e soprattutto c'e' gia' :-), ma dove
non ce la dovessi avere... ma semmai potrebbe essere un'idea quella di
modificare il codice in modo da funzionare come filter... cosi' uno si
trova gia' pronto.
Leonardo


 per un caso strano dimenticare fammi un fischio tra 29 gg :-))
Ok, quoting ancora un pochettino più pulito (ma hai già fatto un ottimo
lavoro) e non avrai più alcuna difficoltà a stare su Usenet. ;-)


 facilita'.
In realta` non contesto tanto la sicurezza, quanto il fatto che sia un
minestrone che, in base alle impostazioni del server, ti mischia GET,
POST, COOKIE, sessioni e ambiente in un ordine pseudo-casuale.
Se fosse solo GET e POST avrebbe senso, ma con tutto il resto dentro,
tanto vale usare le register_globals... ;)
Bye.

 > introduttivo ) che a aquello che mi hai indicato ( livello intermedio )
che
Giuso per informazione questo è quelo che ho acquistato ( e che mi è stato
consigliato di mettere vicino al camino )
http://www.librinformatica.com/trade/productview/4109/396/
.. a parte il
fatto che io l'ho comprato in libreria e potevo anche controllare che si
riferiva a PHP 4 ( quindi colpa mia ) .. ma se uno lo acquistava su internet
da cosa se ne accorgeva ??
cIAO mARCO


Libri
mi viene un dubbio come si fa a distinguere se parlano di php 4 o 5 ??
http://www.librinformatica.com/trade/productview/4557/396/
http://www.librinformatica.com/trade/productview/4109/396/
 ( è quello che ho
comprato)
http://www.librinformatica.com/trade/productview/4729/396/
Ciao e Grazie Marco


POST, COOKIE, sessioni e ambiente in un ordine pseudo-casuale.
Hum. E ci hai ragione, ci hai.
Si potrebbe modificare il filtro perche' ricrei un _REQUEST ragionevole,
consentendo sia di modificare un COOKIE con un GET (per es., se si vuole
cambiare una preferenza) sia di impedire la stessa cosa (per es. inviare
via GET il COOKIE di sessione ... a meno di farlo perche' non si hanno i
cookie attivi).
Potrebb'essere anche un sistema per svincolarsi dall'"INI Hell" :-D


 mi viene un dubbio come si fa a distinguere se parlano di php 4 o 5 ??
In questo particolare periodo storico, se non dicono niente quasi
sicuramente si riferiscono a PHP4.
Se parlassero del 5 lo sbandiererebbero piu` possibile.
Se parlassero del 3 sarebbero fondi di magazzino o tentate fregature.
Bye.

 ha
scritto:

però se fosse come dici tu allora sia il 4557 che il 4729 parlano del php 4
? ( nella descrizione del 4729 parlano della programmazione ad oggetti
quindi penso sia riferita al 5 )
http://www.librinformatica.com/trade/productview/4557/396/
http://www.librinformatica.com/trade/productview/4109/396/
 ( è quello che ho
comprato)
http://www.librinformatica.com/trade/productview/4729/396/
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Hum. E ci hai ragione, ci hai.
non proprio
- l'ordine non è pseudo-casuale: dipende dalla direttiva variables_order
   che di default è EGPCS (di queste ai fini del popolamento di _REQUEST contano
   solo GPC)
- in _REQUEST (stando sempre alla documentazione) non troverai niente che non
   sia in $_COOKIE, $_GET, $_POST quindi niente "sessioni e ambiente"

 quindi penso sia riferita al 5 )
La programmazione a oggetti c'era (mi pare) gia` in PHP 3, col 4 e` stata
un po' sistemata, col 5 rivoluzionata.
Le differenze nel linguaggio base (tranne appunto la OOP) tra 4 e 5 sono
minime, e un manuale per PHP4 va bene anche per il 5.
Il problema di molti manuali e` che sono stati scritti (o iniziati) quando
si usava programmare in PHP un po' alla carlona, senza tenere conto non
dico dell'hardening estremo, ma nemmeno delle piu` semplici regole di
sicurezza. Questa cosa, purtroppo, e` stata incentivata da molte
facilitazioni dell'interprete, e anche io all'inizio ci sono cascato,
perche` i manuali quello spiegavano. Per questo appena posso consiglio di
non sottovalutare questi aspetti: ci sono passato e so le rogne che ti
trovi se non stai attento. E per fortuna non mi sono mai capitate sql
injection. :)
Purtroppo l'unico modo per distinguere un manuale buono da uno schifido e`
di leggerlo, e per leggerlo devi comprarlo, perche` quasi mai le riviste
li recensiscono, e quando lo fanno di solito valutano altri parametri tipo
il numero di pagine o di esempi, la chiarezza descrittiva, la bonta` della
traduzione o il numero di errori nel codice, ma mai gli aspetti relativi
alla sicurezza o allo schema mentale che un dato manuale cerca di imporre.
Aggiungi poi che se un editore vuole avere un manuale gratis da recensire
deve anche ingraziarsi un po' l'editore, e vedi che i voti non sono
praticamente mai bassi. :)
Bye.

    sia in $_COOKIE, $_GET, $_POST quindi niente "sessioni e ambiente"
Questa non la sapevo, mea culpa. Pensavo che l'ordine definisse anche cosa
ci finiva dentro.
Bye.

 ci finiva dentro.
influenza solamente l'ordine di assegnazione (da sinistra a destra)

 da cosa se ne accorgeva ??
Io spesso quando devo acquistare qualcosa faccio il percorso: Ricerca su
Internet --> Negozio reale --> Acquisto su Internet. :-)
Ci sono negozi (però intendo perlopiù i centri commerciali, non piccoli
negozi) in cui sarò entrato decine di volte per chiedere info, guardare
da vicino e poi uscire sempre... a mani vuote. :-) Il portatile che sto
usando adesso andai a vedere come fosse esteticamente da vicino, e
perfino quanto fosse pesante, per poi acquistarlo online, risparmiando
un bel po' di soldi rispetto ai prezzi praticati al pubblico.
Fosse per me, il 90% dei negozi "normali" avrebbe già chiuso. ;-)


 Fosse per me, il 90% dei negozi "normali" avrebbe già chiuso. ;-)
diciamo che meno male non tutti sono come te alrtimenti avrebbero chiuso ..
ma tu dove saresti andato a vedere e pesare il portatile :-))
Cia o


 Fosse per me, il 90% dei negozi "normali" avrebbe già chiuso. ;-)
diciamo che meno male non tutti sono come te alrtimenti avrebbero chiuso ..
ma tu dove saresti andato a vedere e pesare il portatile :-))
Cia o
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

cui un sysadmin dovrebbe cambiarlo
Guarda, io ho visto cose che... :-)
Leonardo che ne ha pure fatte, eh
