Problema con la funzione header()

Salve a tutti ragazzi, avrei un problemino con la funzione header() che e' presente nello script realizzato nella lezione 9 del corso di PHP e MySQL!

Il messaggio di errore che mi restituisce e' il seguente:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /Applications/MAMP/htdocs/ProvePHP/PHP:Mysql/modifica.php on line 73

Per correttezza vi posto anche la pagina da me creata, so che sono parecchie righe, ma visto che ho applicato qualche modifica al codice, nn sono stati grossi cambiamenti, preferisco incollarla tutta...

<?php
   //richiamo il file di configurazione
   require('config.php');
   
   //richiamo lo script di connessione
   require('connect.php');
   
   if($_POST && isset($_GET['id']))
   {
      aggiorna_record();
   }
   elseif(isset($_GET['id']))
   {
      mostra_record();
   }
   else
      mostra_lista();
      
   //dichiaro la funzione mostra_lista()
   function mostra_lista()
   {
      //mostro un eventuale messaggio
      if(isset($_GET['msg']))
         echo '<strong>'. htmlentities($_GET['msg']).'</strong><br /><br />';
         
      while ($row = mysql_fetch_assoc($result))
      {
         $nome = htmlspecialchars($row['nome']);
         
         //preparo il link per la modifica dei dati del record
         $link = $_SERVER['PHP_SELF'] .'?id=' .$row['id'];
         
         echo "<p>Nome: $name <a href=\"$link\">Modifica</a></p>";
      }
      //libero la memoria di PHP 
      mysql_free_result($result);
      
      //chiudo la connessione a MySQL 
      mysql_close();
   }
   
   function aggiorna_record()
   {
      //recupero i campi di tipo "stringa"
      $nome = trim($_POST['nome']);
      $email = trim($_POST['email']);
      $messaggio = trim($_POST['messaggio']);
      
      //verifico se devo eliminare gli slash inseriti in automatico da PHP 
      if(get_magic_quotes_gpc())
      {
         $nome = stripslashes($nome);
         $email = stripslashes($email);
         $messaggio = stripslashes($messaggio);
      }
      
      //effettuo l'escape dei caratteri speciali per inserirli all'interno
      $nome = mysql_real_escape_string($nome);
      $email = mysql_real_escape_string($email);
      $messaggio = mysql_real_escape_string($messaggio);
      echo $nome;
      //recupero gli altri campi del form
      $sesso = isset($_POST['sesso']) ? intval($_POST['sesso']) : 0;
      $newsletter = isset($_POST['newsletter']) ? 1 : 0;
      $attivita = intval($_POST['attivita']);
      
      $id = intval($_GET['id']);
      
      //verifico la presenza dei campi obbligatori
      if(!$nome)
      {
         $messaggio = urlencode("Non hai inserito il nome");
         header("location:$_SERVER['PHP_SELF']?id=$id&msg=$messaggio");
         exit();
      }
      
      //preparo la query
      $query = "UPDATE utenti SET
               nome = '$nome',
               email = '$email',
               sesso = '$sesso',
               newsletter = '$newsletter',
               attivita = '$attivita',
               messaggio = '$messaggio',
               WHERE id = '$id'
            ";
      
      //invio la query
      $result = mysql_query($query);
      
      //controllo l'esito
      if(!$result)
      {
         die("Errore nella query $query: ". mysql_error());
      }
      
      //chiudo la connessione MySQL
      mysql_close();
      
      $messaggio = urlencode('Aggiornamento effettuato con successo');
      header("location: $_SERVER['PHP_SELF']?msg=$messaggio");
   }
   
   //creo la funzione per mostrare i record
   function mostra_record()
   {
      //mostro un eventuale messaggio
      if(isset($_GET['msg']))
         echo '<strong>'. htmlentities($_GET['msg']).'</strong><br /><br />';
         
      $id = intval($_GET['id']);
      
      //preparo la query
      $query = "SELECT nome,email,sesso,newsletter,attivita,messaggio FROM utenti WHERE id=$id";
      
      //invio la query
      $result = mysql_query($query);
      
      //controllo l'esito
      if(!$result)
      {
         die("Errore nella query $query: ". mysql_error());
      }
      
      //controllo che SELECT abbia restituito un record onde evitare manomissioni
      //dell'id passato via GET
      if(mysql_num_rows($result) != 1)
      {
         die("L'ID passato via GET &egrave; errato!");
      }
      
      list($nome,$email,$sesso,$newsletter,$attivita,$messaggio) = mysql_fetch_row($result);
      
      $nome = htmlspecialchars($nome);
      $email = htmlspecialchars($email);
      $messaggio = htmlspecialchars($messaggio);
?>
<form name="form_registrazione" method="post" action="">
   <label>Nome: <input name="nome" type="text" value="<? echo $nome;?>" /></label><br />
   <label>Email: <input name="email" type="text" value="<? echo $email;?>" /></label><br />
   Sesso: <label><input name="sesso" type="radio" value="1" <? if($sesso == 1) echo 'checked="checked"'; ?> />M</label><br />
   <label><input name="sesso" type="radio" value="2" <? if($sesso ==2) echo 'checked="checked"'; ?> />F</label><br />
   <label>Inviami newsletter: <input name="newsletter" typr="checkbox" value="1" <?if($newsletter) echo 'checked="checked"'; ?> /></label><br />
   <label>Attivit&agrave;: 
      <select name="attivita">
         <option value="0">::seleziona::</option>
         <option value="1" <? if($attivita == 1) echo 'selected="selected"';?>>Studente</option>
         <option value="2" <? if($attivita == 2) echo 'selected="selected"';?>>Lavoratore</option>
         <option value="3" <? if($attivita == 3) echo 'selected="selected"';?>>Disoccupato</option>
      </select>
   </label><br />
   <label>Messaggio:<br />
      <textarea name="messaggio" cols="40" rows="5"><? echo $messaggio; ?></textarea>
   </label></br />
   <input name="invia" type="submit" value="Invia" />
</form>
<?php
   }
?>

spero che qualcuno possa, e sopratutto abbia la voglia di aiutarmi, visto che ho anche provato a darmi dire dal PHP di che tipo di errore si tratta ma nn me lo vuol dire...

Detto questo grazie in anticipo a tutti quanti!!!

inviato 9 anni fa
Pr0v4
X 0 X

Dunque, sarebbe meglio che usi le {} anche per una sola istruzione dentro if/else perchč rendono il codice pił semplice da leggere e capire; in seconda battuta :

header("location:$_SERVER['PHP_SELF']?id=$id&msg=$messaggio");

diventa

header("location:".$_SERVER['PHP_SELF']."?id=$id&msg=$messaggio");

risposto 9 anni fa
LonelyWolf
X 0 X

Grazie mille per l'aiuto!

Ma come mai prima nn me lo stampava? stra doppi apici nn dovrebbe leggere le variabili come $_SERVER...

Grazie del chiarimento!

risposto 9 anni fa
Pr0v4
X 0 X

Se devi mettere un elemento di un array all'interno di una stringa non devi usare gli apici:

$mioArray['elemento'] = "a tutti";
$stringa = "Ciao $mioArray[elemento]";

oppure devi usare le parentesi graffe:

$mioArray['elemento'] = "a tutti";
$stringa = "Ciao {$mioArray['elemento']}";

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda