Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 38
  1. #1

    Problema cancellazione messaggi privati

    Ciao a tutti.. sto da un pò di tempo combattendo con i messaggi privati...Ho praticamente finito ma mi sono accorto di una cosa che è un vero problema....

    ho questa tabella per i messaggi privati:


    id_messaggio (contiene l'id univoco autoincrement)
    message_unique_id (id univoco di 10 cifre creato random per permettermi le risposte)
    id_utente_sender (id dell'utente che spedisce il messaggio)
    id_utente_ric (id dell'utente a cui è destinato il messaggio)
    titolo_messaggio
    messaggio
    data_ora_messaggio
    letto (mi segna se è stato lettoo meno il messaggio)
    esiste (mi vede se il messaggio è stato cancellato o meno)


    a questo punto mi si pone un grandissimo problema....Se io metto a 0 la variabile esiste,il che nella query vuol dire che non me lo mostra più....la stessa cosa succederà anche all'altro utente che con me condivide il messaggio....Quindi anche lui non lo vedrà più!
    Sto cercando disperatamente una soluzione per ovviare a questo inconveniente senza smantellare tutto il codice...potete aiutarmi per favore???

  2. #2
    grandi idee su come funzionano i pvt sinceramente non ce l'ho, ma nello specifico della tua richiesta opterei per mettere nel campo "esiste" un codice che mi chiarisca "per chi" esiste.

    es:

    0 = non esiste piu' per entrambi
    1 = esiste per entrambi
    2 = esiste per il sender
    3 = esiste per il ricevente

    la query del sender sara' del tipo: .... where esiste in(1,2)

    per il ricevente ... where esiste in(1,3)

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    mmm grande idea...vediamo come la potrei adattare a quello che ho già scritto...

    innanzitutto io ho una query che mi conta i messaggi che ho per poi impaginarmeli...quindi quel campo esiste mi aiutava a contarli....ed era in questo modo:

    Codice PHP:

    $count 
    mysql_query("SELECT COUNT(*) FROM messaggio_privato WHERE esiste=0 AND (id_utente_ric=$id_utente OR id_utente_sender=$id_utente) ");
    $res_count mysql_fetch_row($count);
    $tot_records $res_count[0]; 
    Quindi integrando quella cosa come potrei fare? Purtroppo non sono un grandissimo nello scrivere le query..



    Poi ho la parte che comincia a tirarmi fuori i messaggi

    Codice PHP:

    $query_limit 
    mysql_query("SELECT * FROM messaggio_privato WHERE evidenza=1 AND esiste=0 AND (id_utente_ric=$id_utente OR id_utente_sender=$id_utente) ORDER BY last_update DESC LIMIT $primo$per_page");
    while(
    $results mysql_fetch_array($query_limit)) 
     {  
    // apro parentesi del while iniziale che mi estrae tutti i messaggi ricevuti
       
    $id_messaggio=$results['id_messaggio'];
       
    $message_unique_id=$results['message_unique_id'];
       
    $id_utente_sender=$results['id_utente_sender'];
       
    $id_utente_ric=$results['id_utente_ric'];
       
    $titolo_messaggio=$results['titolo_messaggio'];
       
    $messaggio=$results['messaggio'];
       
    //continua l'estrazione... 
    ed in effetti è quì dentro che poi controllo se sono io il sender o sono il ricevente...

    Come potrei fare??

  4. #4
    Utente di HTML.it L'avatar di polinet
    Registrato dal
    Nov 2000
    Messaggi
    993
    stampa il campo "esiste" e lavoraci sopra.
    Codice PHP:
    if($esiste == 1// etc....
    {
    // esiste per entrambi
    }elseif($etc.....)
    {
    //sperimenta!

    comunque il campo "esiste" lo passerei come variabile non come: esiste=0


    piero.mac ti ha dato ottime soluzioni.
    ¿Hasta la pasta?

  5. #5
    si infatti voglio assolutamente usare la soluzione di piero che mi ha dato un'idea fantastica!

    che intendi per passarlo come variabile?Come farlo?

  6. #6
    non so come ti sei strutturato, ma rifacendomi ai pvt di questo forum la selezione dei messaggi e' suddivisa tra inviati e ricevuti (inbox e messaggi inviati) e quindi la selezione dei messaggi avverra' per utente + messaggi ricevuti per inbox e utente + messaggi inviati per sender

    quindi a seconda della scelta ci sara' l'impostazione nel where del codice relativo per il campo "esiste" come suggerito. Poi con il tuo attuale:

    (id_utente_ric=$id_utente OR id_utente_sender=$id_utente)

    non sei in condizione di conoscere a priori se e' un messaggio spedito oppure ricevuto. Dovrai, credo, verificarlo ulteriormente in php ... Ed anche evidenza=1 ... quando e' che diventa 1? se l'ho mandato ma non si e' fatta la cosa che manda ad 1 il campo evidenza, il messaggio inviato non compare? Insomma, dipende da come ti sei strutturato il tuo progetto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Ah si scusa il campo evidenza non centra nulla,mi serve solo per una funzione specifica che mi estrae per prima i messaggi che hanno questo campo a 1 e poi gli altri(logicamente con due query diverse..)Perchè voglio dare la possibilità agli utenti di scegliere dei messaggi che rimangono sempre al top della pagina e non vanno nella paginazione per rendergli la lettura più veloce...come se fossero quelli preferiti insomma...
    Più che altro ora ho questa grande falla con il problema dell'esistenza o meno del messaggio da parte dell'utente...

    Allora ho strutturato i miei messaggi privati in questo modo:

    All'apertura della sua casella l'utente entra direttamente in una pagina che gli mostra TUTTI i messaggi sia ricevuti che inviati(Con il link per estrarre solo quelli ricevuti o solo quelli inviati),quindi ho strutturato una prima query che conta tutti i messaggi che ho(esistenti) e poi mi crea la paginazione in base ai messaggi per pagina

    Codice PHP:

    $count 
    mysql_query("SELECT COUNT(*) FROM messaggio_privato WHERE esiste=0 AND (id_utente_ric=$id_utente OR id_utente_sender=$id_utente) ");
    $res_count mysql_fetch_row($count);

    // numero totale di records
    $tot_records $res_count[0];
    //echo" il numero dei messaggi è: $tot_records";

    // risultati per pagina(secondo parametro di LIMIT)
    $per_page 3;

    // numero totale di pagine
    $tot_pages ceil($tot_records $per_page); 

    Quindi a questo punto comincio con l'estrazione....come scritto prima...

    Stavo pensando..Per il primo caso,la conta dei messaggi,potrei fare una query,estrarre i dati,fare il confronto per vedere se sono il sender o meno,vedere se esiste per me o no e contare quanti sono quelli che esistono e quelli che non esistono per ricavarmi,attraverso una semplice sottrazione,la conta effettiva...Che ne dici?

    Poi per il secondo caso...Beh pensavo semplicemente di verificare che per me esista il messaggio e stamparlo solo nel caso che sia vero...

    Che ne pensi?
    Scusami se sono stato poco chiaro,so che dare delle indicazioni avendo una persona davanti che spiega a mozzichi e bocconi è molto molto difficile...
    Vi ringrazio infatti a tutti per questi grandissimi aiuti...

  8. #8
    bisogna farlo contare da SQL. Intanto per capirsi bisogna che ragioniamo su valori identici. Per te mi pare esiste = 0 significa che esiste. non e' molto logico. Premesso che forse hai una tabella di utenti (o no?) come fai ad avere $id_utente?

    Detto questo mi riferisco (per mia comodita') ai supposti valori di "esiste" espressi prima.

    Puoi fare la conta con una UNION e poi sommi semplicemente i risultati ottenuti. es:

    Codice PHP:
    $count mysql_query("SELECT 1, COUNT(*) 
                          FROM messaggio_privato 
                          WHERE esiste IN(1,3) 
                          AND id_utente_ric=
    $id_utente
                          UNION
                          SELECT 2, COUNT(*) 
                          FROM messaggio_privato 
                          WHERE esiste IN(1,2) 
                          AND id_utente_sender=
    $id_utente
                          "
    ;
    while(
    $row mysql_fetch_row($count)) {
       
    $num[] = $row[1];
    }

    $tot_records array_sum($num); 
    in questo modo puoi anche sapere quanti sono i campi sia da rx che da tx. Nota che ho messo 1 e 2 prima di count(*), bene, ci vogliono perche' nel caso di risultato uguale la UNION sovrascriverebbe il record e te ne renderebbe solo 1 nel result set.

    ma prima di tutto bisognerebbe normalizzare il campo "esiste" ... assegna quello che ti pare ma necessita che la logica utilizzata sia comprensibile ad entrambi.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Allora ho creato un tipo di autenticazione con le sessioni per cui quando l'utente entra nella propria pagina,si avrà sempre a disposizione il suo id o username.. Praticamente mi basta mettere all'inizio della pagina questo:

    Codice PHP:
    $id_utente$user['id'];
    $nickname=$user['username']; 
    (ho preso spunto dallo script della gestione degli utenti in php proprio quì su html.it...)


    Poi si hai perfettamente ragione,ho messo che quando il campo esiste=0 vuol dire che il messaggio esiste e quando sta a 1 no,effettivamente anche se non era per niente logico non mi cambiava molto perchè avevo solo 2 modi (1 o 0)...Ora invece bisogna definirlo bene perchè altrimenti si diventa matti..La soluzione che hai proposto tu va benissimo

    0 = non esiste piu' per entrambi
    1 = esiste per entrambi
    2 = esiste per il sender
    3 = esiste per il ricevente


    Più tardi provo quella query!
    Per la visualizzazione dei messaggi posso fare la stessa query oppure li mi basta il controllo che dopo aver fatto scorrere i messaggi li stampo solo se il valore del campo esiste ha quello che mi interessa?

  10. #10
    Non voglio rompervi le uova nel paniere.
    Ma io metterei semplicemente un campo booleano EsisteS (per il Sender) ed un EsisteR (per il Receiver). E discriminerei in base a quelli, in base a cosa si sta cercando, senza andare a dover controllare il valore e fare uno SWITCH o un IF con SQL.

    Giusto per mantenere più facile la selezione e modifica dei dati (non devi neanche andarti a rileggere i dati precedentemente impostati, visto che Sender e Receiver sono scollegati).

    Anche l'approccio di piero è comunque interessante!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.