- Home
- Categorie
- Coding e Sistemistica
- PHP
- sessione utente elimina chat
-
risolto
1 Risposta
-
@imperor Grazie però se aggiungi anche come hai risolto sarebbe ottimo
Ad ogni modo il codice sopra ha diversi problemi principalmente di sicurezza, ovvero se lo metti in produzione e i bucano il sito sai il perché.
Per esempio le variabili globali vanno sempre sanitizzate, sempre, proprio perché poi la usa per fare una query al DB.
https://www.php.net/manual/en/function.filter-input.php
E prima di stampare valori presi dal DB anche questi vanno sanitizzati/escaped.
I 1 Risposta -
@overclokk ciao no non ho risolto riesco a eliminare chi invia ma no chi riceve ho riprovato ma elimina chi riceve ma no chi invia come posso fare per eliminare sia chi riceve e chi invia? ho scaricato la chat messaggio privato su YouTube in effetti in fase di registrazione non controlla se la mail è esistente il sito l'ho caricato sul mio dominio fcfclean.it/sito utente Francesco pass albachiara/12 è una pass di test sono riuscito anche a resettare la pass dimenticata 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ò
2 Risposte
-
@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 -
@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;
-
la sessione è user_id
1 Risposta
-
@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 -
@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; } } ?>
-
@oceweb ariciao
ho fatto come mi hai detto e funziona!
grazie x l'aiuto
1 Risposta
-
@imperor Prego
I 1 Risposta -
@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; } }
1 Risposta
-
@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 -
@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 -
@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
-
@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>