[PHP] Invio MP a destinatari multipli

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
37
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: 292

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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.
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
37
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?
 

Andrea_2017

Utente Attivo
17 Set 2017
26
0
1
37
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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
Autore Titolo Forum Risposte Data
G Invio form con PHP PHP 2
A invio massivo dati a file php Javascript 4
P Funzione jQuery Ajax invio file a php jQuery 1
G creazione menu a tendina e invio a pagina php PHP 1
U PHP bottone per invio mail o ritorno al form PHP 15
G Invio mail con php da dati prelevati da un database PHP 9
L [PHP] Invio Immagini PHP 1
AC1 [PHP] Invio Mail PHP 18
I [PHP] Invio sms multipli PHP 4
A [PHP] Invio automatico dati da form PHP 6
ANDREA20 [PHP] Modulo email invio PHP 5
Shyson [PHP] Codice iscrizione e invio avviso nuovi articoli PHP 3
Tommy03 Errore invio email con PHP PHP 1
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
A [PHP] errore 404 e invio mai path pagina con link interrotto PHP 2
A [PHP] Invio messaggio a tutti gli iscritti PHP 2
M [PHP] Problema script ricezione e invio posta... PHP 1
C [PHP] Problema Invio Email Elseif PHP 2
A [PHP] Problema invio mail con funzione mail() PHP 3
Tommy03 Invio email con PHP PHP 3
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
paloppa [PHP] Invio mail da form dubbio PHP 17
bubino8 [PHP] Recupero input senza invio PHP 1
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
S Problema in PHP per invio file XML - RISOLTO- PHP 8
O invio dati suddiviso in con php PHP 2
F Form mail php errore invio PHP 5
K [PHP] Invio dati tramite url PHP 2
Punix [PHP] problema script invio e-mail PHP 2
A [PHP] Invio email quando viene visitata una pagina PHP 7
cobra_72 [PHP] problema invio multiplo allegati mail PHP 21
Z Limite invio newsletter con PHP - mail() PHP 4
S Problema invio form php/html PHP 3
Samuele Ronzani [PHP] Validazione e invio campi form. PHP 7
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
E Rimuovere "dati in memoria" dopo invio mail [PHP] PHP 18
ComfortablyNumb [PHP] Invio sms automatici PHP 1
ANDREA20 [MySQL] [PHP] Invio email ordine MySQL 12
ANDREA20 [PHP] Non riesco ad impostare reset password invio via email PHP 6
Y INVIO AUTOMATICO EMAIL CON PHP PHP 4
ANDREA20 [PHP] Invio ordine via email PHP 14
asevenx [PHP] Errore tasto submit per invio dati non funziona PHP 5
R [PHP] [HTML] Creare script invio modulo contatti PHP 2
F Invio automatico mail php PHP 0
Francesco Polese Errore form invio mail+php PHP 22
R Errore invio mail in php PHP 1
M Errore invio mail da php Posta Elettronica 5
P invio mail da form con dati php PHP 7
P PHP mailer invio form con 2 allegati. PHP 3

Discussioni simili