• User

    Problema Array

    Salve,
    ho creato questo codice per inviare messaggi privati, volendo nel campo destinatario possono essere inseriti più destinatari divisi con una virgola:
    [php]<?php
    error_reporting(E_ALL);
    require('include/config.php');

    if(!isset($_SESSION['login']))
    {
    header('Location: /');
    exit;
    }
    elseif(isset($_POST['invia']))
    {
    $destinatario = (isset($_POST['destinatario'])) ? trim($_POST['destinatario']) : '';
    $object = (isset($_POST['object'])) ? trim($_POST['object']) : '';
    $msg = (isset($_POST['msg'])) ? trim($_POST['msg']) : '';

    if(strlen($destinatario) == 0 || strlen($msg) == 0)
    $err_vuoto=true;
    elseif(strlen($msg) < 6)
    $err_corto=true;
    else
    {
    if(strlen($object) == 0)
    {
    $object = 'Nessun Oggetto';
    }
    if(strstr($destinatario,','))
    {
    $data = time();
    $msg = nl2br($msg);

         $explode=explode(',',$destinatario);
    
         foreach($explode as $destinatari)
         {
            $query=mysql_query("SELECT id FROM utenti WHERE user='$destinatari'") OR die(mysql_error());
         }
    
         while($result=mysql_fetch_array($query))
         {
            $query_msg = mysql_query("INSERT INTO msg (id_mittente, id_destinatario, object, msg, data_invio) VALUES ('{$_SESSION['login']}', '{$result['id']}', '$object', '$msg', '$data')") OR die(mysql_error());
         }
            header('Location: /privata.php?page=msg');
               exit;
      }
      else
      {
         $query_destinatario = mysql_query("SELECT id FROM utenti WHERE user = '$destinatario' LIMIT 1") OR die(mysql_error());
         $array_query = mysql_fetch_array($query_destinatario);
         if($array_query['id'] == $_SESSION['login'])
         {
            $err_user=true;
         }
         elseif(mysql_num_rows($query_destinatario) == 1)
         {
            $data = time();
            $msg = nl2br($msg);
    
            $query_msg = mysql_query("INSERT INTO msg (id_mittente, id_destinatario, object, msg, data_invio) VALUES ('{$_SESSION['login']}', '{$array_query['id']}', '$object', '$msg', '$data')") OR die(mysql_error());
               header('Location: /privata.php?page=msg');
                  exit;
         }
         else
         {
            $err_user1=true;
         }
      }
    

    }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Nuovo Messaggio</title>
    <link rel="stylesheet" href="/theme/style.css" type="text/css">
    </head>
    <body>
    <table>
    <tr>
    <td valign="top">
    <?php require('include/menu.php'); ?>
    </td>
    <td>
    <!-- inizio del form -->
    <table>
    <?php if(isset($err_vuoto)){echo '<strong class="error">- Devi riempire tutti i campi</strong><br />';}elseif(isset($err_corto)){echo '<strong class="error">- Messaggio troppo corto</strong><br />';}elseif(isset($err_user)){echo '<strong class="error">- Non puoi mandarti messaggi da solo</strong><br />';}elseif(isset($err_user1)){echo '<strong class="error">- Nessun Utente registrato con questo NickName</strong><br />';} ?>
    <form action="" method="post">
    <tr><td>Destinatario</td><td><input name="destinatario" type="text" name="destinatario" <?php if(isset($_GET['subpages'])) { echo 'value='.$_GET['subpages'].''; } ?> maxlenght="12" /></td></tr>
    <tr><td>Oggetto</td><td><input name="object" type="text" name="object" maxlenght="12" /></td></tr>
    <tr><td>Testo</td><td><textarea name="msg" id="msg" style="width: 100%; height: 150px;"></textarea><br /></td></tr>
    <tr><td><input name="invia" type="submit" id="invia" value="Invia Messaggio" /></td><tr>
    </form>
    </table>
    <!-- fine del form -->
    </td>
    </tr>
    </table>
    <?php
    require('include/footer.php');
    ?>
    </body>
    </html> [/php]

    Funziona tutto, o quasi, la parte incriminata è appunto quella per inviare pvt multipli:
    [php]if(strstr($destinatario,','))
    {
    $data = time();
    $msg = nl2br($msg);

         $explode=explode(',',$destinatario);
    
         foreach($explode as $destinatari)
         {
            $query=mysql_query("SELECT id FROM utenti WHERE user='$destinatari'") OR die(mysql_error());
         }
    
         while($result=mysql_fetch_array($query))
         {
            $query_msg = mysql_query("INSERT INTO msg (id_mittente, id_destinatario, object, msg, data_invio) VALUES ('{$_SESSION['login']}', '{$result['id']}', '$object', '$msg', '$data')") OR die(mysql_error());
         }
            header('Location: /privata.php?page=msg');
               exit;
      }[/php]
    

    Durante l'explode, se ci sono più destinatari, prende solo l'ultimo.

    Esempio: Account1,Account2,Account3 Il pvt viene inviato solo ad Account3.
    Potete aiutarmi? 😕


  • ModSenior

    Ciao RCayla,

    prova cosi:
    [php]
    if(strstr($destinatario,','))
    {
    $data = time();
    $msg = nl2br($msg);

         $explode=explode(',',$destinatario); 
    
         foreach($explode as $destinatari) 
         { 
            $query=mysql_query("SELECT id FROM utenti WHERE user='$destinatari'") OR die(mysql_error()); 
    

    if(mysql_num_rows($query) > 0)
    {
    $result=mysql_fetch_array($query);
    $query_msg = mysql_query("INSERT INTO msg (id_mittente, id_destinatario, object, msg, data_invio) VALUES ('{$_SESSION['login']}', '{$result['id']}', '$object', '$msg', '$data')") OR die(mysql_error());
    }
    }
    header('Location: /privata.php?page=msg');
    exit;
    [/php]


  • User

    Perfetto funziona, grazie mille 😄


  • ModSenior

    Figurati. 😉

    :ciauz: