Newsgroup: it.comp.www.php
Titolo: Newbie: in locale no, on-line si

Ciao a tutti.
Mi sto avvicinando ora alla programmazione in PHP e ho incontrato il
seguente problema: lo script che segue, copiato pari pari dal libro che
sto leggendo, in locale non funziona mentre quando l'ho messo on-line ha
fatto quello che c'era scritto sul libro.
Lo script è il seguente...
<html>
<body>
<?php
$form="<form method=\"GET\" action=\"$PHP_SELF\">
<center><h3>Nuovo impiegato</h3></center>
Nome dell'impiegato<br>
<input type=\"text\" name=\"nome\" value=\"$nome\"><br>
Indirizzo dell'impiegato<br>
<input type=\"text\" name=\"indirizzo\" value=\"$indirizzo\">
<br><br>
<input type=\"hidden\" name=\"stato\" value=\"inviato\">
<input type=\"submit\" name=\"submit\" value=\"Invia le informazioni!\">
<input type=\"reset\" value=\"Cancella!\">
</form>";
$errore_nome=0;
$errore_indirizzo=0;
if ($stato != "inviato") {
  echo "$form";
} else {
  if (empty($nome)) {
    echo "<b>Errore:</b> Manca il nome dell'impiegato<br>";
    $errore_nome=1;
  }
  if (empty($indirizzo)) {
    echo "<b>Errore:</b> Manca l'indirizzo dell'impiegato<br>";
    $errore_indirizzo=1;
  }
  if (($errore_nome) || ($errore_indirizzo)) {
    echo "$form";
  } else {
    echo "elaborazione...<br>";
    echo "<b>$nome</b> con indirizzo <b>$indirizzo</b> è stato
aggiunto";
  }
}
?>
</body>
</html>
... mentre il messaggio di errore che ricevo il locale è questo:
Notice: Undefined variable: nome in c:\programmi\apache
group\apache\htdocs\recallit.php on line 7
Notice: Undefined variable: indirizzo in c:\programmi\apache
group\apache\htdocs\recallit.php on line 9
Notice: Undefined variable: stato in c:\programmi\apache
group\apache\htdocs\recallit.php on line 17
Vabbè, non è proprio un messaggio di errore ma un avviso, comunque
quando clicco sul pulsante "Invia le informazioni!" in locale, oltre ai
notice non visualizza nient'altro, mentre on-line mi segnala
(giustamente) l'errore che manca il nome dell'impiegato e l'indirizzo
riproponendomi il form da riempire.
Credo che c'entri qualcosa la configurazione di Apache, ma non so bene
dove mettere le mani.
Mi starebbe anche bene avere i notice (se sono solo avvisi e non
errori), resta il fatto che cliccando sul pulsante lo script non fa
quello che dovrebbe!
Grazie a tutti quelli che vorranno aiutarmi.
Nando
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Evidentemente nel server online è stata mipostata la direttiva
"register-globals=On", nel file php.ini (dovresti trovarla anche tu). Nel
tuo evidentemente è messa ad Off, ed è normale, dato che le variabili
(passate dai form) registrate globalmente possono causare problemi di
sicurezza.
Tieni sul tuo PC la direttiva ad Off, e per ovviare, prima di questa riga
if ($stato != "inviato") {
Aggiungi quest'istruzione:
$stato=$_GET['stato'];
praticamente istruisci il programma a prendere il valore della variabile
stato dal valore passato dal form.
Da notare che questa aggiunta fa in modo che comunque funzioni sia online
che in locale, e che funzionerà sempre anche se in futuro sul server
cambieranno impostazioni. Evidentemente comunque il libro da cui l'hai
copiata non è aggiornato a php4.0, versione dalla quale register-globals è
Off per default.
Leo.
NB: Ovviamente se i dati dal form li passi con il metodo POST devi usare
$_POST['stato']... ma se leggi l'help capisci al volo subito tutto. :)

 $stato=$_GET['stato'];
Purtroppo non funziona lo stesso, mi dice:
Notice: Undefined index: stato in c:\programmi\apache
group\apache\htdocs\recallit.php on line 19
Ciao e grazie ancora.


 Non c'entra con la tua domanda, comunque ti hanno già risposto, tuttavia:
Grazie mille, tutti i consigli sono bene accetti.


 > if ($stato != "inviato") {
Puoi benissimo togliere il capo hidden, se vuoi controllare che il form sia
stato inviato fai così:
$stato=$_GET['submit']; //prendi direttamente lo stato del bottone
if ($stato!="Invia le informazioni!") { //dato che questo è il value del
tasto submit
Poi vedendo bene il form noto che lo riempi anche all'inizio con nome e
indirizzo:
...value=\"$nome\"...
A questo punto il valore di $nome e $indirizzo lo devi prendere dalla
collezione $_GET *prima* di definire la variabile $form.
$nome=$_GET['nome'];
$indirizzo=$_GET['indirizzo'];
Questo comunque NON ti elimina i PHP Notice, infatti stai sempre usando
variabili non dichiarate. Non succede niente, basta che sul server disattivi
la visualizzazione degli errori. Non mi ricordo per nulla come si fa però...
:(

 :(
Ti ringrazio veramente di cuore per la chiarezza e la pazienza.
Ciao
