• User Attivo

    @imperor Senza la struttura della tabella è difficile darti una soluzione. Tuttavia, al di là di eventuali problemi di sicurezza che potrebbero esserci, così come elimini per "to_id" la chat del mittente, dovresti eliminare anche le righe per un ipotetico "from_id", cioè inviato da.

    Se pubblichi la struttura della tua tabella chat, magari possiamo darti qualche informazioni più precisa...


    I 1 Risposta
  • User Attivo

    @oceweb ciao questa è la struttura delle tabelle sia conversazione e chat

    
    -- Struttura della tabella `chats`
    --
    
    CREATE TABLE `chats` (
      `chat_id` int(11) NOT NULL,
      `from_id` int(11) NOT NULL,
      `to_id` int(11) NOT NULL,
      `message` text NOT NULL,
      `opened` tinyint(1) NOT NULL DEFAULT 0,
      `create_datetime` datetime NOT NULL DEFAULT current_timestamp()
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    
    -- --------------------------------------------------------
    
    --
    -- Struttura della tabella `conversations`
    --
    
    CREATE TABLE `conversations` (
      `conversation_id` int(11) NOT NULL,
      `user_1` int(11) NOT NULL,
      `user_2` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
    
    

  • User Attivo

    la sessione è user_id


    oceweb 1 Risposta
  • User Attivo

    @imperor ha detto in sessione utente elimina chat:

    la sessione è user_id

    Immagino che user_id corrisponda ad user_1 nel caso del mittente ed user_2 nel caso del destinatario, giusto? Mi sfugge, tuttavia, la relazione tra "conversations" e "chats". Se "conversation_id" è relazionato con "chat_id" la vedo una ridondanza inutile...

    Ad ogni modo, come ti dicevo, basandomi solo sulla tabella "chats", hai il campo "from_id" e "to_id" che dovrebbero indicare rispettivamente chi lo manda e chi lo riceve. A questo punto se la tua sessione conserva l'id dell'utente, invece di fare casini su questo dato, io eliminerei il singolo messaggio in chat direttamente per "chat_id", visto che, da quanto pare di capire, la tabella è unica e tutti i messaggi finiscono lì dentro. Rimosso per ID, se il messaggio è presente una sola volta, sparisce per tutti.


    I 2 Risposte
  • User Attivo

    @oceweb ciao sinceramente non ho provato come mi hai detto ti mostro il codice dove preleva i messaggi sia inviati e ricevuti e li mostra nel file chat.php

    <?php 
    
    function getChats($id_1, $id_2, $conn){
       
       $sql = "SELECT * FROM chats
               WHERE (from_id=? AND to_id=?)
               OR    (to_id=? AND from_id=?)
               ORDER BY chat_id ASC";
        $stmt = $conn->prepare($sql);
        $stmt->execute([$id_1, $id_2, $id_1, $id_2]);
    
        if ($stmt->rowCount() > 0) {
        	$chats = $stmt->fetchAll();
        	return $chats;
        }else {
        	$chats = [];
        	return $chats;
        }
    
    }
    
    ?>
    
    

  • User Attivo

    @oceweb ariciao 🙂 ho fatto come mi hai detto e funziona! 😋 grazie x l'aiuto


    oceweb 1 Risposta
  • User Attivo

    @imperor Prego 😉


    I 1 Risposta
  • User Attivo

    @oceweb ciao e buongiorno 🙂 non capisco perchè le conversazioni che sono nella home.php riesco a eliminarla solo con: user_1 oppure user_2 ma se provo a inserire conversation_id non funziona posto il codice dove stampa a video le conversazioni

    function getConversation($user_id, $conn){
        /**
          Getting all the conversations 
          for current (logged in) user
        **/
        $sql = "SELECT * FROM conversations
                WHERE user_1=? OR user_2=?
                ORDER BY conversation_id DESC";
    
        $stmt = $conn->prepare($sql);
        $stmt->execute([$user_id, $user_id]);
    
        if($stmt->rowCount() > 0){
            $conversations = $stmt->fetchAll();
    
            /**
              creating empty array to 
              store the user conversation
            **/
            $user_data = [];
            
            # looping through the conversations
            foreach($conversations as $conversation){
                # if conversations user_1 row equal to user_id
                if ($conversation['user_1'] == $user_id) {
                	$sql2  = "SELECT *
                	          FROM users WHERE user_id=?";
                	$stmt2 = $conn->prepare($sql2);
                	$stmt2->execute([$conversation['user_2']]);
                }else {
                	$sql2  = "SELECT *
                	          FROM users WHERE user_id=?";
                	$stmt2 = $conn->prepare($sql2);
                	$stmt2->execute([$conversation['user_1']]);
                }
    
                $allConversations = $stmt2->fetchAll();
    
                # pushing the data into the array 
                array_push($user_data, $allConversations[0]);
            }
    
            return $user_data;
    
        }else {
        	$conversations = [];
        	return $conversations;
        }  
    
    }
    

    oceweb 1 Risposta
  • User Attivo

    @imperor Assicurati che ciò che ti ritorna da questa funzione, che dovrebbe essere un array, abbia il conversation_id. Prova con var_dump sul risultato per vedere cosa ti arriva.


    I 1 Risposta
  • Moderatore

    @imperor ha detto in sessione utente elimina chat:

    non sono un programmatore ma autodidatta il sito è x l'amministratore di condominio dove i condomini si registrano e possono scaricare i doc inviati da l'amministratore e cambiare la foto profilo ho fatto anche la parte admin devo dire che non credo che il sito sia sicuro sto cercando un programmatore logico pagando x sistemare ciò

    Io capisco e apprezzo la buona volontà ad imparare cose nuove, se questo rimane sulla tua macchina va bene fare prove|errori, tutti abbiamo cominciato così, ma se questo deve andare in produzione prima che vengano risolti i problemi di sicurezza questo è un problema, un grosso problema.


    I 1 Risposta
  • User Attivo

    @overclokk si concordo in effetti come ho già scritto la chat l'ho scaricata su YouTube fino al 2005 programmavo il mirc con il vincula lo usavo per proteggere le ex chat msn 😋 sinceramente era più facile scrivere il codice


  • User Attivo

    @oceweb ciao e buona domenica 🙂 sono riuscito a eliminare la chat ora sia l'utente A e B possono eliminare la chat ma la conversazione la può eliminare solo chi invia o chi riceve non riesco a capire cosa manca posto i codici ```

    <?php 
    
    function getConversation($user_id, $conn){
        /**
          Getting all the conversations 
          for current (logged in) user
        **/
        $sql = "SELECT * FROM conversations
                WHERE user_1=? OR user_2=?
                ORDER BY conversation_id DESC";
    
        $stmt = $conn->prepare($sql);
        $stmt->execute([$user_id, $user_id]);
    
        if($stmt->rowCount() > 0){
            $conversations = $stmt->fetchAll();
    
            /**
              creating empty array to 
              store the user conversation
            **/
            $user_data = [];
            
            # looping through the conversations
            foreach($conversations as $conversation){
                # if conversations user_1 row equal to user_id
                if ($conversation['user_1'] == $user_id) {
                	$sql2  = "SELECT *
                	          FROM users WHERE user_id=?";
                	$stmt2 = $conn->prepare($sql2);
                	$stmt2->execute([$conversation['user_2']]);
                }else {
                	$sql2  = "SELECT *
                	          FROM users WHERE user_id=?";
                	$stmt2 = $conn->prepare($sql2);
                	$stmt2->execute([$conversation['user_1']]);
                }
    
                $allConversations = $stmt2->fetchAll();
    
                # pushing the data into the array 
                array_push($user_data, $allConversations[0]);
            }
    
            return $user_data;
    
        }else {
        	$conversations = [];
        	return $conversations;
        }  
    
    }
    ---------------------------
     <ul id="chatList"
        		    class="list-group mvh-50 overflow-auto">
        			<?php if (!empty($conversations)) { ?>
        			    <?php 
    
        			    foreach ($conversations as $conversation){ ?>
    	    			<li class="list-group-item">
    	    				<a href="chat.php?user=<?=$conversation['username']?>"
    	    				   class="d-flex
    	    				          justify-content-between
    	    				          align-items-center p-2">
    	    					<div class="d-flex
    	    					            align-items-center">
    	    					    <img src="uploads/<?=$conversation['p_p']?>"
    	    					         class="w-10 rounded-circle">
    	    					    <h3 class="fs-xs m-2">
    	    					    	<?=$conversation['name']?><br>
                          <small>
                            <?php 
                              echo lastChat($_SESSION['user_id'], $conversation['user_id'], $conn);
                            ?>
                          </small>
    	    					    </h3>            	
    	    					</div>
    	    					<?php if (last_seen($conversation['last_seen']) == "Active") { ?>
    		    					<div title="online">
    		    						<div class="online"></div>
    		    					</div>
    	    					<?php } ?>
    	    				</a>
    						<a href="deleteconv.php?user_2=<?=$conversation['user_id']?>" class="btn btn-danger"><i class="fa fa-trash-o"></i> Elimina messaggi</a>
    	    			</li>