Newsletter

Come al solito ho un problema con il php. Sono imbranato lo so ma penso di avere una predisposizione naturale per odiare questo linguaggio di programmazione.

Ho uno script di questo genere: in homepage ho un form di invio con una input box semplicissima che punta sul seguente script in php

<?php
// Effetuiamo la connessione al nostro db
$link = mysql_connect('localhost', 'root', '')
or die('Connessione al db fallita.'); // In caso di fallimento visualizza l'errore ed esce

// Selezione del database
mysql_select_db('cacca')
or die('Selezione del database fallita.'); // In caso di fallimento visualizza l'errore ed esce
// Ok abbiamo la connessione facciamo qualche verifica ed eseguiamo la query sql

// Verifichiamo di avere l'indirizzo email
if (isset($_POST['email_address'])) {
  if (trim($_POST['email_address'])!='') {
    // il campo non è vuoto, proseguo con l'inserimento nel db
    $sql = "INSERT INTO address_book (email_address) VALUES('". $_POST['email_address'] ."')";
    $res = mysql_query($sql);
    if ($res) {
      // Inserimento riuscito
    } else {
      // Si è verificato un errore, controllare la sintassi della query
    }
  } else {
  
  $messaggio = "Campo e-mail vuoto, inserire correttamente il proprio indirizzo email";
    // Il campo c'è ma è vuoto
  }
} else {
  // Il contenuto della form non è arrivato, questo può succedere
  // se si accede a questa pagina direttamente senza fare il submit da form.php
$messaggio = "Per inserire la propria email dalla lista delle newsletter utilizzare il form presente nella box di sinistra della HomePage";
  }
  
?>

  
<?php include("header.php");?>

<div id="news">
<b><?php echo("$messaggio"); ?></b>
</div>
</div>

<?php include("footer.php"); ?>

Ovviamente il problema sarà perchè apro e chiudo i tag php vero che non visualizzo la variabile $messaggio? Come faccio pur chiudendoli a far comparire un eventuale messaggio di errore "personalizzato" per il problema che si propone?

Altro problema... questa pagine come potete vedere si collega a un database su localhost, ho cercato di creare anche un controllo per l'uso automatizzato di email tramite un semplice form di controllo che è il seguente:

<html>
<head>
<title>News Letters</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h3>Modulo per l'invio di news</h3>
<form action="send_news.php" method="post">
  <table>
    <tr>
      <td>Oggetto</td>
      <td><input name="subject" type="text" size="20" /></td>
    </tr>
    <tr>
      <td>Testo:</td>
      <td><textarea name="text" cols="20" rows="10"></textarea></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" value="submit" /></td>
    </tr>
  </table>
</form>
</body>
</html>

e questo il "send_news.php"

<?php

if ("$provenienza = localhost/form_send_news.php"){

$link = mysql_connect('localhost', 'root', '')
or die('Connessione al db fallita.');

mysql_select_db('cacca')
or die('Selezione del database fallita.');

// Verifichiamo di avere l'oggetto e il testo dalla form
if (isset($_POST['subject']) && isset($_POST['text'])) {
  if (trim($_POST['subject'])!='' && trim($_POST['text'])!='') {
    /* Abbiamo tutto quello che ci serve, ora con una query prendiamo
    tutti gli indirizzi dal db */
    $sql = "SELECT email_address FROM address_book";
    $res = mysql_query($sql);

    // Impostiamo le intestazione dell'e-mail che stiamo per mandare
    $headers = "From: Esempio <esempio@esempio.com>\r\n";

    /* Puliamo il testo e l'oggetto dagli slashs messi in automatico
    dopo il post dei dati */
    $subject = stripslashes($_POST['subject']);
    $text = stripslashes($_POST['text']);

    /* Cicliamo il risultato della query e assegnamo
    l'indirizzo e-mail alla variabile $to */
    while (list($to) = mysql_fetch_row($res)) {
      /* e ora inviamo la news */
      mail($to, $subject, $text, $headers);
    }
  } else {
   // Uno o più campi sono vuoti
  }
} else {
  /*
   Il contenuto della form non è arrivato, questo può succedere
   se si accede a questa pagina direttamente senza fare il
   submit da form_send_news.php
  */
}

?>

Funzionare funziona eh però ho un problema, ovviamente queste pagine devono rimanere "riservate" anche perchè sennò un qualsiasi visitatore può mandare email agli iscritti del sito. Avevo in mente di inserire una richiesta di password per il form mentre per il send_news.php inserire un controllo sulla provenienza

$provenienza = $_SERVER['HTTP_REFERER'];

if ( ??????)

Ma come lo metto? Sono idee valide o c'è qualcosa di più semplice? :D

Saluti e grazie infinite

inviato 9 anni fa
bububu
modificato 9 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda