Visualizzazione risultati 1 fino 4 di 4
Like Tree1Likes
  • 1 Post By radiodelmomento

Discussione: Problema con la stampa delle informazioni recuperate dal database MySQL

  1. #1
    booksound non è connesso Neofita
    Data registrazione
    05-11-2013
    Messaggi
    6

    Predefinito Problema con la stampa delle informazioni recuperate dal database MySQL

    Ciao, parto dal principio, sto cercando di richiamare le informazioni inserite nel database MySQL(phpmyadmin), una specie di community dove gli utenti postano quello che vogliono, da frasi a immagin, video ecc.. L'utente ha degli amici. Faccio in modo che il post che ha creato questo utente venga letto dai suoi amici.. Lo script l'ho già fatto e adesso nasce un problema, del tipo:
    Richiamo con il metodo SELECT per la stampa delle informazioni contenute nel database e uso while per stampare la lista intera. Solo che qui non mi stampa solo una volta il post creato da se stesso, ma lo stampa per quanti amici ho.. quindi ess..
    Codice PHP:
    -----
    POST1[IO] = Ciao a tutti....
    POST2[AMICO2] = Una fantastica giornata....
    POST3[IO] = Ciao a tutti....
    POST4[AMICO3] =
    POST5[AMICO4] = (Immagine)
    POST6[IO] = Ciao a tutti....
    -----
    Cioè mi stampa più volte lo stesso mio post, controllo nel database ma c'è solo un post con quella frase..
    Questo è lo script...

    Codice PHP:
    <?php
    include_once("include/connessione.php");

    $max = 18;
    $all_friends = array();
    $sql = "SELECT user1 FROM friends WHERE user2='".$_SESSION['username']."' AND accepted='1' ORDER BY RAND() LIMIT $max";
    $query = mysqli_query($db_conx, $sql);
    while (
    $row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
    array_push($all_friends, $row["user1"]);
    }
    $sql = "SELECT user2 FROM friends WHERE user1='".$_SESSION['username']."' AND accepted='1' ORDER BY RAND() LIMIT $max";
    $query = mysqli_query($db_conx, $sql);
    while (
    $row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
    array_push($all_friends, $row["user2"]);
    }
    $friendArrayCount = count($all_friends);
    if(
    $friendArrayCount > $max){
    array_splice($all_friends, $max);
    }
    $orLogic = '';
    foreach(
    $all_friends as $key => $user){
    $orLogic .= "username='$user' OR ";
    }
    $orLogic = chop($orLogic, "OR ");
    $sql_x = "SELECT username FROM users WHERE $orLogic";
    $query_x = mysqli_query($db_conx, $sql_x);
    while(
    $row_p = mysqli_fetch_array($query_x, MYSQLI_ASSOC)) {
    $friend_username = $row_p["username"];


    $select_name_user_friend = $db_conx->query("SELECT * FROM user_personal WHERE username='$friend_username'");
    if(
    mysqli_num_rows($select_name_user_friend)){
    $row_friend_name_surname = mysqli_fetch_assoc($select_name_user_friend);
    $name_friend = $row_friend_name_surname['name'];
    $surname_friend = $row_friend_name_surname['surname'];
    }


    $statuslist = "";
    $sql = "SELECT * FROM status WHERE account_name='$friend_username' AND type='a' AND del='0' AND privacy='1' OR account_name='$friend_username' AND type='c' AND del='0' AND privacy='1' OR author='".$_SESSION['username']."' AND type='c' AND del='0' ORDER BY postdate DESC LIMIT 20";


    $query = mysqli_query($db_conx, $sql);
    $statusnumrows = mysqli_num_rows($query);
    while (
    $row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
    echo
    $row['post']."<br/>";
    echo
    $row['username']." - ".$name_friend."<br/>";
    echo
    $row['date_post']."<br/>";
    }
    }

    ?>
    Il codice è simile, ho cambiato solo qualcosina, tipo la grafica totalmente eliminata...
    Tabella amici
    id user1 user2 datemade accepted
    Allora: L'user 1 è invia l'amicizia all'user2 e lui a sua volta sceglie di accettarla o meno..
    Mettiamo che l'utente2 accetti l'amicizia.. In poche parole, questo codice preleva i miei amici. Ora lo script dovrebbe escludere il mio username, ma visualizzare i miei amici.. classificati come "$friend_username", quindi mi visualizza i loro post. sul codice di stampa, è inserita una parte che dice
    Codice PHP:
    account_name='$_SESSION['username']' AND type='c' AND del='0'
    , a questo punto, mi dovrebbe far vedere anche i post che ho pubblicato io, ma così non accade, perché mi fa visualizzare una doppia volta(se no tripla o quadrupla volta), lo stesso post che ho pubblicato io..
    Come posso fare che vengano visualizzati tutti i post degli amici e miei senza che mi copi più volte lo stesso post?
    Da cosa è dipeso questo errore?
    Come posso risolverlo??
    Ultima modifica di alemoppo : 21-01-2014 alle ore 19.04.25 Motivo: +tag [php]

  2. #2
    booksound non è connesso Neofita
    Data registrazione
    05-11-2013
    Messaggi
    6

    Predefinito

    :( nessuno sa cosa posso fare???

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Nelle query complesse (se non erro) vanno inserite le parentesi.
    Codice PHP:
    $sql = "SELECT * FROM status WHERE (account_name='$friend_username' AND type='a' AND del='0' AND privacy='1') OR (account_name='$friend_username' AND type='c' AND del='0' AND privacy='1') OR (author='".$_SESSION['username']."' AND type='c' AND del='0') ORDER BY postdate DESC LIMIT 20";
    Comunque, il problema dovrebbe essere ugualmente questa query.
    Questo perché eseguendo "SELECT username FROM users[...]", mettiamo caso che il risultato siano 10 righe (quindi 10 autori diversi).
    Quindi, eseguiremo 10 volte: "SELECT * FROM status WHERE account_name='$friend_username' OR author=$_SESSION['username']". Questa query cerca tutti gli stati dell'utente di quel ciclo più tutti gli stati scritti dall'utente loggato. Quindi tutti i tuoi stati verranno mostrati, in questo caso, 10 volte (ovvero, se hai scritto 20 stati, questi venti verranno mostrati 10 volte, quindi 10*20=200 - ovviamente senza considerare il LIMIT).
    Spero che il problema sia questo, altrimenti non so proprio come aiutarti

    Ciao!
    booksound likes this.

  4. #4
    booksound non è connesso Neofita
    Data registrazione
    05-11-2013
    Messaggi
    6

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    Nelle query complesse (se non erro) vanno inserite le parentesi.
    Codice PHP:
    $sql = "SELECT * FROM status WHERE (account_name='$friend_username' AND type='a' AND del='0' AND privacy='1') OR (account_name='$friend_username' AND type='c' AND del='0' AND privacy='1') OR (author='".$_SESSION['username']."' AND type='c' AND del='0') ORDER BY postdate DESC LIMIT 20";
    Comunque, il problema dovrebbe essere ugualmente questa query.
    Questo perché eseguendo "SELECT username FROM users[...]", mettiamo caso che il risultato siano 10 righe (quindi 10 autori diversi).
    Quindi, eseguiremo 10 volte: "SELECT * FROM status WHERE account_name='$friend_username' OR author=$_SESSION['username']". Questa query cerca tutti gli stati dell'utente di quel ciclo più tutti gli stati scritti dall'utente loggato. Quindi tutti i tuoi stati verranno mostrati, in questo caso, 10 volte (ovvero, se hai scritto 20 stati, questi venti verranno mostrati 10 volte, quindi 10*20=200 - ovviamente senza considerare il LIMIT).
    Spero che il problema sia questo, altrimenti non so proprio come aiutarti

    Ciao!
    Nulla.. mi fa sempre la stessa cosa :'(

Regole di scrittura

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