Repository 32bit  Forum
Repository 64bit  Wiki

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.

Re: Richieste d'amicizia [php/sql]

Messaggioda miklos » mer giu 29, 2011 14:29

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!??!
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1262
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2

Re: Richieste d'amicizia [php/sql]

Messaggioda Paoletta » mer giu 29, 2011 15:09

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.
Avatar utente
Paoletta
Staff
Staff
 
Messaggi: 3904
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Richieste d'amicizia [php/sql]

Messaggioda miklos » mer giu 29, 2011 15:15

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:)
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1262
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2

Re: Richieste d'amicizia [php/sql]

Messaggioda miklos » mer giu 29, 2011 15:18

mi correggo.. non c'e' bisogno per forza di PDO.. e' solo una possibilita' come tante :D
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1262
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2

Re: Richieste d'amicizia [php/sql]

Messaggioda Paoletta » mer giu 29, 2011 15:38

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
Paoletta
Staff
Staff
 
Messaggi: 3904
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Richieste d'amicizia [php/sql]

Messaggioda RedSkull92 » gio giu 30, 2011 10:35

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.
Avatar utente
RedSkull92
Linux 2.6
Linux 2.6
 
Messaggi: 554
Iscritto il: mar apr 21, 2009 16:25
Località: Palermo
Slackware: 64bit -current
Kernel: 3.5.4
Desktop: FluxBox

Re: Richieste d'amicizia [php/sql]

Messaggioda paperinik4 » sab set 22, 2012 12:22

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.
paperinik4
Linux 1.0
Linux 1.0
 
Messaggi: 1
Iscritto il: ven set 21, 2012 20:36
Nome Cognome: Fabio Paolino
Slackware: windows 7
Kernel: windows 7 ultimate
Desktop: windows 7

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite