Ciao a tutti, sono nuovo del forum e anche del php
(il mio livello di conoscenza del linguaggio è sotto zero, siate clementi)
sto cercando di adattare un form per l'iscrizione a una serie di mailing list in modo che venga incorporato nelle pagine del mio cms (drupal-linux).
temo che nel form originale ci sia qualche errore di codice ( è il form per l'iscrizione alle mailing list della più famosa azienda di hosting italiano)..
vi allego il loro codice originale:
Codice PHP:
<?php
//aprile2008- modifica per host linux
$imposta = ini_set("sendmail_from", "postmaster@tuodominio.com");
if (!$imposta) { print "Non posso impostare sendmail_from!
\n"; }
//fine modifica aprile 2008
//'''''''''' inserire il nome del dominio
$DOMAIN='miodominio.com';
//'''''''''' inserire il nome della lista o delle liste
$LISTS[]='mailinglistuno';
$LISTS[]='altra_mailinglist';
//''''''''fine configurazione
$response_template='
<center>
<div align="center">
<table border="0" cellspacing="1" cellpadding="2" width="570">
<tr>
<td align="center">
%%ACTION%% %%LIST%%@%%DOMAIN%%
</td>
</tr>
<tr>
<td class="response">
Riceverai una mail a breve su "%%ADDRESS%%". Quello che devi fare è usare la funzione "Rispondi" del tuo client di posta
ed inviare tale risposta: non è necessario scrivere nulla.
</td>
</tr>
</table>
</div>
</center>
';
?>
<html>
<head>
<title>Iscrizione a mailing-list in php</title>
<style>
body {
background-color:#ffcb8c;
color:white;
}
td { background-color:#ffcb8c; color:red; font-weight:bold;font-family:verdana;}
td.response { background-color:#ffca000; color:red; font-weight:normal; font-family:verdana; }
</style>
</head>
</body>
<center><div align="center">
<table border="0" cellspacing="0" cellpadding="0" width="570">
<form method="post">
<tr>
<td align="center">Indirizzo email</td>
<td align="center">Nome Lista / Azione</td>
<td align="left"></td>
</tr>
<tr>
<td align="center"><input type="text" value="<?php echo $_GET['a']; ?>" name="addy" size="30"></td>
<td align="center"><select name="list"><?php
if ( is_array($LISTS)) {
foreach ( $LISTS as $val ) {
echo '<option value="'.$val.'">'.$val.'@'.$DOMAIN.chr(10);
}
}
?></select><select name="action"><option value="subscribe">Iscriviti<option value="unsubscribe">Rimuovi iscrizione</select></td>
<td align="left"><input type="submit" value="GO!"></td>
</tr>
</form>
</table>
</center></div>
<?php
switch ( $_POST['action'] ) {
case 'subscribe':
if ( !empty($_POST['addy']) ) {
if ( mail($list.'-subscribe-'.str_replace('@', '=', $_POST['addy']).'@'.$DOMAIN ,'iscrizione', 'iscrizione') ) {
show_tpl($response_template, 'ISCRITTO A: ', $list, $DOMAIN, $_POST['addy']);
}
}
break;
case 'unsubscribe':
if ( !empty($_POST['addy']) ) {
if ( mail($list.'-unsubscribe-'.str_replace('@', '=', $_POST['addy']).'@'.$DOMAIN ,'annulla iscrizione', 'annulla') ) {
show_tpl($response_template, 'RIMOSSO DA: ', $list, $DOMAIN, $_POST['addy']);
}
}
break;
}
function show_tpl($tpl, $action, $list, $domain, $address) {
$tpl=str_replace('%%ACTION%%', $action, $tpl);
$tpl=str_replace('%%LIST%%', $list, $tpl);
$tpl=str_replace('%%DOMAIN%%', $domain, $tpl);
$tpl=str_replace('%%ADDRESS%%', $address, $tpl);
echo $tpl;
}
?>
</body>
</html>
e successivamente il mio, che ho modificato dopo ore e ore di prove...
il mio ri-adattamento sembra funzionare solo in presenza di un'unica mailing list:
se inserisco 2 o più mailing list, mi viene seleziona sempre l'ultimo indirizzo.. dovrebbe essere una stupidaggine per chi lo capisce.. ma purtroppo non ho nessuno a cui chiedere.
Codice PHP:
//NOTE: nella mia modifica ho tolto la sintassi html(body, title, ecc) dato che dovevo inglobarlo in una pagina di un CMS
//ho inoltre verificato che la funzione "sendmail_from" funziona SOLAMENTE per php su win ( :-S che gente!!! )
//quindi ho rimosso anche quelle righe. Successivamente mi sono accorto che nel loro codice non veniva passato il nome
//della mailing list alla funzione che doveva spedire le mail e (provando a tentoni) ho sostituito la variabile $list
//alla loro $val ... ora la mail di iscrizione/rimozione viene correttamente ricevuta ma SOLO riguardante l'ULTIMA lista
<?php
$DOMAIN='miodominio.com'; //nome del dominio
$LISTS[]='listauno'; // le varie mailing list
$LISTS[]='listadue';
$LISTS[]='listatre';
$response_template='
<center>
<div align="center">
<table border="0" cellspacing="1" cellpadding="2" width="570">
<tr>
<td align="center">
%%ACTION%% %%LIST%%@%%DOMAIN%%
</td>
</tr>
<tr>
<td class="response">
Riceverai una mail a breve su "%%ADDRESS%%". Quello che devi fare è usare la funzione "Rispondi" del tuo client di posta
ed inviare tale risposta: non è necessario scrivere nulla.
</td>
</tr>
</table>
</div>
</center>
';
?>
<style>
td { background-color:#ffca05; color:black; font-weight:bold;font-family:verdana;}
td.response { background-color:#ff8800; color:black; font-weight:normal; font-family:verdana; }
</style>
<div align="center">
<center>
<table border="0" cellspacing="0" cellpadding="0" width="570">
<form method="post">
<tr>
<td align="center">Indirizzo email</td>
<td align="center">Nome Lista / Azione</td>
<td align="left"></td>
</tr>
<tr>
<td align="center"><input type="text" value="<?php echo $_GET['a']; ?>" name="addy" size="30"></td>
<td align="center"><select name="list"><?php
if ( is_array($LISTS)) {
foreach ( $LISTS as $list ) {
echo '<option value="'.$list.'">'.$list.'@'.$DOMAIN.chr(10);
}
}
?>
</select><select name="action"><option value="subscribe">Iscriviti<option value="unsubscribe">Rimuovi iscrizione</select></td>
<td align="left"><input type="submit" value="invia"></td>
</tr>
</form>
</table>
</center>
</div>
<?php
switch ( $_POST['action'] ) {
case 'subscribe':
if ( !empty($_POST['addy']) ) {
if ( mail($list.'-subscribe-'.str_replace('@', '=', $_POST['addy']).'@'.$DOMAIN ,'iscrizione', 'iscrizione') ) {
show_tpl($response_template, 'ISCRITTO A: ', $list, $DOMAIN, $_POST['addy']);
}
}
break;
case 'unsubscribe':
if ( !empty($_POST['addy']) ) {
if ( mail($list.'-unsubscribe-'.str_replace('@', '=', $_POST['addy']).'@'.$DOMAIN ,'annulla iscrizione', 'annulla') ) {
show_tpl($response_template, 'RIMOSSO DA: ', $list, $DOMAIN, $_POST['addy']);
}
}
break;
}
function show_tpl($tpl, $action, $list, $domain, $address) {
$tpl=str_replace('%%ACTION%%', $action, $tpl);
$tpl=str_replace('%%LIST%%', $list, $tpl);
$tpl=str_replace('%%DOMAIN%%', $domain, $tpl);
$tpl=str_replace('%%ADDRESS%%', $address, $tpl);
echo $tpl;
}
?>
Ringrazio di cuore per ogni suggerimento