Invio MP a destinatari multipli

di il
3 risposte

Invio MP a destinatari multipli

Ciao a tutti! Sono qui per un aiuto urgente...sul mio sito ho sviluppato un sistema di messaggistica interna dove gli utenti possono inviarsi messaggi privati tra loro,funziona tutto bene se non fosse che vorrei inserire la possibilità di inviare lo stesso messaggio contemporaneamente a più utenti.E possibilmente usando tra un nome e l'altro un separatore come la "," o il ";".
Non so come fare..non sono un programmatore professionista.Qualcuno saprebbe aiutarmi nella scrittura del pezzo mancante di codice?Ve ne sarei infinitamente grato!
Questa è la tabella del database:

di seguito il codice per l'invio del messaggio:
<?php
session_start();
require 'settings/testi.php';
require '../../config/includes_into.php';
require 'script/bbdecoder.php';

$id_utente=$_SESSION['id_pg'];

$db=dbconnect();

if (isset ($_GET['id_destinatario']))
    {
        
        #trovo il nome del destinatario
        $rs = query ("SELECT nome FROM personaggi WHERE id = " . $_GET['id_destinatario']);
        $destinatario_impostato = $rs['nome'];
        $suono = $rs['suono'];
    
    }
    
    else
    
    {
        
        $destinatario_impostato="";
          
    }


if (isset ($_POST['destinatario']))
{
    $destinatario=$_POST['destinatario'];
    $suono=$_POST['suono'];
    
    $rs = query ("SELECT id FROM personaggi WHERE nome = '$destinatario'");
    $destinatario = $rs['id'];
    $suono = $rs['suono'];
    
    if (isset ($_POST['titolo'])) { $titolo=$_POST['titolo']; $titolo=str_replace("'","''", $titolo);} else { $titolo="Nessun titolo"; }
    if (isset ($_POST['testo'])) { $testo=$_POST['testo']; $testo=str_replace("'","''", $testo); } else { $testo="Nessun testo"; }
    
    
    #inserisco il nuovo messaggio
                $rs = "INSERT INTO messaggi_on (mittente, destinatario, titolo, testo, data) VALUES('$_SESSION[id_pg]', '$destinatario', '$titolo', '$testo', NOW())";
                $Result = mysql_query($rs);
    
                #inserisco i log
                $rs = "INSERT INTO messaggi_inviati (mittente, destinatario, titolo, testo, data) VALUES('$_SESSION[id_pg]', '$destinatario', '$titolo', '$testo', NOW())";
                $Result = mysql_query($rs);
                
                #inserisco i log
                $rs = "INSERT INTO log_messaggi_on (mittente, destinatario, titolo, testo, data) VALUES('$_SESSION[id_pg]', '$destinatario', '$titolo', '$testo', NOW())";
                $Result = mysql_query($rs);
                
    query("UPDATE personaggi SET suono = 1, sound = 1 WHERE id = '$destinatario'");
    
    
    echo '<p style="text-align: center; border: 0px #b12d0d dotted; width: 100%; background-color: transparent; color: #000;"class="lato";>';
        echo'MESSAGGIO INVIATO!';
        echo '</p>';
}
mysql_close();

?>
<!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 http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>RedsunsetGdr</title>
<link rel="stylesheet" href="../../css/stile_dentro.css" type="text/css" />
<link rel="stylesheet" href="../stile/fontface.css" />
<style>
    body {
    background-color: transparent;
    color: #777575;
    }
    .titolo_stile {     
        font-family: goodtime;
        font-size: 15px;
        color: #777575;
        text-align: center;
        line-height: 20px;
        padding: 3px;
        margin: 5px 5px 5px 5px;
        background-color: #1c0101;
    }
    .p_stile {     
        font-family: goodtime;
        font-size: 10px;
        color: #777575;
        text-align: center;
        line-height: 12px;
        padding: 2px;
        margin-top: 5px;
        background-color: #1c0101;
        height: 20px;
        border: 0px;
    }
    .p_stile {     
        font-family: Verdana;
        font-size: 10px;
        color: #777575;
        text-align: center;
        padding: 2px;
        margin-top: 5px;
        background-color: #1c0101;
        height: 20px;
        border: 0px;
    }
    .testo {     
        font-family: goodtime;
        font-size: 11px;
        color: #777575;
        text-align: center;
        line-height: 12px;
        padding: 2px;
        margin-top: 5px;
        background-color: #1c0101;
        height: 400px;
        width: 80%;
    }
    
    .submit {
  background-color: rgb(102, 4, 5); /* colore di sfondo    */
  font-family:Baskerville, "Palatino Linotype", Palatino, "Century Schoolbook L", "Times New Roman", serif;
  border: 1px solid rgb(223, 185, 71); /* bordo dell'elemento */
  border-radius:5px;
  color: rgb(223, 185, 71);               /* colore del testo    */
  font-weight: bold;         /* testo in grassetto  */
  padding: 0;                /* padding             */
  height: 25px;              /* altezza             */
  width: 80px;               /* larghezza           */
  box-shadow: 2px 2px 5px #9C9999;   /*ombra */

 
}
    </style>
</head>
<body>
    <center>
      <td style="text-align: center; border: 0px #fff solid;"><div style="background-image: url(/bacheca/bottoni/indietro_rispondi.png); margin-left: 0px; width: 220px; height: 35px; border: 0px #b12d0d dotted; line-height: 33px; font-size: 15px; color: #b12d0d;margin-top:-15px;" class="lato">
        <p><a href="messaggi_arrivo.php" style="color: #8e0906; font-weight: bold; font-family: Palatino Linotype; text-decoration: none; " class="lato">
        <span style="color: rgb(102, 102, 102); font-weight: bold;">[</span><span
 style="color: rgb(153, 0, 0); font-weight: bold;">Ricevute</span><span
 style="color: rgb(102, 102, 102); font-weight: bold;">]</span>
 </a> <a href="messaggi_inviati.php" style="color: #8e0906; font-family: Palatino Linotype; font-weight: bold; text-decoration: none;" class="lato">
 <span style="color: rgb(102, 102, 102); font-weight: bold;">[</span><span
 style="color: rgb(153, 0, 0); font-weight: bold;">Inviate</span><span
 style="color: rgb(102, 102, 102); font-weight: bold;">]</span>
</a></p>
        </div>
    </td>
<form action="nuovo_messaggio.php" method="post">
    <table
 style="border: 0px dotted rgb(177, 45, 13); background-color: transparent; color: rgb(0, 0, 0);"
 class="lato" ;="" cellpadding="2" cellspacing="2"
 width="580">
  <thead><tr>
    <td
 style="text-align: left; font-family: 'Palatino Linotype'; font-weight: bold; font-style: normal; font-size: 13px;">
Destinatario:
    <input value="<?php echo $destinatario_impostato; ?>"
 name="destinatario"
 style="border: 1px solid rgb(0, 0, 0); text-align: left; width: 50%; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);"
 class="lato" ;="" type="text">
  </td>
  </tr>
  </thead>
  <tbody>
    <tr>
      <td
 style="text-align: left; font-family: Baskerville,'Palatino Linotype',Palatino,'Century Schoolbook L','Times New Roman',serif; font-size: 12px; font-weight: bold;"
 height="17">Oggetto: &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp;
      <input name="titolo"
 style="border: 1px solid rgb(0, 0, 0); text-align: left; width: 50%; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);"
 class="lato" ;="" type="text"></td>
    </tr>
    <tr>
      <td
 style="text-align: center; font-size: 14px; font-weight: bold;">
      <p>Inserisci il testo qui:</p>
      </td>
    </tr>
    <tr>
      <td style="border: 0px solid rgb(0, 0, 0); text-align: center;">
      <textarea name="testo" id="Testo" cols="100"
 rows="13"
 style="border: 1px solid rgb(0, 0, 0); padding: 5px; background-color: rgb(255, 255, 255);  color: rgb(0, 0, 0);"
 class="lato" ;=""></textarea></td>
    </tr>
    <tr>
      <td style="border: 0px solid rgb(0, 0, 0); text-align: center;">
        <br>
      <input value="Invia" class="submit" type="submit"></td>
    </tr>
  </tbody>
</table>

</form>
</center>
</body>
</html>

3 Risposte

  • Re: Invio MP a destinatari multipli

    Ahem... diciamo che è un pochino rudimentale
    1) usi una libreria super deprecata (spero che non ci sia accesso internet al tuo sito, altrimenti sono dolori)
    2) salvi non so perchè 3 volte il messaggio
    3) per l'invio multiplo hai due possibilità:
    - creare una tabella collegata (normalizzata) con l'elenco dei destinatari per ogni messaggio
    - impacchettare in una stringa la sequenza dei destinatari, seguendo il tuo esempio con un ;
    tizio;caio;sempronio;

    a quel punto puoi
    a) "spacchettare" la stringa, il che puoi fare sia "esplodendola" (PHP) sia parsandola (cioè scrivendo una tua procedurella ad hoc) ed inviare N messaggi (uno per tizio, uno per caio, uno per sempronio eccetera)
    oppure
    a) banalmente nella procedura che legge i messaggi nuovi un controllo del tipo "destinatario LIKE "%IO;%".
    Questo renderà più lenta la query (full search) ma renderà banale l'individuare il destinatario.
    Analogamente il campo "letto" diventerà una stringa, nella quale accoderai man mano gli utenti che hanno letto

    ci sono anche altre possibilità, queste sono le più immediate (sullo schema che hai proposto)
  • Re: Invio MP a destinatari multipli

    Ma difatti l'ho anticipato che sono alle prime armi con il php e la programmazione in generale.Ti ringrazio per la risposta e per gli accorgimenti che mi dai,ma appunto non essendo pratico di tutto,non so come "esplodere" la stringa,detta molto semplicemente non so come e dove si scrive all'interno del codice che ho postato.
    Ti sarei infinitamente grato se tu mi aiutassi in quel senso,per il resto ho capito il ragionamento della tabella del DB
  • Re: Invio MP a destinatari multipli

    Puoi usare l'apposita funzione explode di PHP la quale prende come primo parametro il delimitatore (esempio: ; ) e come secondo la stringa.
    ritorna un vettore
    
    $utenti="tizio;caio;sempronio;";
    $esploso=explode(";", $utenti);
    echo $esploso[0]; 
    echo $esploso[1]; 
    echo $esploso[2]; 
    
Devi accedere o registrarti per scrivere nel forum
3 risposte