Pagina 1 di 3

Cercasi esperto di php per script

Inviato: ven 7 set 2007, 23:44
da samiel
La storia è questa: devo implementare uno script php
in una pagina web. Scopo: il solito form per inviare e-mail.
Ora: se lo script sta in un file distinto, tutto funziona a dovere.
Le mie inesistenti conoscenze di php però mi hanno reso
la vita difficile nel tentativo di implementare lo script.
Fra i tanti, vani esperimenti, ho prodotto questo codice
(lo so, sarebbe possibile realizzare altrimenti i menu cliccabili,
e anche snellire la parte dello script che gestisce i controlli
degli indirizzi e-mail con una funzione "sanitize",
ma magari me ne occupo dopo, quando tutto funziona):

Codice: Seleziona tutto

<?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&B «LA LOCANDA DI RE MANFREDI» - PALAZZO SAN GERVASIO
(PZ)</title>
<meta name="description" content="Ora c'è un Bed&Breakfast anche a
Palazzo San Gervasio (PZ)" >
<meta name="keywords" content="b&b,bed&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&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>È 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   = "samiel@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']))));
  $messaggio = ltrim(rtrim(strip_tags($_POST['messaggio'])));
  $ip = getenv("REMOTE_ADDR");
  $msgformat      = "Messaggio da: $name ($ip)\nEmail: $email\n\n$messaggio";
  if(empty($name) || empty($email) || empty($subject) || empty($messaggio)) {
          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="messaggio" cols="50" rows="8"></textarea>
  <br ><br ><br >
  <input type="submit" value="Invia" >
             
  <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="messaggio" cols="50" rows="8">?> echo $message;<?</textarea>
  <br /><br /><br />
  <input type="submit" value="Invia" >>         
   
  <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>
Quando cerco di aprire la pagina del form, ricevo
invece questo messaggi di errore:

Parse error: syntax error, unexpected '<'
in /var/www/netsons.org/samiel/form.php on line 37

La riga in questione è:

<input type="submit" name="action" value="invia">

E qui mi incarto perché non so più che fare...
Qualche idea?

Grazie
M.

Inviato: sab 8 set 2007, 0:19
da Kaaio
Hai un tag html tra i tag <? ?>, li dovresti metterci solo codice php.
Credo sia meglio usare <?php ?> e non <? ?>,

Inviato: sab 8 set 2007, 0:39
da albatros
Perché non scambi la riga 36 con la 37?
Non sono un programmatore php neanch'io, ma non è meglio se racchiudi in dei print il codice html in mezzo ai blocchi degli if?

Inviato: sab 8 set 2007, 0:41
da stan
Ad occhio...non c'e' un > di troppo a riga 88?

Inviato: sab 8 set 2007, 0:45
da samiel
anche mettendo <?php noncambia nulla.
il mio errore dev'essere ben più sostanziale.
Beh, se guardi il codice allegato vedrai
che è un minestrone di php e html...
Solo che ho esaurito ogni idea e una gran confusione...

M.

Inviato: sab 8 set 2007, 0:52
da albatros
se guardi il codice allegato vedrai
che è un minestrone di php e html...
Sì, infatti dando un'occhiata anche alla parte dopo, mi sembra che abbia fatto confusione alle righe 77, 81 e 86...
Samiel, quando sei un po' più riposato, forse ti conviene riscrivere il codice senza saltellare tanto dentro e fuori i tag <? e ?>: una volta che hai scritto una sezione in php, se devi usare codice html al suo interno usa print...

Inviato: sab 8 set 2007, 1:12
da samiel
Ho messo così (ma non funziona ancora bene...):

Codice: Seleziona tutto

<?= "<"."?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 «LA LOCANDA DI RE MANFREDI» - PALAZZO SAN GERVASIO
(PZ)</title>
  <meta name="description" content="Ora c'è un Bed&Breakfast anche a
Palazzo San Gervasio (PZ)" />
  <meta name="keywords" content="b&b,bed&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&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>È possibile inviarci una comunicazione direttamente da questo form</h1>
<h2>Riempire i campi richiesti e premere il pulsante "Invia"</h2>
<br /><br />

<?php
// indirizzo e-mail destinatario
$receiverMail	= "samiel@netsons.org";

// pulizia dei dati inseriti
$name	= ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$subject = ltrim(rtrim(strip_tags(stripslashes($_POST['subject']))));
$messaggio = ltrim(rtrim(strip_tags($_POST['messaggio'])));

// lettura dell'indirizzo IP
$ip = getenv("REMOTE_ADDR");

// formattazione del messaggio ( \n per le messe a capo )
$msgformat	= "Messaggio da: $name ($ip)\nEmail: $email\n\n$messaggio";

// verifica campi obbligatori
if(empty($name) || empty($email) || empty($subject) || empty($messaggio)) {
	echo "<h3>Il messaggio non e' stato inviato</h3>
	<h3>Si prega di compilare tutti i campi</h3"; }
// verifica indirizzo email
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 {
  // invio del messaggio
	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="messaggio" cols="50" rows="8"></textarea>
<br /><br /><br />
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</form>
</body>
</html>
Il fatto è che di php non capisco un'acca...
Adesso il form appare e invia correttamente imessaggi.
Però... quando lo apro al form stesso
si sovrappone la scritta:
"Il messaggio non e' stato inviato
Si prega di compilare tutti i campi"
e una volta che ho effettuato l'invio
il form resta e vi si sovrappone il messaggio:
"Il messaggio e' stato inviato correttamente" ecc
Invece dovrebbe aprirsi una nuova pagina
dove leggere quelle cose...
Che stresssssssssssssssssssssssssss

M.

Inviato: sab 8 set 2007, 1:29
da albatros
Però... quando lo apro al form stesso
si sovrappone la scritta:
"Il messaggio non e' stato inviato
Si prega di compilare tutti i campi"
Normale, perché:

Codice: Seleziona tutto

if(empty($name) || empty($email) || empty($subject) || empty($messaggio)) {
   echo "<h3>Il messaggio non e' stato inviato</h3>
   <h3>Si prega di compilare tutti i campi</h3"; } 
$name, $mail, $messaggio e $subject al primo avvio sono vuoti e se è vuoto almeno uno di essi ti viene stampa quella scritta...
e una volta che ho effettuato l'invio
il form resta e vi si sovrappone il messaggio:
"Il messaggio e' stato inviato correttamente" ecc
Invece dovrebbe aprirsi una nuova pagina
dove leggere quelle cose...
Una volta compilato il form l'azione da eseguire è di nuovo lo stesso script: non c'è nessuna condizione, nessun flag che dica allo script di non stampare di nuovo il form e non c'è nulla nello script che rimandi a un'altra pagina...
Che stresssssssssssssssssssssssssss
Capisco benissimo il tuo stato d'animo, è successo anche a me più volte in varie occasioni... :)

Inviato: sab 8 set 2007, 2:57
da samiel
Il guaio è che sto studiando un po' di xhtml e css
e non (ancora) php, per cui dovrei trovare una soluzione
"prefabbricata" al mio problema...

Ho ritentato la via del primo codice
con qualche variante:

Codice: Seleziona tutto

<?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&B «LA LOCANDA DI RE MANFREDI» - PALAZZO SAN
  GERVASIO (PZ)</title>
    <meta name="description" content="Ora c'è un Bed&Breakfast 
anche
  a Palazzo San Gervasio (PZ)" >
    <meta name="keywords" content="b&b,bed&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&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>È possibile inviarci una comunicazione direttamente da questo
  form</h1>
  <h2>Riempire i campi richiesti e premere il pulsante "Invia"</h2>
  <br /><br />

  <?
if (isset($_POST['action']) && ($_POST['action']=='invia')) {
  $receiverMail   = "samiel@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']))));
  $messaggio = ltrim(rtrim(strip_tags($_POST['messaggio'])));
  $ip = getenv("REMOTE_ADDR");
  $msgformat      = "Messaggio da: $name ($ip)\nEmail: $email\n\n$messaggio";
  if(empty($name) || empty($email) || empty($subject) || empty($messaggio)) {
          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="messaggio" cols="50" rows="8"></textarea>
  <br ><br ><br >
  <input type="submit" value="Invia" >
             
  <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="messaggio" cols="50" rows="8">?> echo $message;<?</textarea>
  <br /><br /><br />
  <input type="submit" value="Invia" >>         
   
  <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>
ma ricevo sempre il malefico messaggio:

Parse error: syntax error, unexpected T_STRING in /var/www/netsons.org/samiel/form2.php on line 79

:( :idea: :evil:

M.

Inviato: sab 8 set 2007, 9:36
da ccts2002
puoi fare cosi

Codice: Seleziona tutto

<!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 «LA LOCANDA DI RE MANFREDI» - PALAZZO SAN GERVASIO
(PZ)</title>
  <meta name="description" content="Ora c'è un Bed&Breakfast anche a
Palazzo San Gervasio (PZ)" />
  <meta name="keywords" content="b&b,bed&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&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>



<?php
if(isset($_POST['name']) && isset($_POST['email']) && isset($_POST['subject']) && isset($_POST['messaggio'])){
// indirizzo e-mail destinatario
$receiverMail   = "samiel@netsons.org";

// pulizia dei dati inseriti
$name   = ltrim(rtrim(strip_tags(stripslashes($_POST['name']))));
$email = ltrim(rtrim(strip_tags(stripslashes($_POST['email']))));
$subject = ltrim(rtrim(strip_tags(stripslashes($_POST['subject']))));
$messaggio = ltrim(rtrim(strip_tags($_POST['messaggio'])));

// lettura dell'indirizzo IP
$ip = getenv("REMOTE_ADDR");

// formattazione del messaggio ( \n per le messe a capo )
$msgformat   = "Messaggio da: $name ($ip)\nEmail: $email\n\n$messaggio"; 
 // il controllo dei campi obblicatori non è più necessario perché controlli con isset()
 //verifica lindirizzo mail
 if(!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{
  //invio del messaggio
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>";
 }
}
else{
 //metti il form
 $self=$_SERVER['PHP_SELF'];
 echo <<<FRM

<h2>È possibile inviarci una comunicazione direttamente da questo form</h1>
<h2>Riempire i campi richiesti e premere il pulsante "Invia"</h2>
<br /><br />

<form action="$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="messaggio" cols="50" rows="8"></textarea>
<br /><br /><br />
<input type="submit" value="Invia" />
<input type="reset" value="Cancella" />
</form> 
FRM;
}
 ?>
</body>
</html>
fammi sapere se va

P.S.: scusa ma per prova ti ho mandato una mail dal form :? :? dall'indirizzo ccts2002 at libero.it

Inviato: sab 8 set 2007, 12:25
da DaD
Ti restituisce errore sempliciemente perchè non puoi racchiudere i tag html all'interno di codice php, al massimo puoi includere codice html all'interno di echo() o print(), comunque sia il codice di ccts2002 sembra essere corretto quindi usa quello :P

Inviato: sab 8 set 2007, 12:43
da ccts2002
unica correzione al mio script...per ora...
rimetti il controllo se qualche variabile è vuota...stupidamente, ho detto una cretinata...con isset() controlla se esiste, ma può esistere anche una variabile stringa vuota...

ciaooooo

Inviato: sab 8 set 2007, 13:48
da samiel
Allora, meraviglia... funziona!!!!!!!!!
Ieri notte ho fatto le 3 e mezza
e non ne uscivo...

Ho rimesso i controllo dei campi
perché anch'io mi ero accorto
che inviava anche messaggio incompleti.

Approfondito meglio il tema css
devo proprio buttarmi sul php,
di cui nulla so (come avete capito
benissimo) e di cui ormai nel web
non si può fare a meno.

Mi hanno segnalato
PHP5. Guida per lo sviluppatore
Wrox - Hoepli
È un malloppo di 850 pagine
per la odica cifra di 50 €.
Lo conoscete? Vale la pena
di imbarcarsi in questa impresa?

Ma mi serviva contingentemente
una soluzione a questo problema
per dare il sito a degli amici;
e comunque tutto è bene quel che finisce bene!

Eterna gratitudine a ccts2002
e agli altri!

M.

Inviato: sab 8 set 2007, 14:54
da DaD
Secondo me per iniziare a programmare in php va benissimo la documentazione ufficiale. http://it.php.net

Inviato: sab 8 set 2007, 17:11
da ccts2002
concordo!!!
la cosa migliore è cercare qualche tutorial in rete. comunque esistono tanti libricini ''pocket'' che parlano dell'argomento, risparmi 40 euro e hai le basi, tanto poi c'è tutto in rete...

ciaoooo