Pagina 1 di 2 12 UltimoUltimo
Visualizzazione risultati 1 fino 30 di 31

Discussione: Gestire le "conoscenze" in php e mysql

  1. #1
    Guest

    Predefinito Gestire le "conoscenze" in php e mysql

    Salve a tutti.
    Sono un novellino di php e mysql, e sto facendo una specie di "social network" per tenere in contatto la mia classe di scuola, siccome piu della metà dei miei compagni non puo iscriversi ad altri social network famosi (facebook, twitter, ecc...).
    Per aiutarli tutti volevo farne uno io, il fatto è che non so come gestire le amicizie (si lo so dite "ma se siete tutti amici che ti servono le amicizie a fare?"->rispondo subito: Mi servirebbe per poter fare in modo che ognuno potesse inviarsi messaggi)
    Mi potreste aiutare? Grazie in anticipo.
    p.s.: scusate se ho sbagliato sezione, sono novellino pure di altervista

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Potresti far una tabella per ogni amico:

    Codice:
    amici di tizio:      amici di luigi:
    -luigi              -tizio
    -andrea             -andrea
    ...                 ...
    Oppure, un'unica tabella amici:
    Codice:
    amici:
    tizio luigi
    tizio andrea
    tizio ...
    luigi tizio
    luigi andrea
    luigi ...
    Non so se hai capito...


    Ovviamente, invece dei nomi, è molto meglio (in generale per ragioni di spazio e soprattutto unicità) salvare gli id (univoci) degli amici e non i nomi. Sopra ho utilizzato i nomi per far capire meglio.



    Forse ci sono modi più ottimizzati. A me son venuti in mente questi due.

    Ciao!
    Ultima modifica di alemoppo : 31-05-2012 alle ore 14.07.32

  3. #3
    Guest

    Predefinito

    quindi dovrei fare una tabella per utente?

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Penso sia meglio il "secondo modo", ovvero un unica tabella con amicizie...

    Però non so. Ogni metodo ha i suoi pro e contro.

    Ciao!

  5. #5
    Guest

    Predefinito

    Io dovrei fare cosi:

    Amici di andrea:
    -luigi
    -tizio

    Amici di luigi:
    -andrea
    -caio

    Amici di caio
    -andrea
    -luigi


    Andrea quindi puo ricevere e inviare messaggi a luigi e a tizio, ma non a caio (perchè non è suo amico)
    nello stesso modo Luigi puo scrivere ad andrea e a caio, ma non a tizio
    in fine caio puo scrivere ad andrea e a luigi, ma non a tizio

    (che casino )

    in pratica:



    Codice:
    *controllo tutti gli amici*
    se tra gli amici NON c'è quello che gli vuole scrivere:
    
           quello che gli vuole scrivere non puo scrivere
    
    altrimenti:
          quello che gli vuole scrivere puo scrivergli


  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Eh beh... è sufficiente una query per verificare se il nome a cui vuol inviare il messaggio è nella sua tabella degli amici... Non è così difficile, no?

    Ciao!

  7. #7
    Guest

    Predefinito

    Ok :D grazie mille...
    ora che ho la soluzione...zio google aiutami cn le query ahhahaha

  8. #8
    Guest

    Predefinito

    Forse un altro metodo potrebbe essere fare così:
    Codice:
    Tabella miaclasse:
    ID | Nome  | Amici
    ----------------------------
    1  | Mario | Luigi,Ada
    2  | Luigi | Mario,Ada
    3  | Ada   | Mario,Luigi
    In questo modo, potresti verificare subito se Ada e Luigi sono amici con questa query:
    Codice:
    SELECT * FROM miaclasse WHERE Nome = 'Ada' AND 'Luigi' IN Amici
    Dovrebbe funzionare, ma la cosa scomoda è che se Ada e Luigi litigano e si vogliono togliere l'amicizia hai ben due righe da aggiornare. (Perché, matematicamente parlando, la relazione di amicizia è simmetrica.)
    Se però sei ragionevolmente sicuro che questo non accada, allora puoi fare così.

    Secondo me la cosa migliore è il secondo metodo suggerito da alemoppo, magari introducendo un criterio per evitare che ci siano entrambe le righe (Ada, Luigi) e (Luigi, Ada). Per esempio, l'ordine lessicografico (= alfabetico) ti eviterebbe duplicati.

  9. #9
    Guest

    Predefinito

    Li proverò tutti e poi vi farò sapere...ora sn impegnato con un'altra cosa...

    tryphpnuke, Se litigano quindi dovrei fare 2 operazioni?
    ( 1-andare da Ada ed eliminare Luigi , 2-Andare da Auigi ed eliminare Ada ) ?
    In piu con il secondo metodo di alemoppo come potrei evitare doppioni?
    Se ci fossero doppioni che problemi potrei avere?

  10. #10
    Guest

    Predefinito

    Esatto, le due operazioni di cui parlavo sono quelle.
    Allora, i doppioni sono sempre una brutta cosa, perché ti duplicano sia lo spazio occupato che il lavoro fatto per gestirli. Se vuoi evitarli, con il secondo metodo di alemoppo, ti basta mettere i nomi in ordine alfabetico. Esempio:
    Codice:
    Tabella "amici":
    
    Amico1 | Amico2
    ----------------
    Ada    | Luigi     # Valido, poiché Ada < Luigi
    Luigi  | Ada       # NON valido, poiché Luigi > Ada
    Non so se mi sono spiegato..

    PS: se anziché lavorare con i nomi di battesimo, lavori con gli UserID, lo sforzo per il server è ancora minore, e ti eviti problemi nel caso che ci siano due "Luigi" nella tua classe.
    Ultima modifica di tryphpnuke : 01-06-2012 alle ore 11.16.02

  11. #11
    Guest

    Predefinito

    Quindi con il secondo metodo di alemoppo devo fare:
    Codice:
    amico1 | amico2
    -------------------
    Ada      | Luigi
    Ada      | Luca
    Ada      | ...
    Luigi     |Marco
    Luigi     |Vanessa
    Luigi     |...
    in piu se Ada aggiunge un amico dopo di Luigi risulterebbe:

    Codice:
    amico1 | amico2
    -------------------
    Ada      | Luigi
    Ada      | Luca
    Ada      | ...
    Luigi     |Marco
    Luigi     |Vanessa
    Luigi     |...
    Ada      | Vanessa
    Comunque ti sei spiegato bene :D

  12. #12
    Guest

    Predefinito

    Sì, però attenzione che la proprietà transitiva non vale.
    Ergo: se Ada è amica con Luigi e Luca (cioè nel database compaiono le righe "Ada, Luca", "Ada, Luigi"), non è mica detto che anche Luigi sia amico con Luca! Dovrai inserire una riga apposita "Luca, Luigi" per far sì che i nostri eroi siano realmente amici.

  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    Sì, però attenzione che la proprietà transitiva non vale.
    Ergo: se Ada è amica con Luigi e Luca (cioè nel database compaiono le righe "Ada, Luca", "Ada, Luigi"), non è mica detto che anche Luigi sia amico con Luca! Dovrai inserire una riga apposita "Luca, Luigi" per far sì che i nostri eroi siano realmente amici.
    Ho capito poco e forse male...quindi tu dici che sia possibile che se riusulta (nel database)

    Ada,Luigi
    Ada,Luca

    "amicizie fanstasma"?

    Cioè sul database NON c'è
    Luigi,Luca
    ma è come se ci fosse?

  14. #14
    Guest

    Predefinito

    No, il contrario: se il database contiene solo (Ada, Luigi) e (Ada, Luca), allora Luca e Luigi NON risultano amici.
    Lo saranno solo nel momento in cui tu inserirai (Luca, Luigi) nel database.

  15. #15
    Guest

    Predefinito

    a parte che se gestisco gli id...come li ordino in ordine alfabetico?

    esempio:
    Codice:
    id,nome
    1,Ada
    2,Marco
    3,Luca
    potrebbe,anzi, verrebbe cosi:
    Codice:
    amico1,amico2
    1,2
    1,3
    3,1
    3,2

  16. #16
    Guest

    Predefinito

    Ho provato a fare in questo modo:

    2 tabelle:

    amicizie
    amicizie_da_accettare

    disposte cosi:
    Codice:
    amicizie_da_accettare :
    1) id_amicizia int(11) auto increment
    2) utente_richiedente varchar(11)
    3) utente_ricevente varchar(11)
    -----------------------------------------------------
    amicizie:
    1) id_amicizia int(11) auto increment
    2) utente_uno varchar(11)
    3) utente_due varchar(11)

    la pagina profilo è cosi disposta:

    Codice:
    <?php
    include "../../header.php";
    ?>
    
    	<div id="wrapper">
    		<div id="dati_pers">
    			
    
    		
    <?php 
    
    
    	$id = "3";
    	include "../../utenti/amicizie.php"; // piu sotto
    	$nome = "Alice";
    	$cognome = "Rossi";
    	$tel_casa = "0123456789";
    	$cell = "9876543210";
    	$stato_sent = "Single";
    	$data_nascita = "1997-Settembre-14";
    	$password = "74b87337454200d4d33f80c4663dc5e5";
    	$email = "alice@gmail.com"; 
    	echo("
    	<table style='width:200px; height: 100px;'>
    		<tr><td>Nome:</td><td> Alice</td></tr>
    		<tr><td>Cognome:</td><td> Rossi</td></tr>
    		<tr><td>Telefono:</td><td>0123456789</td></tr>
    		<tr><td>Cellulare:</td><td>9876543210</td></tr>
    		<tr><td>Stato sentimentale:</td><td>Single</td></tr>
    		
    	");		
    	if($_SESSION["email"] == $email && $_SESSION["password"] == $password){ // questo nn è nei miei interessi per ora
    		
    		echo("<tr><td></td><td><a href='../../utenti/cambia.php'><font size='1'>cambia dati</font></a></td></tr>");
    
    		
    		
    	} else {
    	
    }
    	
    ?>
    	
    		</div>
    	</div>
    </body>
    </html>
    il file amicizie.php controlla se si è amici, se si sta visualizzando il proprio profilo o la possibilità di inviare la richiesta se nn si è amici
    Codice:
    <?php
    $controllo_amicizie_nel_database= mysql_query('SELECT * FROM amicizie WHERE (utente_uno = "'.$_SESSION["id"].'" AND utente_due = "'.$id.'") OR (utente_uno = "'.$id.'" AND utente_due = "'.$_SESSION["id"].'") ');
    $se_esiste = mysql_num_rows($controllo_amicizie_nel_database);
    if($se_esiste > 0){
    	
    	echo ("Amico");
    	
    	
    } else {
    	
    	if($_SESSION['id'] == $id){
    		
    		echo("Stai visualizzando il tuo profilo");
    		
    	} else {
    		
    		echo ('<a href="http://forum.it.altervista.org/utenti/invia_richiesta.php">Invia richiesta di amicizia</a>'); // piu sotto
    		
    	}
    	
    }
    
    
    
    ?>
    il file invia_richiesta.php i dati in "amicizie_da_accettare"

    Codice:
    <?php
    $conto_richieste_da_accettare=mysql_query('SELECT * FROM amicizie_da_accettare WHERE (utente_richiedente ="'.$id.'" AND utente_ricevente = "'.$_SESSION["id"].'") OR ( utente_richiedente = "'.$_SESSION["id"].'" AND utente_ricevente = "'.$id.'"');
    $se_in_sospeso = mysql_num_rows($conto_richieste_da_accettare);
    if($se_in_sospeso == 0){
    	
    	$crea_la_richiesta = mysql_query("INSERT INTO amicizie_da_accettare(`id_da_accettare`, `utente_richiedente`, `utente_ricevente`) VALUES (NULL, '".$_SESSION['id']."', '$id')");
    	
    	echo "Richiesta inviata, ";
    	
    	
    } else {
    	
    	echo "Richiesta gia inviata, ma non ancora accettata";
    }
    
    ?>
    il problema è che mi dice "Richiesta inviata" ma non invia la richiesta al database.
    dove stà il problema? nn lo trovo
    (se avete bisogno di TUTTO il sito ve lo posto volentieri)

  17. #17
    Guest

    Predefinito

    Domanda sciocca: ti sei connesso al database prima di inviare la query?

  18. #18
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    Domanda sciocca: ti sei connesso al database prima di inviare la query?
    Non è affatto una domanda stupida: L'errore era quello xD
    L'ho risolto e sorge un'altro problema:

    Ho modificato i file, il database e le tabelle:
    -ho eliminato la tabella "amicizie_da_accettare"
    -ho inserito lo stato della richiesta "accettata /in sospeso" alla tabella amicizie
    -ho eliminato il file "invia_richiesta.php" e messo tutte le funzioni in "amicizie.php"


    il profilo è cosi:

    Codice:
    <?php
    include "../../header.php";
    ?>
    
       <div id="wrapper">
          <div id="dati_pers">
             
    
          
    <?php
    
    
       $id = "3";
       include "../../utenti/amicizie.php"; // piu sotto
       $nome = "Alice";
       $cognome = "Rossi";
       $tel_casa = "0123456789";
       $cell = "9876543210";
       $stato_sent = "Single";
       $data_nascita = "1997-Settembre-14";
       $password = "74b87337454200d4d33f80c4663dc5e5";
       $email = "alice@gmail.com";
       echo("
       <table style='width:200px; height: 100px;'>
          <tr><td>Nome:</td><td> Alice</td></tr>
          <tr><td>Cognome:</td><td> Rossi</td></tr>
          <tr><td>Telefono:</td><td>0123456789</td></tr>
          <tr><td>Cellulare:</td><td>9876543210</td></tr>
          <tr><td>Stato sentimentale:</td><td>Single</td></tr>
          
       ");      
       if($_SESSION["email"] == $email && $_SESSION["password"] == $password){ // questo nn è nei miei interessi per ora 
          
          echo("<tr><td></td><td><a href='../../utenti/cambia.php'><font size='1'>cambia dati</font></a></td></tr>");
    
          
          
       } else {
       
    }
       
    ?>
       
          </div>
       </div>
    </body>
    </html>
    Codice:
    <?php
    
    
    $controllo_amicizie=mysql_query("SELECT * FROM amicizie WHERE (utente_uno ='".$id."' AND utente_due = '".$_SESSION['id']."') OR ( utente_uno = '".$_SESSION['id']."' AND utente_due = '".$id."'");
    $richieste = mysql_num_rows($conto_richieste_da_accettare);
    $righe = mysql_fetch_row($controllo_amicizie);
    $id_amicizia = $righe['id_amicizia'];
    $utente_uno = $righe['utente_uno'];
    $utente_due = $righe['utente_due'];
    $stato_amicizia = $righe['stato_amicizia'];
    
    if($_SESSION['id'] == $id){
    	echo "Stai visualizzando il tuo profilo";
    } else {
    if($richieste == 0){
    	if(!isset($_POST['richiesta'])){
    	?>
    <form action="#" method="post">
    <input type="submit" name="richiesta" value="Invia richiesta d'amicizia"/>
    </form>
    
    <?php
    } else {
    	$crea_la_richiesta = mysql_query("INSERT INTO amicizie(utente_uno, utente_due , stato_amicizia) VALUES ('".$_SESSION['id']."', '$id', 'in_sospeso')");
    	echo ('Richiesta di amicizia Inviata');
    	
    }
    } else {
    	if($stato_amicizia == "in_sospeso"){
    		echo "Amicizia ancora in sospeso";
    	} elseif($stato_amicizia == "accettata"){
    		echo "Amico";
    	}
    }
    } 
    
    ?>

    funziona alla perfezione solo che se refresho la pagina mi ricompare il bottone dell'amizia mentre nn dovrebbe esserci e ci dovrebbe essere "Amicizia In Sospeso"

  19. #19
    Guest

    Predefinito

    Prova così:
    Codice PHP:
    <?php

    # Ordina l'array.
    # In questo modo, si ha l'unicità grazie all'ordine alfabetico di inserimento e lettura dal database.
    # Cfr. quello che dicevamo prima.
    $u = array($_SESSION['id'], $id);
    sort($u);

    if(
    $u[0] == $u[1]) {
    # Proprio profilo, narcisisticamente.
    echo "Stai visualizzando il tuo profilo";
    } else {
    # Visualizzato il profilo di qualcun altro/a.
    $controllo_amicizie=mysql_query("SELECT * FROM amicizie WHERE utente_uno ='{$u[0]}' AND utente_due = '{$u[1]}'");
    $richieste = mysql_num_rows($controllo_amicizie);
    if(
    $richieste == 0) {
    # Nessuna riga trovata. Diamo la possibilità di diventare BFF.
    if(!isset($_POST['richiesta'])) {
    # Nessun dato inviato. Mostro il form.
    ?>
    <form action="#" method="post">
    <input type="submit" name="richiesta" value="Invia richiesta d'amicizia"/>
    </form>

    <?php
    } else {
    # Dati inviati. Inserimento e output.
    $crea_la_richiesta = mysql_query("INSERT INTO amicizie(utente_uno, utente_due , stato_amicizia) VALUES ('{$u[0]}', '{$u[1]}', 'in_sospeso')");
    echo (
    'Richiesta di amicizia Inviata');
    }
    } else {
    # I nomi compaiono nella tabella. Amicizia approvata o in attesa?
    $righe = mysql_fetch_row($controllo_amicizie);
    $id_amicizia = $righe['id_amicizia'];
    $utente_uno = $righe['utente_uno'];
    $utente_due = $righe['utente_due'];
    $stato_amicizia = $righe['stato_amicizia'];

    if(
    $stato_amicizia == "in_sospeso") {
    echo
    "Amicizia ancora in sospeso";
    } elseif (
    $stato_amicizia == "accettata") {
    echo
    "Amico";
    }
    }
    }
    ?>
    EDIT: Apportata qualche miglioria minore al codice.
    Ultima modifica di tryphpnuke : 02-06-2012 alle ore 00.16.44

  20. #20
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    Prova così:
    Codice PHP:
    <?php

    # Ordina l'array.
    # In questo modo, si ha l'unicità grazie all'ordine alfabetico di inserimento e lettura dal database.
    # Cfr. quello che dicevamo prima.
    $u = array($_SESSION['id'], $id);
    sort($u);

    if(
    $u[0] == $u[1]) {
    # Proprio profilo, narcisisticamente.
    echo "Stai visualizzando il tuo profilo";
    } else {
    # Visualizzato il profilo di qualcun altro/a.
    $controllo_amicizie=mysql_query("SELECT * FROM amicizie WHERE utente_uno ='{$u[0]}' AND utente_due = '{$u[1]}'");
    $richieste = mysql_num_rows($controllo_amicizie);
    if(
    $richieste == 0) {
    # Nessuna riga trovata. Diamo la possibilità di diventare BFF.
    if(!isset($_POST['richiesta'])) {
    # Nessun dato inviato. Mostro il form.
    ?>
    <form action="#" method="post">
    <input type="submit" name="richiesta" value="Invia richiesta d'amicizia"/>
    </form>

    <?php
    } else {
    # Dati inviati. Inserimento e output.
    $crea_la_richiesta = mysql_query("INSERT INTO amicizie(utente_uno, utente_due , stato_amicizia) VALUES ('{$u[0]}', '{$u[1]}', 'in_sospeso')");
    echo (
    'Richiesta di amicizia Inviata');
    }
    } else {
    # I nomi compaiono nella tabella. Amicizia approvata o in attesa?
    $righe = mysql_fetch_row($controllo_amicizie);
    $id_amicizia = $righe['id_amicizia'];
    $utente_uno = $righe['utente_uno'];
    $utente_due = $righe['utente_due'];
    $stato_amicizia = $righe['stato_amicizia'];

    if(
    $stato_amicizia == "in_sospeso") {
    echo
    "Amicizia ancora in sospeso";
    } elseif (
    $stato_amicizia == "accettata") {
    echo
    "Amico";
    }
    }
    }
    ?>
    EDIT: Apportata qualche miglioria minore al codice.
    Funziona ma ha un difettino piccolo: Non mi dice "Amicizia in sospeso"


    (con questa domanda chiedo troppo:)
    è possibile fare una lista di amicizie da accettare?
    Ovvero...
    Fare una lista con tutti gli utenti che mi hanno inviato la richiesta di amicizia...e stamparne nome e cognome, in modo che quando vado a visualizzare il loro profilo ci sia "accetta amicizia"? (e se clicco accetta amicizia modifica "in_sospeso" con "accettata")? Scusa se chiedo troppo

  21. #21
    Guest

    Predefinito

    Citazione Originalmente inviato da micheleguido Visualizza messaggio
    Funziona ma ha un difettino piccolo: Non mi dice "Amicizia in sospeso"
    Cioè? Ti dà sempre l'amicizia come già accettata, oppure non ti stampa proprio niente?

    Citazione Originalmente inviato da micheleguido Visualizza messaggio
    (con questa domanda chiedo troppo:)
    è possibile fare una lista di amicizie da accettare?
    Ovvero...
    Fare una lista con tutti gli utenti che mi hanno inviato la richiesta di amicizia...e stamparne nome e cognome, in modo che quando vado a visualizzare il loro profilo ci sia "accetta amicizia"? (e se clicco accetta amicizia modifica "in_sospeso" con "accettata")? Scusa se chiedo troppo
    Sì, la query SQL dovrebbe essere:
    Codice:
    SELECT utente_uno, utente_due
    FROM amicizie
    WHERE stato_amicizia = 'in_sospeso' AND (utente_uno ='{$_SESSION['id']}' OR utente_due = '{$_SESSION['id']}')
    Poi devi capire qual è l'altro utente (perché non sai se $_SESSION['id'] è risultato uguale a utente_uno o a utente_due), e da lì ricavarti nome e cognome.
    Se vuoi fare tutto in una botta sola, puoi usare l'istruzione INNER JOIN:
    Codice:
    SELECT amicizie.utente_uno, amicizie.utente_due, utenti.nome, utenti.cognome
    FROM amicizie
    INNER JOIN utenti
    ON utenti.id = amicizie.utente_uno OR utenti.id = amicizie.utente_due
    HAVING amicizie.stato_amicizia = 'in_sospeso' AND (amicizie.utente_uno ='{$_SESSION['id']}' OR amicizie.utente_due = '{$_SESSION['id']}')
    Però, anzitutto non sono sicuro che funzioni, e poi sono ancora meno sicuro (per non dire poco convinto) che ti semplifichi la vita. Per questo scopo specifico, sarebbe stata meglio la mia configurazione del database, fermi restando tutti i contro già discussi in precedenza.
    Ultima modifica di tryphpnuke : 02-06-2012 alle ore 09.45.15

  22. #22
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    Cioè? Ti dà sempre l'amicizia come già accettata, oppure non ti stampa proprio niente?


    Sì, la query SQL dovrebbe essere:
    Codice:
    SELECT utente_uno, utente_due
    FROM amicizie
    WHERE stato_amicizia = 'in_sospeso' AND (utente_uno ='{$_SESSION['id']}' OR utente_due = '{$_SESSION['id']}')
    Poi devi capire qual è l'altro utente (perché non sai se $_SESSION['id'] è risultato uguale a utente_uno o a utente_due), e da lì ricavarti nome e cognome.
    Se vuoi fare tutto in una botta sola, puoi usare l'istruzione INNER JOIN:
    Codice:
    SELECT amicizie.utente_uno, amicizie.utente_due, utenti.nome, utenti.cognome
    FROM amicizie
    INNER JOIN utenti
    ON utenti.id = amicizie.utente_uno OR utenti.id = amicizie.utente_due
    HAVING amicizie.stato_amicizia = 'in_sospeso' AND (amicizie.utente_uno ='{$_SESSION['id']}' OR amicizie.utente_due = '{$_SESSION['id']}')
    Però, anzitutto non sono sicuro che funzioni, e poi sono ancora meno sicuro (per non dire poco convinto) che ti semplifichi la vita. Per questo scopo specifico, sarebbe stata meglio la mia configurazione del database, fermi restando tutti i contro già discussi in precedenza.
    -Proprio niente
    -Io con la SQL ho provato cosi
    Codice:
    SELECT utente_uno WHERE utente_due = '{$_SESSION['id']}' AND stato_amicizia = 'in_sospeso'
    e poi
    $recupero=("SELECT * FROM utenti WHERE id = '{utente_uno}'");
    poi con
    $array=mysql_fetch_array($recupero);
    $nome=$array['nome'];
    $cognome=$array['cognome'];
    $id=$array['id'];

    e successivamente stampare una lista in html sul proprio profilo
    echo '<li><a href="../../utenti/id='.$id.'>'.$nome.' '.$cognome.'</a></li>';
    solo che dovrei selezionarli tutti...
    Ultima modifica di micheleguido : 02-06-2012 alle ore 10.00.56

  23. #23
    Guest

    Predefinito

    Citazione Originalmente inviato da micheleguido Visualizza messaggio
    -Proprio niente
    Sono un mongolo. Il problema è che mysql_fetch_row() non restituisce un Array associativo, dunque come chiavi si possono usare solo numeri interi, mentre noi provavamo con delle stringhe. Prova a cambiare l'ultimo pezzo così:
    Codice PHP:
    # I nomi compaiono nella tabella. Amicizia approvata o in attesa?
    $righe = mysql_fetch_array($controllo_amicizie);
    $id_amicizia = $righe['id_amicizia'];
    $utente_uno = $righe['utente_uno'];
    $utente_due = $righe['utente_due'];
    $stato_amicizia = $righe['stato_amicizia'];

    # Oppure, se ti interessa solo lo stato dell'amicizia e del resto non te ne fai un bel niente, risparmia un po' di tempo e CPU così:
    # $stato_amicizia = mysql_result($controllo_amicizie, 0, "stato_amicizia");

    if($stato_amicizia == "in_sospeso") {
    echo
    "Amicizia ancora in sospeso";
    } elseif (
    $stato_amicizia == "accettata") {
    echo
    "Amico";
    }

    Citazione Originalmente inviato da micheleguido Visualizza messaggio
    -Io con la SQL ho provato cosi
    Codice:
    SELECT utente_uno WHERE utente_due = '{}' AND stato_amicizia = 'in_sospeso'
    solo che dovrei selezionarli tutti...
    Ok, ma poni questo caso: l'utente 1 e 3 hanno chiesto l'amicizia all'utente 2. Allora, nella tua tabella avrai le righe (1, 2) e (2, 3). Con la tua query prendi solo il primo caso, dove utente_due = 2, ma perché dovremmo discriminare l'utente 3?



    Mi è venuto in mente un problema, però: come fai a sapere chi dei due ha inviato l'amicizia all'altro? Al momento, sai solo che c'è una richiesta in sospeso, ma chi la deve accettare dei due?

  24. #24
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    Sono un mongolo. Il problema è che mysql_fetch_row() non restituisce un Array associativo, dunque come chiavi si possono usare solo numeri interi, mentre noi provavamo con delle stringhe. Prova a cambiare l'ultimo pezzo così:
    Codice PHP:
    # I nomi compaiono nella tabella. Amicizia approvata o in attesa?
    $righe = mysql_fetch_array($controllo_amicizie);
    $id_amicizia = $righe['id_amicizia'];
    $utente_uno = $righe['utente_uno'];
    $utente_due = $righe['utente_due'];
    $stato_amicizia = $righe['stato_amicizia'];

    # Oppure, se ti interessa solo lo stato dell'amicizia e del resto non te ne fai un bel niente, risparmia un po' di tempo e CPU così:
    # $stato_amicizia = mysql_result($controllo_amicizie, 0, "stato_amicizia");

    if($stato_amicizia == "in_sospeso") {
    echo
    "Amicizia ancora in sospeso";
    } elseif (
    $stato_amicizia == "accettata") {
    echo
    "Amico";
    }


    Ok, ma poni questo caso: l'utente 1 e 3 hanno chiesto l'amicizia all'utente 2. Allora, nella tua tabella avrai le righe (1, 2) e (2, 3). Con la tua query prendi solo il primo caso, dove utente_due = 2, ma perché dovremmo discriminare l'utente 3?



    Mi è venuto in mente un problema, però: come fai a sapere chi dei due ha inviato l'amicizia all'altro? Al momento, sai solo che c'è una richiesta in sospeso, ma chi la deve accettare dei due?

    -Hahahaha dai tutti sbagliano...io nn mi ero connesso al database :P
    -Non discriminiamo utente 3 con il metodo in ordine alfabetico, ma non ci serve piu evitare i doppioni, perchè non li fà fare automaticamente! ho provato io e se invio una richiesta da utente 1 a utente 2, poi vado in utente 2 e visualizzo il profilo di utente 1, non c'è "invia richiesta" quindi non posso fare un doppione.
    Il metodo alfabetico non ci serve piu e quindi non discriminiamo nessuno... esempio:
    ammettiamo io sia utente 2, devo solo le richieste con utente_due=2 e stato_amicizia =in_sospeso
    ora mi impersono in utente 3, vedrò solo le richieste con utente_due = 3 e stato_amicizia = in_sospeso
    come ultimo, mi impersono in utente 1, vedrò ancora solo le richieste con utente_due = 1 e stato_amicizia = in_sospeso


    -la deve accettare utente_due
    mi spiego meglio

    ogni utente visualizzerà tutte le richieste d'amicizia solo se utente_due = $_SESSION['id'] e stato_amicizia = 'in_sospeso'

  25. #25
    Guest

    Predefinito

    Ho un'altro problema:
    Sono riuscito a generare la lista di utenti che mi hanno inviato la richiesta di amicizia...solo c'è un problema:
    Codice PHP:
    <?php

    $risultato
    = mysql_query("SELECT * FROM amicizie WHERE utente_due = '".$_SESSION['id']."' AND stato_amicizia = 'in_sospeso'");
    echo(
    '<div id="lista_a">');
    while(
    $ok = mysql_fetch_array($risultato)){
    $prendo = mysql_query("SELECT * FROM utenti WHERE id = '".$ok['utente_uno']."'");
    while(
    $scrivo = mysql_fetch_array($prendo)){
    echo(
    '<li><form action="#" method="post"><a href="http://forum.it.altervista.org/../utenti/id='.$ok["utente_uno"].'">'.$scrivo["nome"].' '.$scrivo["cognome"].'</a>
    <input type="submit" name="'
    .$ok["utente_uno"].'" value="Accetta"/>
    </li></form>'
    );

    }
    }

    if(isset(
    $_POST["".$ok['utente_uno'].""])){

    $query = mysql_query("UPDATE amicizie SET stato_amicizia = 'accetata' WHERE utente_uno='".$ok['utente_uno']."' AND utente_due='".$_SESSION['id']."'");
    header("Refresh: 1 URL = index.php");


    }
    ?>
    quando clicco sul "submit" non accade nulla...come faccio?

  26. #26
    Guest

    Predefinito

    Io la farei in maniera sostanzialmente un po' diversa:
    Codice PHP:
    <?php

    $risultato
    = mysql_query("SELECT * FROM amicizie WHERE utente_due = '{$_SESSION['id']}' AND stato_amicizia = 'in_sospeso'");
    echo(
    '<div id="lista_a">');
    while(
    $ok = mysql_fetch_array($risultato)){
    $prendo = mysql_query("SELECT * FROM utenti WHERE id = '{$ok['utente_uno']}'");
    $scrivo = mysql_fetch_array($prendo);
    echo(
    '<li><form action="#" method="post"><a href="http://forum.it.altervista.org/utenti/?id='.$ok["utente_uno"].'">'.$scrivo["nome"].' '.$scrivo["cognome"].'</a>
    <input type="submit" name="accetta" value="Accetta"/>
    </li></form>'
    );
    }

    if(isset(
    $_POST['accetta'])){
    $query = mysql_query("UPDATE amicizie SET stato_amicizia = 'accettata' WHERE utente_uno='{$_GET['id']}' AND utente_due='{$_SESSION['id']}'");
    header("Refresh: 1 URL = index.php");
    }
    ?>
    Non sono sicuro al 100% che funzioni.

  27. #27
    Guest

    Predefinito

    Citazione Originalmente inviato da tryphpnuke Visualizza messaggio
    Io la farei in maniera sostanzialmente un po' diversa:
    Codice PHP:
    <?php

    $risultato
    = mysql_query("SELECT * FROM amicizie WHERE utente_due = '{$_SESSION['id']}' AND stato_amicizia = 'in_sospeso'");
    echo(
    '<div id="lista_a">');
    while(
    $ok = mysql_fetch_array($risultato)){
    $prendo = mysql_query("SELECT * FROM utenti WHERE id = '{$ok['utente_uno']}'");
    $scrivo = mysql_fetch_array($prendo);
    echo(
    '<li><form action="#" method="post"><a href="http://forum.it.altervista.org/utenti/?id='.$ok["utente_uno"].'">'.$scrivo["nome"].' '.$scrivo["cognome"].'</a>
    <input type="submit" name="accetta" value="Accetta"/>
    </li></form>'
    );
    }

    if(isset(
    $_POST['accetta'])){
    $query = mysql_query("UPDATE amicizie SET stato_amicizia = 'accettata' WHERE utente_uno='{$_GET['id']}' AND utente_due='{$_SESSION['id']}'");
    header("Refresh: 1 URL = index.php");
    }
    ?>
    Non sono sicuro al 100% che funzioni.
    Guardando il tuo codice ho trovato un
    Codice:
    $_get['id']
    , ma a cosa serve? devo mettere
    Codice:
    method="get"
    al form?

  28. #28
    Guest

    Predefinito

    No: se tu fai una pagina cheneso.php, e poi visiti l'indirizzo http://.../cheneso.php?nome=valore, allora quel nome=valore lo puoi recuperare così:
    Codice PHP:
    echo $_GET['nome']; # Stampa "valore".
    Ora, se tu guardi nel codice di prima, noti che ho sbagliato clamorosamente!
    Svarioni a parte, intendevo qualcosa del genere:
    Codice PHP:
    <?php

    if (isset($_POST['accetta']))
    {
    # Sta tentando di accettare un'amicizia.
    $query = mysql_query("UPDATE amicizie SET stato_amicizia = 'accettata' WHERE utente_uno='{$_GET['id']}' AND utente_due='{$_SESSION['id']}'");

    header("Refresh: 1 URL = index.php");
    exit;
    # Basta così.
    }

    $risultato = mysql_query("SELECT * FROM amicizie WHERE utente_due = '{$_SESSION['id']}' AND stato_amicizia = 'in_sospeso'");

    echo(
    '<div id="lista_a">');
    while (
    $ok = mysql_fetch_array($risultato))
    {
    # Lista delle amicizie in sospeso.
    $prendo = mysql_query("SELECT * FROM utenti WHERE id = '{$ok['utente_uno']}'");
    $scrivo = mysql_fetch_array($prendo);

    echo(
    '<li>
    <a href="http://forum.it.altervista.org/utenti/?id='
    . $ok['utente_uno'] . '">' . $scrivo['nome'] . ' ' . $scrivo['cognome'] . '</a>
    <form action="?id='
    . $ok['utente_uno'] . '" method="post"><input type="submit" name="accetta" value="Accetta"/></form>
    </li>'
    );
    }
    echo(
    '</div>');
    ?>
    Ora:
    • Per ogni amicizia da accettare, viene mostrato il collegamento al profilo dell'utente, e poi un piccolo form che punta, con metodo post alla pagina [?id=n, dove n è l'ID dell'utente con il quale si vuole stringere amicizia.
    • Al caricamento della pagina, si guarda se per caso uno di quei form è stato inviato (condizione if (isset($_POST['accetta']))). In caso positivo, si va a guardare qual è l'ID dell'utente che compare nell'URL ($_GET['id'], vale a dire la n), e di quell'utente si accetta l'amicizia.


    In realtà, questo è un codice piuttosto elementare: dovresti fare un po' di controlli in più, ad esempio la condizione dell'if potrebbe diventare if (isset($_POST['accetta']) && isset($_GET['id'])), se non qualcosa di ancora più restrittivo, dal momento che sai che $_GET['id'] sarà un intero strettamente positivo.

    Altra piccola osservazione: tu fai una lista, e giustamente usi i tag <li> di HTML. Questi tag, però, dovrebbero comparire come figli di un tag <ol>, oppure di un tag <ul>, mentre mi sembra che tu li abbia piazzati dentro un <div>..

  29. #29
    Guest

    Predefinito

    Scusa nn ti seguo col discorso... io non ho usato un link tipo
    Codice:
    www.altervista.org/utenti/?id=...

  30. #30
    Guest

    Predefinito

    Ah, ok, scusa.. Pensavo il tuo fosse un errore di battitura.
    Comunque non cambia quasi niente:
    Codice PHP:
    # Basta cambiare questo:
    echo('<li>
    <a href="http://forum.it.altervista.org/utenti/?id='
    . $ok['utente_uno'] . '">' . $scrivo['nome'] . ' ' . $scrivo['cognome'] . '</a>
    <form action="?id='
    . $ok['utente_uno'] . '" method="post"><input type="submit" name="accetta" value="Accetta"/></form>
    </li>'
    );

    # In questo:
    echo('<li>
    <a href="http://forum.it.altervista.org/utenti/id='
    . $ok['utente_uno'] . '">' . $scrivo['nome'] . ' ' . $scrivo['cognome'] . '</a>
    <form action="?id='
    . $ok['utente_uno'] . '" method="post"><input type="submit" name="accetta" value="Accetta"/></form>
    </li>'
    );
    Adesso hai il link che ti pare, mentre il form punterà alla pagina con il punto interrogativo.
    Se proprio il punto interrogativo ti fa schifo, poco male:
    Codice PHP:
    <?php

    if (isset($_POST['accetta']))
    {
    # Sta tentando di accettare un'amicizia.
    $query = mysql_query("UPDATE amicizie SET stato_amicizia = 'accettata' WHERE utente_uno='{$_POST['id']}' AND utente_due='{$_SESSION['id']}'");

    header("Refresh: 1 URL = index.php");
    exit;
    # Basta così.
    }

    $risultato = mysql_query("SELECT * FROM amicizie WHERE utente_due = '{$_SESSION['id']}' AND stato_amicizia = 'in_sospeso'");

    echo(
    '<div id="lista_a">');
    while (
    $ok = mysql_fetch_array($risultato))
    {
    # Lista delle amicizie in sospeso.
    $prendo = mysql_query("SELECT * FROM utenti WHERE id = '{$ok['utente_uno']}'");
    $scrivo = mysql_fetch_array($prendo);

    echo(
    '<li>
    <a href="http://forum.it.altervista.org/utenti/id='
    . $ok['utente_uno'] . '">' . $scrivo['nome'] . ' ' . $scrivo['cognome'] . '</a>
    <form action="" method="post">
    <input type="hidden" name="id" value="'
    . $ok['utente_uno'] . '" />
    <input type="submit" name="accetta" value="Accetta"/>
    </form>
    </li>'
    );
    }
    echo(
    '</div>');
    ?>
    Niente più punti interrogativi che danno quel fastidioso senso di incertezza, e tutto come prima.
    Ultima modifica di tryphpnuke : 04-06-2012 alle ore 20.00.29

Pagina 1 di 2 12 UltimoUltimo

Regole di scrittura

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