Visualizzazione risultati 1 fino 23 di 23

Discussione: [php] Richiesta di amicizia fra utenti

  1. #1
    Guest

    Predefinito [php] Richiesta di amicizia fra utenti

    Ciao a tutti...
    Sapete darmi una mano devo fare in modo che 2 utenti possano diventare amici...
    la tabella amici:
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `amici` (
    `
    id_amico_1` int(11) NOT NULL,
    `
    id_amico_2` int(11) NOT NULL,
    `
    accettato` enum('0','1') NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    non so come impostare il codice php per leggere i messaggi degli amici...
    sapete darmi ad dare una sistemata al codice...
    Codice PHP:
    <?php
    $amici
    = mysql_fetch_array(mysql_query("SELECT nickname,foto FROM utente WHERE id_amico_1='{$_COOKIE['nickname']}' OR id_amico_2='{$_COOKIE['nickname']}' AND accettatto=''1"));
    $messaggio = mysql_query("SELECT nickname,data,messaggio FROM messaggio WHERE nickname='zip' ORDER BY data DESC");
    if(
    mysql_num_rows($messaggio) > 0){
    while(
    $messaggio_utente = mysql_fetch_array($messaggio)){
    ?>

    <div class="messaggio">
    <span class="nickname"><?php echo $messaggio_utente['nickname']; ?></span><br>
    <img src="<?php if($amici['foto'] == ""){ echo 'd_silhouette.gif'; }else{ echo $amici['foto']; }?>" width="50px" height="50px" alt="" class="foto">
    <br><?php echo $messaggio_utente['messaggio']; ?>
    </div>

  2. #2
    Guest

    Predefinito

    non ti da un errore il codice di sotto? anche perché hai aperto un ciclo while ma non l'hai chiuso.

    (Cerchi anche tu di vreare un forum? ci sto provando anche io (: )

  3. #3
    Guest

    Predefinito

    Veramente è un social network...^^
    ti spiego ce lai in mente tipo facebook o altri social network una cosa del genere...
    allora:

    io ho una tabella amici composta cosi:
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `amici` (
    `
    id_amico_1` int(11) NOT NULL,
    `
    id_amico_2` int(11) NOT NULL,
    `
    accettato` enum('0','1') NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    prima di tutto dovrei controllare se l'utente connesso e gli utenti registrati sono amici...
    id_amico_1 è quello che ha inviato la richiesta
    id_amico_2 è quello che ha accettato la richiesta
    accettato controlla se la richiesta è stata accettata

    Pensavo di fare cosi prendo id del utente connesso tramite la tabella "utente"
    composta cosi:
    tabella utente
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `utente` (
    `
    id` int(11) NOT NULL AUTO_INCREMENT,
    `
    nickname` varchar(12) NOT NULL DEFAULT '',
    `
    foto` varchar(50) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    poi verifico che id del utente connesso sia in uno dei 2 campi nella tabella "amici" id_amico_1 o id_amico_2 è nella colonna accettato sia uguale ad 1
    se id del utente connesso si trova in uno dei 2 campi e accettato sia uguale ad 1
    vuol dire che sono amici se accettato e uguale ad 0 vuol dire che la richiesta e ancora in sospeso...
    se sono amici mi dovrei collegare alla tabella "messaggio"...
    composta cosi:
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `messaggio` (
    `
    id` int(11) NOT NULL AUTO_INCREMENT,
    `
    nickname` varchar(12) NOT NULL DEFAULT '',
    `
    data` int(11) NOT NULL,
    `
    messaggio` text NOT NULL,
    PRIMARY KEY (`id`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    sapendo il nickname stampare la data e il messaggio partendo dal ultima data nella tabella "amici"....
    e infine tornare alla tabella utente per stampare id e la foto del amico del utente connesso...



    sapete darmi una mano ad impostare il codice php....
    ringrazio anticipatamente....^^

  4. #4
    Guest

    Predefinito

    intendo che nel tuo codice iniziale non hai chiuso il ciclo while, per questo ti dovrebbe dare un errore

  5. #5
    Guest

    Predefinito

    no non centra niente il codice e sbagliato lo avevo chiuso prima nella pagina che ho creato in locale....

    sai darmi una mano con quello che ti ho spiegato prima....

  6. #6
    Guest

    Predefinito

    ah, ok, fammi provare:
    Codice PHP:
    <?php
    //parametri di connessione al database
    $q = "SELECT * FROM `utente` WHERE id = '".$_COOKIE['nickname']."'";
    $ans = mysql_query($q);
    $riga = mysql_fetch_array($ans);
    $nickname = $riga['nickame'];
    $sql = "SELECT * FROM `amici` WHERE id_amico_1 = '$nickname' OR id_amico_2 = '$nickname' AND accettato = 1";
    $query = mysql_query($sql);
    $row = mysql_fetch_array($query);
    $acc = $row['accettato'];
    $amico1 = $row['id_amico_1']; //assegno alla variabile il valore di id_amico_1
    $amico2 = $row['id_amico_2'];

    if(
    $acc == 1){ //assegno alla variabile il valore di id_amico_2
    if ($amico1 == $nickname){ //se amico1 = nickname allora sei l'amico 1
    $friend = $amico1;
    } elseif (
    $amico2 == $nickname){ //se amico2 = nickname allora sei l'amico 2
    $friend = $amico2;
    }
    $nq = "SELECT * FROM messaggio WHERE nickname='$friend' ORDER BY data DESC"
    $nquery = mysql_query($nq);
    if(
    mysql_num_rows($nquery) < 1){
    echo
    "Non ci sono messaggio!";
    } else {
    while(
    $rigo = mysql_fetch_array($nquery)){
    $nick = $rigo['nickname'];
    $data = $rigo['data'];
    $msg = $rigo['messaggio'];
    echo
    "Titolo: $nick<br/>\n
    Data:
    $data<br/>\n
    <br/>\n
    $msg";
    }
    }
    }
    ?>
    In pratica questo codice per prima cosa estrae il nickname partendo dall'id che si ottiene dal cookie (anche se ti consiglio di usare le sessioni) poi verifica se il nickname è presente nella tabella amici in uno dei due campo e se accettato é uguale a 1, poi verifica se tu sei id_amico_1 o id_amico_2 e nel primo caso assegna alla variabile friend il valore di id_amico_2 altrimenti fa il contrario poi estrae dalla tabella messaggio tutti i messaggio in cui il nickname é uguale a friend e stampa a video tutti i messaggi

    In questo caso praticamente seleziona i messaggi del tuo amico (e non i tuoi) dalla tabella messaggi
    devi però perfezionarlo aggiungendo qualche controllo condizionale e personalizzando i messaggi

  7. #7
    Guest

    Predefinito

    Ci sono alcuni errori ma li ho sistemati....
    Codice PHP:
    <?php
    //parametri di connessione al database
    $utente = mysql_fetch_array(mysql_query("SELECT id FROM utente WHERE nickname='{$_COOKIE['nickname']}'"));
    $amici = mysql_fetch_array(mysql_query("SELECT * FROM amici WHERE id_amico_1='{$utente['id']}' OR id_amico_2='{$utente['id']}' AND accettato='1'"));

    $controllo = $amici['accettato'];
    $amico1 = $amici['id_amico_1'];
    $amico2 = $amici['id_amico_2'];

    if(
    $controllo == 1){
    if(
    $amico1 != $utente['id']){
    $amico = $amico1;
    }else{
    $amico = $amico2;
    }

    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico' ORDER BY data DESC");
    if(
    mysql_num_rows($query) < 1){
    echo
    "Nessun messaggio!";
    }else{
    while(
    $rigo = mysql_fetch_array($query)){
    $nickname_utente = mysql_fetch_array(mysql_query("SELECT nickname,foto FROM utente WHERE id='$amico'"));
    $nickname = $nickname_utente['nickname'];
    $data = $rigo['data'];
    $msg = $rigo['messaggio'];
    ?>
    <img src="<?php if($nickname_utente['foto'] == ""){ echo 'd_silhouette.gif'; }else{ echo $nickname_utente['foto'];} ?>" width="50px" height="50px" alt="" class="foto"><br>
    Nickname: <?php echo $nickname; ?><br>
    Data: <?php echo $data; ?><br>
    Messaggio: <?php echo $msg; ?><br><br>

    <?php }}} ?>
    ma sorge un problema si stampa i dati e tutto ma solo quelli del primo utente degli altri che sono anche essi amici e sono stati accettati come amici non li stampa...
    penso che ci sia bisogno di qualche ciclo ma non so di preciso dove....
    perché stampa solo i messaggi del primo utente che e amico...^^

  8. #8
    Guest

    Predefinito

    Codice PHP:
    <?php
    //parametri di connessione al database
    $utente = mysql_fetch_array(mysql_query("SELECT id FROM utente WHERE nickname='{$_COOKIE['nickname']}'"));
    while(
    $amici = mysql_fetch_array(mysql_query("SELECT * FROM amici WHERE id_amico_1='{$utente['id']}' OR id_amico_2='{$utente['id']}' AND accettato='1'"))){

    $controllo = $amici['accettato'];
    $amico1 = $amici['id_amico_1'];
    $amico2 = $amici['id_amico_2'];

    if(
    $controllo == 1){
    if(
    $amico1 != $utente['id']){
    $amico = $amico1;
    }else{
    $amico = $amico2;
    }
    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico' ORDER BY data DESC");
    if(
    mysql_num_rows($query) < 1){
    echo
    "Nessun messaggio!";
    }else{
    while(
    $rigo = mysql_fetch_array($query)){
    $data = $rigo['data'];
    $msg = $rigo['messaggio'];
    while(
    $nickname_utente = mysql_fetch_array(mysql_query("SELECT nickname,foto FROM utente WHERE id='$amico'"))){
    $nickname = $nickname_utente['nickname'];

    $avatar = (!$nickname_utente['foto']) ? 'd_silhouette.gif' : $nickname_utente['foto'];

    echo
    "<img src=\"$avatar\" width=\"50px\" height=\"50px\" class=\"foto\"><br>
    Nickname:
    $nickname<br>
    Data:
    $data<br>
    Messaggio:
    $msg<br><br>";

    }
    }
    }
    }
    ?>
    In teoria così dovrebbe andare, ho messo qualche ciclo while, uno all'inizio per selezionare tutti gli utenti e uno per tutti i messaggi con all'interno uno per selezionare l'utente corrispondente a chi ha scritto i messaggi

  9. #9
    Guest

    Predefinito

    Non funziona fa un ciclo senza fine di un solo messaggio....

  10. #10
    Guest

    Predefinito

    in che senso, ripete sempre lo stesso? bisogna vedere bene i cicli while da tenere e quelli da togliere ce ne deve essere qualcuno di troppo

  11. #11
    Guest

    Predefinito

    lo sistemato.....
    ma ce un problema i messaggi li visualizza ma per ordine per nome....
    tipo
    prima l'utenti con la lettera a
    poi b
    poi c
    cosi via
    non come voglio io in ordine di data maggiore fino a quella minore....
    Codice PHP:
    <?php
    $utente
    = mysql_fetch_array(mysql_query("SELECT id FROM utente WHERE nickname='{$_COOKIE['nickname']}'"));
    $elenco_amici = mysql_query("SELECT * FROM amici WHERE id_amico_1='{$utente['id']}' OR id_amico_2='{$utente['id']}' AND accettato='1'");
    while(
    $amici = mysql_fetch_array($elenco_amici)){

    $controllo = $amici['accettato'];
    $amico1 = $amici['id_amico_1'];
    $amico2 = $amici['id_amico_2'];

    if(
    $controllo == 1){
    if(
    $amico1 != $utente['id']){
    $amico = $amico1;
    }else{
    $amico = $amico2;
    }

    $query = mysql_query("SELECT * FROM messaggio");
    if(
    mysql_num_rows($query) < 1){
    echo
    "Nessun messaggio!";
    }else{

    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico' ORDER BY data DESC");
    while(
    $rigo = mysql_fetch_array($query)){
    $data = $rigo['data'];
    $msg = $rigo['messaggio'];

    $query2=mysql_query("SELECT nickname,foto FROM utente WHERE id='$amico'");
    while(
    $nickname_utente = mysql_fetch_array($query2)){
    $nickname = $nickname_utente['nickname'];
    $avatar = (!$nickname_utente['foto']) ? 'd_silhouette.gif' : $nickname_utente['foto'];
    ?>
    <img src="<?php echo $avatar; ?>" width="50px" height="50px" class="foto"><br>
    Nickname: <?php echo $nickname; ?><br>
    Data: <?php echo $data; ?><br>
    Messaggio: <?php echo $msg; ?><br><br>

    <?php }}}}} ?>

  12. #12
    Guest

    Predefinito

    non credo c'entri, ma se tu le date le metti in un formato testuale (es. 23/6/2010) non puoi ordinarle correttamente per data, ti conviene usare il timestamp e poi trasformarlo in formato di data, ma l'errore non credo sia quello, comunque prova

  13. #13
    Guest

    Predefinito

    non ho capito bene io le date le prendo dal db sotto forma di numero 21221521....

  14. #14
    Guest

    Predefinito

    Codice PHP:
    <?php
    $utente
    = mysql_fetch_array(mysql_query("SELECT id FROM utente WHERE nickname='{$_COOKIE['nickname']}'"));
    $elenco_amici = mysql_query("SELECT * FROM amici WHERE id_amico_1='{$utente['id']}' OR id_amico_2='{$utente['id']}' AND accettato='1'");
    while(
    $amici = mysql_fetch_array($elenco_amici)){

    $controllo = $amici['accettato'];
    $amico1 = $amici['id_amico_1'];
    $amico2 = $amici['id_amico_2'];

    if(
    $controllo == 1){
    if(
    $amico1 != $utente['id']){
    $amico = $amico1;
    }else{
    $amico = $amico2;
    }

    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico'");
    if(
    mysql_num_rows($query) < 1){
    echo
    "Nessun messaggio!";
    }else{

    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico' ORDER BY data DESC");
    while(
    $rigo = mysql_fetch_array($query)){
    $data = date("d/m/Y H:i", $rigo['data']); //qui trasforma la data scritta in numeri (es. 243259925) in un formato testuale (es. 24/5/1997 04:59)
    $msg = $rigo['messaggio'];
    }

    $query2=mysql_query("SELECT nickname,foto FROM utente WHERE id='$amico'");
    while(
    $nickname_utente = mysql_fetch_array($query2)){
    $nickname = $nickname_utente['nickname'];
    }
    $avatar = (!$nickname_utente['foto']) ? 'd_silhouette.gif' : $nickname_utente['foto'];
    echo
    "<img src=\"$avatar\" width=\"50\" height=\"50\" class=\"foto\"><br>
    Nickname:
    $nickname<br>
    Data:
    $data<br>
    Messaggio:
    $msg<br><br>"; //nomn capisco che problema ti da mettere un echo
    }
    }
    }
    In teoria così dovrebbe andare meglio, ti ho anche corretto qualche cosetta per migliorare un po' lo script

  15. #15
    Guest

    Predefinito

    non funziona non imposta i messaggi in ordine per data...

  16. #16
    Guest

    Predefinito

    credo di aver capito qual è il problema, ma non so risolverlo, penso sia che il primo ciclo while trova tutti gli amici, ma li ordina per nome, il mio consiglio é questo: crea due pagine separate, più o meno così:

    file elenco_amici.php
    Codice PHP:
    <?php
    $utente
    = mysql_fetch_array(mysql_query("SELECT id FROM utente WHERE nickname='{$_COOKIE['nickname']}'"));
    $elenco_amici = mysql_query("SELECT * FROM amici WHERE id_amico_1='{$utente['id']}' OR id_amico_2='{$utente['id']}' AND accettato='1'");
    if (
    mysql_num_rows($elenco_amici) < 1){
    echo
    "Non hai amici";
    } else {
    while(
    $amici = mysql_fetch_array($elenco_amici)){

    $controllo = $amici['accettato'];
    $amico1 = $amici['id_amico_1'];
    $amico2 = $amici['id_amico_2'];

    if(
    $controllo == 1){
    if(
    $amico1 != $utente['id']){
    $amico = $amico1;
    }else{
    $amico = $amico2;
    }
    $sql = "SELECT * FROM utente WHERE id = '$amico'"; //Questa
    $query = mysql_query($sql); //parte
    while($n = mysql_fetch_array($query)){ //trova
    $nick_amico = $n['nickname']; //il nome dell'amico dall'id
    }
    echo
    "<a href=\"msgfriend.php?f=$amico\">$nick_amico</a>";
    }
    }
    ?>

    file msgfirend.php
    Codice PHP:
    $amico = $_GET['f'];
    if(!
    $amico){
    header("location: http://tuosito.altervista.org/cartella/elenco_amici.php");
    } else {
    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico'");
    if(
    mysql_num_rows($query) < 1){
    echo
    "Nessun messaggio!";
    }else{

    $query = mysql_query("SELECT * FROM messaggio WHERE id_utente='$amico' ORDER BY data DESC");
    while(
    $rigo = mysql_fetch_array($query)){
    $data = date("d/m/Y H:i", $rigo['data']);
    $msg = $rigo['messaggio'];
    }

    $query2=mysql_query("SELECT * FROM utente WHERE id='$amico'");
    while(
    $nickname_utente = mysql_fetch_array($query2)){
    $nickname = $nickname_utente['nickname'];
    $avatar = (!$nickname_utente['foto']) ? 'd_silhouette.gif' : $nickname_utente['foto'];
    }
    echo
    "<img src=\"$avatar\" width=\"50\" height=\"50\" class=\"foto\"><br>
    Nickname:
    $nickname<br>
    Data:
    $data<br>
    Messaggio:
    $msg<br><br>"; //non capisco che problema ti da mettere un echo
    }
    }
    ?>
    così dovrebbe andare bene

  17. #17
    Guest

    Predefinito

    non funziona lo stesso perchè tipo l'utente con id 1 ha più messaggi...
    la pagina elenco_amici.php
    mi stampa solo 3 nomi
    amico1
    amico4
    amico1
    poi se clicco vado alla pagina
    msgfriend.php
    se clicco su amico 1 sia nel primo che nel ultimo mi stampa sempre lo stesso messaggio...

  18. #18
    Guest

    Predefinito

    strano, perché il mio codice dovrebbe farti visualizzare i tuoi amici una volta sola, e poi cliccandoli dovresti visualizzare tutti i messaggi di questo amico

  19. #19
    Guest

    Predefinito

    non funziona possiamo tornare invece a quello che ho postato io per ultimo...
    ti spiego come devo fare
    dovrei fare in modo da visualizzare tutti i messaggi degli utenti che sono amici con utente che sta vedendo la pagina....
    non devo mettere in ordine per nome ma per data in base al ultimo messaggio postato

    esempio
    amico3
    messaggio
    data 10:40 26/06/2010

    amico2
    messaggio
    data 10:35 26/06/2010

    amico3
    messaggio
    data 9:14 26/06/2010

    amico1
    messaggio
    data 20:35 25/06/2010

  20. #20
    Guest

    Predefinito

    avevo capito, ma il problema é che ci sono un po' di cicli while annidiati e si fa un po' di casino, prova a fare come ti ho detto prima usando due pagine

  21. #21
    Guest

    Predefinito

    Prima di tutto bisogna identificare l'utente, per questo sapendo il nome trovo id del utente tramite la tabella "utente"...
    Poi sapendo id del utente mi collego alla tabella "amici" e devo controllare se sono amici e se la richiesta e stata accetta dal utente2...
    Dopo aver preso l'id del secondo amico o primo amico del utente connesso, mi collego alla tabella messaggi e tramite il campo "id_utente" identifico l'utente e prendo tutti i messaggi da lui postati ma in ordine per data....

    il problema e che non so come posso fare a visualizzare tutti i messaggi degli amici in ordine per data e non in ordine per nome....^^

  22. #22
    Guest

    Predefinito

    credo che tu debba fare de cicli while separati, non annidiati in modod che prima trovi tutti gli amici e poi attraverso questi trovi tutti i messaggi in ordine di data

    comunque continua a credere che farlo su due pagine sia migliore, più ordinato
    Ultima modifica di worldpixel : 28-06-2010 alle ore 12.12.33

  23. #23
    Guest

    Predefinito

    potresti farmi un esempio....

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •