Richieste d'amicizia [php/sql]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Richieste d'amicizia [php/sql]

Messaggio 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!??!
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: Richieste d'amicizia [php/sql]

Messaggio 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.

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Richieste d'amicizia [php/sql]

Messaggio 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:)
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Richieste d'amicizia [php/sql]

Messaggio da ilmich »

mi correggo.. non c'e' bisogno per forza di PDO.. e' solo una possibilita' come tante :D
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: Richieste d'amicizia [php/sql]

Messaggio 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!

Avatar utente
RedSkull92
Linux 3.x
Linux 3.x
Messaggi: 567
Iscritto il: mar 21 apr 2009, 17:25
Slackware: 64bit -current
Kernel: 3.5.4
Desktop: FluxBox
Località: Palermo
Contatta:

Re: Richieste d'amicizia [php/sql]

Messaggio 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.

paperinik4
Linux 0.x
Linux 0.x
Messaggi: 1
Iscritto il: ven 21 set 2012, 21:36
Nome Cognome: Fabio Paolino
Slackware: windows 7
Kernel: windows 7 ultimate
Desktop: windows 7

Re: Richieste d'amicizia [php/sql]

Messaggio 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.

Rispondi