[PHP] Invio MP a destinatari multipli

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
40
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.
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:
capture-png.5166

di seguito il codice per l'invio del messaggio:
PHP:
<?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>
 

Allegati

  • Capture.PNG
    Capture.PNG
    21,6 KB · Visite: 531
Buongiorno, potresti replicare i messaggi per gli N destinatari che ti interessano, ossia, quando imposti il destinatario (credo che attualmente tu lo faccia scrivere a mano), potresti prevedere l'inserimento di più destinatari separandoli da ",", ";", "|", "~" etc, ma questa sarebbe una soluzione da evitare, nulla vieta il suo possibile utilizzo.
Dato che hai già scritto il codice, proverei al massimo la modifica dell'input "destinatario" in una select multipla, così che potrai scorrere gli utenti e inserirli all'interno del DB.

Quindi quando andrai a visualizzare $_POST['destinatario'] avrai un'altro array quindi a rigor di logica dovrai fare le insert all'interno del ciclo:
$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'");
Tutta la parte di cui sopra dovrà essere inserita all'interno di:
PHP:
foreach($_POST['destinatario'] as $chiave=>$valore){
     //tutto il codice sopra per recuperare l'ID dell'utente etc...

   ///Tutto il codice per effettuare l'insert
}
Questa sembrerebbe la strada da te perseguita per come hai scritto sia il DB che la logica d'inserimento.
Volendo fare un salto di qualità, provvederei a rimodellare il DB in modo più consono, con l'utilizzo di 3 tabelle, rispettivamente:
  1. Utenti
    1. id
    2. username
    3. etc....
  2. Messaggi
    1. id
    2. id_mittente
    3. titolo
    4. messaggio
  3. Messaggi_Inviati
    1. id (lo metto x comodità non servirebbe)
    2. id_messaggio
    3. utente_destinatario
In parole povere: quando l'utente invia un messaggio, nella tabella Messaggi memorizzi solo il mittente,titolo,messaggio, una volta effettuata l'insert recuperi l'ultimo id inserito (ossia l'id del messaggio corrente), e nella tabella Messaggi_Inviati memorizzi l'id del messaggio corrente con gli id dei destinatari. Il tutto modellato a dovere, con tutti i casi che dovrai prevedere, sarà di più facile gestione, esecuzione, velocità.
Bada bene è un consiglio, le alternative sono equipollenti.
 
Ti ringrazio infinitamente.Proverò con il metodo da te indicato.
Ma se volessi invece utilizzare quello da te sconsigliato?ossia separare i nomi dei vari utenti con una virgola o altro simbolo?come andrebbe fatto?
 
Porto nuovamente all'attenzione il post.
Qualcuno saprebbe aiutarmi per quanto riguarda l'uso del separatore come le "," o i ";" per inserire più destinatari?
grazie in anticipo
 
Se hai i nomi degli utente dentro l'array devi assegnare alla variabile contenente il valore da inserire nel db il join che ti ho detto...
Sappi che non è il modo migliore, abbastanza lento!
 

Discussioni simili