Pagina 2 di 2

Re: Richieste d'amicizia [php/sql]

Inviato: mer 29 giu 2011, 15:29
da ilmich
Paoletta ha scritto:Se non altro scrivi codice indipendentemente dal DBMS, quindi riutilizzabile. Il discorso di usare le API generiche e' proprio pensato per anticipare eventuali cambiamenti e rendere il codice indipendente dalla piattaforma.
per codice indipendente da DBMS io intendo un qualcosa che dovunque la metto funziona senza modifiche... e non e' questo il caso :D
ci sono casi in cui una query per db2 non va su mysql.. quindi anche con pdo tecnicamente codice agnostico non riesci proprio a scriverlo.
ti darei ragione se ci fosse un unico linguaggio sql uguale per tutti.. allora pdo avrebbe un senso.. perche' ti da la possibilita' di accedere a database che comunicano in modo diverso, ma parlando la stessa lingua.

Tra l'altro se ti fai un giro fra i vari CMS open source molti usano pdo.. pero' mica li puoi installare su un qualsiasi database supportato da PDO.
Gli sviluppatori devono implementare le varie differenze con astrazioni comunque necessarie.

Per quanto riguarda l'escape dei campi non lo sapevo che pdo facesse questo lavoro.. non mi e' mai piaciuto troppo quindi l'ho studiato poco... immagino quindi che ci sia una specie di prepared statement o simili!??!

Re: Richieste d'amicizia [php/sql]

Inviato: mer 29 giu 2011, 16:09
da Paoletta
miklos ha scritto: ci sono casi in cui una query per db2 non va su mysql.. quindi anche con pdo tecnicamente codice agnostico non riesci proprio a scriverlo.
Senza dubbio, ma non usarlo del tutto e' ancora peggio, non riesci nemmeno a sfruttare le parti in comune! :) Peraltro non credo che sia l'unica alternativa; il concertto valido in generale e' che usare un layer d'astrazione con delle api generiche e' sempre meglio che interfacciarsi direttamente con il DBMS.

Re: Richieste d'amicizia [php/sql]

Inviato: mer 29 giu 2011, 16:15
da ilmich
Paoletta ha scritto: Senza dubbio, ma non usarlo del tutto e' ancora peggio, non riesci nemmeno a sfruttare le parti in comune! :) Peraltro non credo che sia l'unica alternativa; il concertto valido in generale e' che usare un layer d'astrazione con delle api generiche e' sempre meglio che interfacciarsi direttamente con il DBMS.
esatto.. il che ci porta a pensare che il nostro amico non sbaglierebbe se tutti i metodi che abbiamo visto facessero parte di una classe.. e che poi questa classe venga estesa da un'altra che sostituisca solo il codice che serve per farlo funzionare con db2:)
insomma... il layer di cui parli e' gia fatto.. non c'e' bisogno di pdo:)

Re: Richieste d'amicizia [php/sql]

Inviato: mer 29 giu 2011, 16:18
da ilmich
mi correggo.. non c'e' bisogno per forza di PDO.. e' solo una possibilita' come tante :D

Re: Richieste d'amicizia [php/sql]

Inviato: mer 29 giu 2011, 16:38
da Paoletta
miklos ha scritto:il nostro amico non sbaglierebbe se tutti i metodi che abbiamo visto facessero parte di una classe.. e che poi questa classe venga estesa da un'altra che sostituisca solo il codice che serve per farlo funzionare con db2:)
chissa' se e' questo il caso...speriamo!

Re: Richieste d'amicizia [php/sql]

Inviato: gio 30 giu 2011, 11:35
da RedSkull92
miklos ha scritto:per quanto riguarda il sistema a due tabelle io farei cosi.
Siccome la tabella richieste deve essere facilmente accessibile dall'utente destinatario farei una tabella con tre campi:

Codice: Seleziona tutto

id, utente, richiedente
quindi per inserire una richiesta il richiedente fa una insert di questo tipo:

Codice: Seleziona tutto

$aggiungi="INSERT INTO richiesta_amicizia (utente,richiedente) VALUES ('{$id}','{$_SESSION['id']}')'";
per vedere le richieste pending:

Codice: Seleziona tutto

select * from richiesta_amicizia where utente = '{$_SESSION['id']}';
per quanto riguarda l'accettazione per semplificare la logica, tenendo presente che l'overead e' minimo farei cosi':

Codice: Seleziona tutto

$accetta=""INSERT INTO amicizie (amico1,amico2) VALUES ('{$id}','{$_SESSION['id']}')";
$accetta2=""INSERT INTO amicizie (amico1,amico2) VALUES ('{$_SESSION['id']}','{$id}')"; //in questo modo crei una relazione bidirezionale facilmente interrogabile
$togli="DELETE FROM richiesta_amicizia WHERE id={quello della richiesta che hai clickato};
per rifiutare la richiesta:

Codice: Seleziona tutto

$togli="DELETE FROM richiesta_amicizia WHERE id={quello della richiesta che hai clickato};
una volta fatto questo per vedere gli amici di un utente farai cosi:

Codice: Seleziona tutto

select * from amicizie where amico1 = '{$_SESSION['id']}
per vedere se un utente e' tuo amico puoi fare cosi:

Codice: Seleziona tutto

select count(1) from amicizie where amico1 = '{$_SESSION['id']}' and amico2 = '{$id}'
infine per eliminare una relazione invece:

Codice: Seleziona tutto

delete from amicizie where amico1 = '{$_SESSION['id']}' and amico2 = '{$id}'
delete from amicizie where amico1 = '{$id}' and amico2 = '{$_SESSION['id']}'
spero di essere stato d'aiuto, le query possono sicuramente essere ottimizzate e ridotte a singoli statement (tipo le insert e le delete multiple), pero' ho preferito fare cosi' per mostrare meglio il meccanismo che avevo in mente

ciauuuu
Ci sono alcune cose a me non chiare.

Codice: Seleziona tutto

$aggiungi="INSERT INTO richiesta_amicizia (utente,richiedente) VALUES ('{$id}','{$_SESSION['id']}')'";
I campi non erano 3 ?
Il campo id è auto incrementante ?
Nel dubbio io ho fatto così:

Codice: Seleziona tutto

$aggiungi="INSERT INTO richiesta_amicizia (id,utente,richiedente) VALUES ('{$_SESSION['id']}','{$id}','{$_SESSION['id']}')";

Codice: Seleziona tutto

select count(1) from amicizie where amico1 = '{$_SESSION['id']}' and amico2 = '{$id}'
Questo mi fa vedere se io sono suo amico, ma a me serve anche la condizione per vedere se l'amicizia è in sospeso in modo da poter restituire 0 e far stampare nella pagina "Amicizia in sospeso"
Quindi per ora è così:

Codice: Seleziona tutto

function controlla_amicizia($id)
{
 controlla_id($id);
    $query="SELECT COUNT(1) AS trovato FROM amicizie WHERE amico1='{$_SESSION['id']}' AND amico2='{$id}'";
    $ris=mysql_query($query) or die(mysql_error());
    $dati=mysql_fetch_assoc($ris);
    if($dati['trovato'] == 0)
         //Non amico
        return -1;
    elseif($dati['trovato'] > 0)
         return 1;
    //Quì manca la condizione per ritornare 0 cioè per dire che la richiesta è in sospeso
}

Per vedere gli amici di un utente non dovrei fare così ?

Codice: Seleziona tutto

$query="SELECT * FROM amicizie WHERE amico1='{$id}' OR amico2='{$id}'";
Ah, una curiosità, com'è meglio ?
'{$id}' o '$id' ?
Grazie per le eventuali risposte.

Re: Richieste d'amicizia [php/sql]

Inviato: sab 22 set 2012, 13:22
da paperinik4
Salve ragazzi,

L'argomento delle amicizie accetta, aggiungi rifiuta, blocca o segnala, ineteresserebbe anche a me. Volevo chiedere, bisogna per forza fare due tabelle amico1 e amico2 ??? Non si potrebbe avere una tabella unica (magari ho detto na stronzata megagalattica). Inoltre volevo sapere chi di voi ha risolto il problema sull'upload immagine. Vi pregherei di rispondermi, visto che abbiamo argomenti in comunque (tranne forze per l'immagine). Cerco aiuto in quanto mi sono bloccatto con il mio sito. Ho fatto il modulo d'iscrizione, ho inviato l'email di conferma per l'iscrizione, ho adoperato anche io 0 = acettato messo come default e 1 = rifiutato. Attualmente funziona tutto e sta sullo "0" ma presto lo dovrò modificare da 0 a 1 perchè l'email che dovrò inviare servirà per attivare l'account e quindi riportarlo a "0". Come editor adopero netbeans 7.2 su windows 7 ultimate e home (per portatile). Spero in un vostro aiuto grazie. Ah un ultima cosa, sto lavorando per chi lo conosce tutto in hosting web (ossia web virtuali) che girano sul nas (synology) e sono riusciuto grazie ad altri aiutui ad inviare l'email dal synology. Grazie a tutti.