Newsgroup: it.comp.www.php
Titolo: Problema inserimento script php in html

In un piccolo sito web devo creare una pagina con un form
per inviare delle e-mail. Se lo script php che si occupa
della spedizione è separato, tutto funziona. Se invece
cerco di inserirlo nel file html, mi produce dei guai.
Il file .html, che ho rinominato .php (giusto?) è questo: 
================================================================================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"><html
xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<meta name="generator" content="Quanta Plus" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>B&B «titolo</title>
<meta name="description" content="testo" />
<meta name="keywords" content="testo" />
<link rel="stylesheet" type="text/css" href="layout.css" />
</head>
<body>
<ul class="navbar">
<li><a href="index.html">Home Page</a></li>
<li><a href="file1.html">titolo</a></li>
<li><a href="file2.html">titolo</a></li>
<li><a href="file3.html">titolo</a></li>
<li><a href="file4.html">titolo</a></li>
<li><a href="script.php">titolo</a></li>
</ul>
<h2>È possibile inviarci una comunicazione direttamente da questo form</h1>
<h2>Riempire i campi richiesti e premere il pulsante "Invia"</h2>
<br /><br />
<?php
$receiverMail = "indirizzo@dominio";
$name = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$subject = ltrim(rtrim(strip_tags(stripslashes($_POST['subject']))));
$msg = ltrim(rtrim(strip_tags($_POST['msg'])));
$ip = getenv("REMOTE_ADDR");
$msgformat = "Messaggio da: $name ($ip)\nEmail: $email\n\n$msg";
if(empty($name) || empty($email) || empty($subject) || empty($msg)) {
echo "<h3>Il messaggio non e' stato inviato</h3>
<h3>Si prega di compilare tutti i campi</h3";
}
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z
{2,3})$", $email)) {
echo "<h3>Il messaggio non e' stato inviato</h3>
<h3>L'indirizzo e-mail indicato non e' valido</h3>";
}
else {
mail($receiverMail, $subject, $msgformat, "From: $name <$email>");
echo "<h3>Il messaggio e' stato inviato correttamente<h3>
<h3>Risponderemo il piu' presto possibile</h3>
<h3>Grazie di averci scritto</h3>"; }
?>
<!--<form method="post" action="invia.php">-->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Nome:<br /><br />
<input name="name" size="50" maxlength="40" />
<br /><br /><br />
Indirizzo e-mail:<br /><br />
<input name="email" size="50" maxlength="40" />
<br /><br /><br />
Oggetto:<br /><br />
<input name="subject" size="50" maxlength="40" />
<br /><br /><br />
Messaggio:<br /><br />
<textarea name="msg" cols="50" rows="8" wrap="physical"></textarea>
<br /><br /><br />
<input type="submit" value="Invia" />
 
<input type="reset" value="Cancella" />
</form>
</body>
</html>
=========================================================================
Ma quando cerco di raggiungere la pagina del form,
questa non si apre e ricevo l'errore:
Parse error: syntax error, unexpected T_STRING
in /var/www/
netsons.org/samiel/form.php
 on line 1
Qualceh suggerimento?
Grazie
M.

 <?xml version="1.0" encoding="utf-8"?>
[cut]
Nella prima riga hai aperto il file XHTML con il tag <? che è anche lo
short open tag di PHP. Evidentemente il server ha la direttiva
short_open_tags = on.
Per ovviare a questo ti consiglio qualcosa del tipo:
<?= "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">" ?>
In pratica gli fai stampare quella stringa, che però non viene
processata dall'interprete PHP.
Altre info: 
http://www.php.net/ini.core
Enrico

 <?= "<"."?xml version=\"1.0\" encoding=\"utf-8\"?".">" ?>
La stringa funziona, almeno nel senso che non ricevo più
quel messaggio di errore e la pagina si apre. Tuttavia,
c'è un problema strano (almeno per me). Infatti,
nella pagina del form appena aperto già si legge:
========================================
Il messaggio non e' stato inviato
Si prega di compilare tutti i campi
========================================
Evidentemente, il controllo sul messaggio
viene fatto alla prima apertura della pagina,
quando ovviamente non c'è ancora scritto nulla,
e non dopo che è stato premuto il tasto "Invia".
C'è modo per uscirne?
Grazie mille
Mauro

 C'è modo per uscirne?
Direi... intanto nel form metti action=invia e non invia.php (fa 
confusione e basta).
Poi tutta la papagna che manda le mail o i messaggi li metti dentro un bel:
if ($_POST['action']=='invia') {
   papagna...
}
meglio ancora
if (isset($_POST['action']) && ($_POST['action']=='invia')) {
   papagna...
}

 }
Ma lo script è incluso nel file, per cui ho la riga:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Se uso lo script come file separato, tutto funziona.
I guai nascono quando ho cercato di implementarlo.
Bisognerebbe che lo script richiamasse pagine diverse,
altrimenti fa tutto nella stessa pagina, col risultato
che rimane sotto il form e i messaggi dello script
vi si sovrappongono...
M.
 

> }
Ho fatto cisì:

> }
Ho fatto così:
<?php
if (isset($_POST['action']) && ($_POST['action']=='invia')) {
$receiverMail   = "
sam...@netsons.org
";
$name   = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$subject = ltrim(rtrim(strip_tags(stripslashes($_POST['subject']))));
$msg = ltrim(rtrim(strip_tags($_POST['msg'])));
$ip = getenv("REMOTE_ADDR");
$msgformat      = "Messaggio da: $name ($ip)\nEmail: $email\n\n$msg";
if(empty($name) || empty($email) || empty($subject) || empty($msg)) {
        echo "<h3>Il messaggio non e' stato inviato</h3>
        <h3>Si prega di compilare tutti i campi</h3";
}
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z
{2,3})$", $email)) {
        echo "<h3>Il messaggio non e' stato inviato</h3>
        <h3>L'indirizzo e-mail indicato non e' valido</h3>";
}
else {
        mail($receiverMail, $subject, $msgformat, "From: $name <$email>");
        echo "<h3>Il messaggio e' stato inviato correttamente<h3>
        <h3>Risponderemo il piu' presto possibile</h3>
        <h3>Grazie di averci scritto</h3>"; }
?>
I messaggi partono, ma dopo la spedizione non salta fuori l'avviso
"Il messaggio e' stato inviato correttamente", ma si torna al form vuoto...
M.

vado di fretta... e ti do' una risposta frettolosa...
il concetto è questo:
se $_POST['action']='invia'... spedisce la mail e scrive quel che deve
altrimenti (else)
mostra il form vuoto.


Mi sto incartando, viste le mie conoscenze nulla di php.
Il fatto è che dovrei creare questa pagina e attualmente
sto studiando un po' di html e css. Il php potrò prenderlo
in considerazione solo dopo (a meno che non allunghino
le giornate ben oltre le 24 ore...). Ho provato
questa soluzione, che non funziona e mi produce
questo messaggio di errore:
Parse error: syntax error, unexpected '<'
in /var/www/
netsons.org/samiel/form.php
 on line 37
Questo è lo script attuale:
<?php
?>
<xml version="1.0" encoding="utf-8">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"><html 
xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<meta name="generator" content="Quanta Plus" >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>B&#038;B &#171;LA LOCANDA DI RE MANFREDI&#187; - PALAZZO SAN GERVASIO
(PZ)</title>
<meta name="description" content="Ora c'&#232; un Bed&#038;Breakfast anche a
Palazzo San Gervasio (PZ)" >
<meta name="keywords" content="b&#038;b,bed&#038;breakfast, Palazzo San
Gervasio, Potenza, Basilicata, Lucania" >
<link rel="stylesheet" type="text/css" href="layout.css" >
</head>
<body>
<ul class="navbar">
<li><a href="index.html">Home Page</a></li>
<li><a href="bed.html">Il nostro Bed&#038;Breakfast</a></li>
<li><a href="paese.html">Il paese</a></li>
<li><a href="storia.html">La storia</a></li>
<li><a href="tradizioni.html">Le tradizioni</a></li>
<li><a href="indirizzi.html">Indirizzi utili</a></li>
</ul>
  <h2>&#200; possibile inviarci una comunicazione direttamente da questo
  form</h1>
  <h2>Riempire i campi richiesti e premere il pulsante "Invia"</h2>
  <br /><br />
  <?
<input type="submit" name="action" value="invia">
if (isset($_POST['action']) && ($_POST['action']=='invia')) {
  $receiverMail   = "
sam...@netsons.org
";
$name   = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
  $email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
  $subject = ltrim(rtrim(strip_tags(stripslashes($_POST['subject']))));
  $msg = ltrim(rtrim(strip_tags($_POST['msg'])));
  $ip = getenv("REMOTE_ADDR");
  $msgformat      = "Messaggio da: $name ($ip)\nEmail: $email\n\n$msg";
  if(empty($name) || empty($email) || empty($subject) || empty($msg)) {
          echo "<h3>Il messaggio non e' stato inviato</h3>
         <h3>Si prega di compilare tutti i campi</h3";
  ?>
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  Nome:<br ><br >
  <input name="name" size="50" maxlength="40" >
  <br ><br/><br >
  Indirizzo e-mail:<br /><br />
  <input name="email" size="50" maxlength="40" >
  <br ><br ><br >
  Oggetto:<br ><br >
  <input name="subject" size="50" maxlength="40" >
  <br ><br ><br >
  Messaggio:<br ><br >
  <textarea name="msg" cols="50" rows="8"></textarea>
  <br ><br ><br >
  <input type="submit" value="Invia" >
  &#160; &#160; &#160; &#160; &#160; &#160;
  <input type="reset" value="Cancella" >
  </form>
<?
  }
 
elseif(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z
  {2,3})$", $email)) {
          echo "<h3>Il messaggio non e' stato inviato</h3>
          <h3>L'indirizzo e-mail indicato non e' valido</h3>";
  ?>
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  Nome:<br /><br />
  <input name="name" size="50" maxlength="40" value=?> echo $name. <?">
  <br /><br /><br />
  Indirizzo e-mail:<br /><br />
  <input name="email" size="50" maxlength="40" Value="WRONG!" >
  <br /><br /><br />
  Oggetto:<br /><br />
  <input name="subject" size="50" maxlength="40" value="?>echo $subject;<?>
  <br /><br /><br />
  Messaggio:<br /><br />
  <textarea name="msg" cols="50" rows="8">?> echo $message;<?</textarea>
  <br /><br /><br />
  <input type="submit" value="Invia" >> &#160; &#160; &#160; &#160; 
&#160; &#160;
  <input type="reset" value="Cancella" >
  </form>
<?
  }
  else {
          mail($receiverMail, $subject, $msgformat, "From: $name <$email>");
          echo "<h3>Il messaggio e' stato inviato correttamente<h3>
          <h3>Risponderemo il piu' presto possibile</h3>
          <h3>Grazie di averci scritto</h3>"; }
  }
?>
  </body>
  </html>
Penso che istituirò un premio per chi trova il mio errore...
M.

 M.
Lo dice chiaramente... c'è un "<" di troppo alla riga 37 nel file
indicato nel percorso... controlla...
Enrico

 indicato nel percorso... controlla...
La riga è questa:
<input type="submit" name="action" value="invia">
Vedi "<" di troppo?
Cmq se la elimino, mi dà un altro errore:
Parse error: syntax error, unexpected T_STRING
in /var/www/
netsons.org/samiel/form.php
 on line 79
E la riga in questione è:
<input name="email" size="50" maxlength="40" Value="WRONG!" >
Per cui non ci capisco più nulla...
M.

 
Guarda anche come finisce la riga precedente!


Ecco la riga precedente:
  Indirizzo e-mail:<br /><br />
Ti suggerisce qualcosa?
Io non ci capisco più nulla...
M.

 <input name="name" size="50" maxlength="40" value=?> echo $name. <?">
Questa riga (e le analoghe seguenti) è sbagliata: hai invertito il tag
d'apertura <? con quello di chiusura ?>. Riscrivila, insieme alle altre,
così:
<input name="name" size="50" maxlength="40" value="<?php echo $name; ?>" />
È meglio non usare gli short tag (<?) perché possono essere disattivati.
Al suo posto usa il tag d'apertura <?php.
Non c'entra con il problema, ma usando XHTML devi chiudere tutti i tag,
anche gli <input>, i <meta>, eccetera (vedi sopra).
Infine, non è necessario riscrivere due volte il form. Fai il controllo
sui dati inviati: se esistono li metti nel value dei vari tag del form,
altrimenti ci metti una stringa nulla.
Ciao.
-- 
Federico