Autore | Messaggio |
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: condizione if in modulo |
|
|
Ciao Sniffer
Non riesco proprio a risolvere un problema (cmq come vedrai, poco a poco faccio progressi ).
Procedo a punti per spiegarmi meglio: il modulo è friendfinder (ma qs è poco importante)
1. ho una tabella _user_firendlist nel database con 3 campi: id - ffusername - friendname
Es.: pippo ha come "amici" solo topolino
Nella tabella ci sarà:
id ffusername friendname
1 pippo topolino
2. voglio rendere visibile le informazioni del profilo di pippo solo agli utenti suoi amici (quindi in questo caso solo topolino deve poter vedere il suo profilo)
3. ho inserito questa query al database:
Codice: | $suoamico = sql_query( "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'", $dbi );
list($friendname) = sql_fetch_row($suoamico,$dbi); |
che verifica se tra gli amici di pippo ( $ffusername) è presente topolino (friendname)
4. quindi ho messo una condizione if:
Codice: | if ($friendname !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
} |
che mi impedisce di vedere il profilo di pippo se il mio nick ($userinfo[username]) è diverso da quello presente nella sua lista di amici ($friendname)
Il codice mi funziona bene e tutto è ok.
Ma ..... non riesco proprio a farlo funzionare quando per es.:
id ffusername friendname
1 pippo topolino
2 pippo pluto
3 pippo paperino
pippo ha più di un amico: ed ovviamente è questo che mi serve!
Ho modificato la query così :
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici)) |
e mi sembra che funzioni perchè se aggiungo:
Codice: | echo"<br>QS SONO GLI AMICI - FRIENDNAME: <br>".$array[0].","; | a video mi viene il giusto elenco degli amici di pippo e cioè mi si stampa:
Codice: |
QS SONO GLI AMICI - FRIENDNAME:
topolino,
QS SONO GLI AMICI - FRIENDNAME:
pluto,
QS SONO GLI AMICI - FRIENDNAME:
paperino,
|
Ma non riesco a modificare la condizione if: riesci a capire come devo sistemarla per far confrontare il nick dell'utente loggato in quel momento con tutti gli amici di topolino presenti nella tabella
Grazie, Dino
Ultima modifica di Dino il Mer Feb 18, 2009 10:38 pm, modificato 1 volta in totale |
|
Inviato:
Sab Gen 31, 2009 11:00 pm |
|
|
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Non è semplice risponderti non conoscendo tutto il codice e avere la possibilità di provare cmq da quello che mi sembra di avere capito riesci a confrontare solo il primo user ma se questo ha degli amici non riesci.
Fai una prova così:
sostituisci
Codice: | while ($array = mysql_fetch_array($listaamici)) |
con
Codice: | $listaamici2 = array ($listaamici);
for ($i = 0; $i < count($listaamici2); $i++) |
a questo punto dovresti avere la variabile $listaamici2[$i] che contiene quello che ti serve almeno credo
Fammi sapere
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Dom Feb 01, 2009 6:31 pm |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: Grazie |
|
|
Grazie Sniffer: è un piacere sentirti
Riassumo sinteticamente il mio problema (a volte sono prolisso e poco chiaro ): un utente deve poter vedere il profilo di un'altro solo se è inserito nella sua Lista di amici. Se tutti gli utenti avessero un amico solo (cosa ovviamente senza senso!) la mia prima modifica andrebbe bene.
In realtà un utente ha più di un amico nella sua Lista amici e la mia modifica non funziona più
Ho effettuato, sulla base delle tue indicazioni queste modifiche:
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
$listaamici2 = array ($listaamici);
for ($i = 0; $i < count($listaamici2); $i++)
|
Aggiungendo il codice per la stampa a video (che uso per vedere se la modifica è ok):
Codice: | echo"<br>QS SONO GLI AMICI - FRIENDNAME: <br>".$listaamici2[$i].","; |
mi viene la stampa di qs errore: Resource id #2901 e i nick degli amici non compaiono! (anche mettendo l'echo tra parentesi graffe .. non cambia)
Ho poi corretto in qs modo la condizione if:
Codice: | if ($listaamici2[$i] !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
} |
Ho sbagliato qualcosa io?
Citazione: | Non è semplice risponderti non conoscendo tutto il codice e avere la possibilità di provare |
Immagino non ti preoccupare: faccio io le prove che servono (sono a un punto morto, ed è una modifica fondamentale per qs modulo, altrimenti non lo posso usare: un utente non deve assolutamente essere autorizzato a vedere il profilo di un altro utente se questo non vuole ).
Ciao, grazie ancora
Dino
Ultima modifica di Dino il Mer Feb 18, 2009 10:40 pm, modificato 1 volta in totale |
|
Inviato:
Dom Feb 01, 2009 8:46 pm |
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Ok allora proviamo così, visto che hai già recuperato la lista degli amici
Codice: | while ($array = mysql_fetch_array($listaamici)) |
aggiungi una variabile che racchiuda il risultato della query
Codice: | $amici = $array['friendname']; |
quindi $amici la utilizzerai in questo modo
Codice: | if ($amici !=$userinfo[username]) |
Non sapendo bene com'è strutturato il codice completo seguo il tuo filo logico
Fammi sapere e scusa per la lentezza nella risposta ma sono un pò incasinato
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Lun Feb 02, 2009 11:54 pm |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: Grazie |
|
|
Ciao Sniffer
Citazione: | Fammi sapere e scusa per la lentezza nella risposta ma sono un pò incasinato |
Non ti preoccupare: figurati sei invece gentilissimo come al solito (io mentre ti aspetto provo e riprovo ... ma purtroppo continuo a picchiarci la testa senza risultati ).
Allora: ho fatto come dici, inserendo:
Codice: | $amici = $array['friendname'];
echo"$amici"; //per vedere a video se è ok |
ma la stampa a video mi restituisce solo un amico!
Ho riprovato il codice di cui ti dicevo e confermo che mettendo:
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici))
echo"<br>QS SONO GLI AMICI - FRIENDNAME: <br>".$array[0].","; |
mi viene come stampa a video il giusto elenco di amici presenti nella tabella del database, così:
Codice: |
QS SONO GLI AMICI - FRIENDNAME:
topolino,
QS SONO GLI AMICI - FRIENDNAME:
pluto,
QS SONO GLI AMICI - FRIENDNAME:
paperino,
|
che però poi non riesco a "recuperare" con la condizione if
(ho fatto tantissime prove, ovviamente con poca competenza, ma ..niente!).
Ciao Sniffer
Dino.
Ultima modifica di Dino il Mer Feb 18, 2009 10:41 pm, modificato 1 volta in totale |
|
Inviato:
Mar Feb 03, 2009 1:20 am |
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Dopo
Codice: | while ($array = mysql_fetch_array($listaamici)) |
devi inserire
Codice: | {
$amici = $array['friendname'];
echo"$amici"; //per vedere a video se è ok
} |
Fammi sapere
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Mar Feb 03, 2009 1:26 am |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: Rigrazie |
|
|
Che idiota: hai ragione, scusami
Allora:
adesso la stampa a video è ok: mi viene:
Codice: | topolinoplutopaperino |
cioè i nomi degli amici tutti attaccati, senza spazi.
Purtroppo però non funziona la condizione if:
Codice: | if ($amici !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
} |
mi nega sempre l'accesso (sia che clicco sull'user di un utente di cui sono amico oppure di cui non lo sono!)
Questo (però per un solo amico presente) funzionava:
Codice: | if ($friendname !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
} |
con gratitudine, Dino.
p.s.: ho fatto due prove per evitare di fare errori: una con:
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici))
$amici = $array['friendname']; |
e un'altra con:
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici))
{
$amici = $array['friendname'];
echo"$amici"; //per vedere a video se è ok
} |
il risultato è in entrambi negativo
Ultima modifica di Dino il Mer Feb 18, 2009 10:42 pm, modificato 1 volta in totale |
|
Inviato:
Mar Feb 03, 2009 2:21 am |
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Ho dimenticato di mettere <br /> alla fine della variabile per mandare a capo la riga
Codice: | echo"$amici<br />"; //per vedere a video se è ok |
Per la verifica la stai facendo all'interno delle parentesi graffe?
Porta pazienza ma a quest'ora sono del tutto andato
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Mar Feb 03, 2009 2:55 am |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: Grazie |
|
|
Certo Sniffer, figurati
si, ora con il <br /> vanno a capo
Ma il problema permane: non funziona la condizione if: sia con parentesi graffe che senza (come penso debba essere):
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici))
$amici = $array['friendname']; |
Questo (però per un solo amico presente) funzionava (te la riporto nuovamente perchè penso sia importante e per facilitarti il tutto):
Codice: | if ($friendname !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
} |
Riguarda il mio post iniziale: con un solo amico funziona
Dino
p.s.: non so come farei senza di te
Ultima modifica di Dino il Mer Feb 18, 2009 10:43 pm, modificato 1 volta in totale |
|
Inviato:
Mar Feb 03, 2009 10:50 am |
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Quello che intendevo è che la condizione va verificata all'interno delle parentesi graffe, invece che l'echo metti l'if per il controllo.
Fammi sapere
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Mer Feb 04, 2009 2:22 am |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: Scusa |
|
|
Scusami ma faccio fatica: penso di essere andato in tilt
Non ho sicuramente capito:
Citazione: | Quello che intendevo è che la condizione va verificata all'interno delle parentesi graffe, invece che l'echo metti l'if per il controllo |
Ho provato in qs 2 modi: così:
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici))
{
$amici = $array['friendname'];
// TOLTO echo //echo"$amici<br />"; //per vedere a video se è ok
if ($amici !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
}
} |
e così:
Codice: | $suoiamici = "SELECT friendname FROM ".$prefix."_user_friendslist WHERE ffusername='$ffusername'";
$listaamici = mysql_query($suoiamici);
while ($array = mysql_fetch_array($listaamici))
$amici = $array['friendname'];
{
if ($amici !=$userinfo[username])
{
OpenTable();
echo "<br>Mi spiace ma per poter vedere il Profilo di un altro utente devi essere inserito nella sua \"Lista Amici\"";
CloseTable();
}
} |
ma non penso di var capito quello che dovevo fare: e infatti non funzionano.
Ciao, Dino
Ultima modifica di Dino il Mer Feb 18, 2009 10:44 pm, modificato 1 volta in totale |
|
Inviato:
Mer Feb 04, 2009 2:22 pm |
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Ok prova così
Codice: | global $user, $cookie, $prefix, $user_prefix, $db, $anonymous;
cookiedecode($user);
$username2 = $cookie[1];
$sql = "SELECT friendname FROM ".$user_prefix."_users_friendslist";
$result = $db->sql_query($sql);
while (list($friendname) = $db->sql_fetchrow($result)) {
$username1 = $result['friendname'];
$username3 = array("$username1");
if(in_array($username2,$username3)){
echo "Accesso negato";
exit;
} else {
echo "$friendname<br />";
}
}
|
Lo script controlla l'utente logato tramite la variabile $username2 se compare nella lista $username3, tu dovrai solo modificare l'utente da controllare in base ai tuoi criteri.
La dichiarazione delle variabili (global) se è già presente nel tuo scritp controlla se le variabi indicate sopra ci sono in caso contrario aggiungile e non riportare nuovamente tutta la riga
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Gio Feb 05, 2009 4:46 am |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: Ancora grazie |
|
|
Ciao Sniffer, volevo ancora ringraziarti per il tuo prezioso aiuto: ti sei come al solito dimostrato davvero "tosto"
Purtroppo però la modifica è probabilmente al di sopra di quelle che sono le mie capacità e devo purtroppo rassegnarmi ad abbandonare l'installazione di questo modulo
Ti spiego come mai: con la tua ultima modifica sono riuscito, inserendola all'inizio della "function userinfo" e chiudendola alla fine a raggiungere il risultato che cercavo: ora solo i membri presenti nella mia lista amici possono vedermi il profilo (anche se purtroppo invece di comparire l'avviso "Accesso negato" compare la pagina con il fondo del sito a tinta unita!)
Tutto bene dirai .... no, perchè l'utente non vede più la sua pagina personale il cui codice è inserito nella stessa function che è ricca di if, elseif, else ..... (mi ha fatto rincretinire!! Ho fatto una marea di prove ma ... mi mancano le basi del php ) e quando inserisco il tuo codice così modificato (alcune parti erano infatte già presenti nella function):
Codice: | $username2 = $userinfo[username];
$sql = "SELECT friendname FROM ".$user_prefix."_user_friendslist WHERE ffusername='$ffusername'";
$result = $db->sql_query($sql);
while (list($friendname) = $db->sql_fetchrow($result)) { // GRAFFA CHE VERRA' CHIUSA ALLA FINE DELLA FUNCTION
$username1 = $result['friendname'];
$username3 = array("$username1");
if(in_array($username2,$username3))
{
OpenTable();
echo "Accesso negato"; // QUESTO NON CAPISCO MA NON SI VEDE!
echo"</table>";
exit;
CloseTable();
}
.......... QUA IL RESTO DEL CODICE .......
E ALLA FINE DELLA function:
} //LA GRAFFA CHE CHIUDE IL TUO CODICE
include("footer.php");
} |
l'utente non vede più la sua pagina personale (gli viene inibita come se fosse il profilo di un altro utente di cui lui non è amico!).
Mi spiace di averti purtroppo fatto perdere tempo, senza poi riuscire a raggiungere il risultato.
Ciao, mille grazie davvero
Dino
|
|
Inviato:
Dom Feb 08, 2009 11:11 pm |
|
|
Sniffer Amministratore
Registrato: Jul 20, 2003 Messaggi: 3218
Località: Verona
|
Oggetto: |
|
|
Mi dispiace
senti facciamo così io non ti assicuro nulla perchè sto realizzando alcuni progetti che mi portano via tutto il poco tempo libero ma se trovo un attimo posso provare a controllare il modulo.
Fammi avere il modulo e la versione che usi di nuke in modo che posso controllare, mi preme ricordarti di non aspettarti grandi cose in breve tempo
_________________ Non inviatemi pm con richieste di aiuto grazie.
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
|
|
Inviato:
Lun Feb 09, 2009 12:13 am |
|
|
Dino Fedele
Registrato: Mar 23, 2006 Messaggi: 105
|
Oggetto: .... |
|
|
. . . . . . non ho parole . . . . .
Io uso una versione d'epoca: la 6.9 WL
Qs è il modulo:
Su questo forum solo gli utenti registrati possono vedere i links! Registrati o fai il login |
Non ne hai certo bisogno, ma spero che in qualche modo cmq ti possa facilitare:
- il codice in questione si trova nel file: modules/FriendFinder/index.php function userinfo;
- avevo anche provato a creare nel file: modules/FriendFinder/functions.php una functions apposita (nello stesso file ce ne sono diverse: es.: function isFFMember($uname) oppure: function isApproved($uname) che consentono insieme ad un if, analogamente a quelle presenti di default nel nuke /es.: (is_user($user)) o: (is_admin($admin)) , semplicemente richiamandole, di far vedere oppure no il codice successivo: sono molto utilizzate nel file index.php di qs modulo .. ovviamente non sono riuscito a crearne una analoga che richiamasse gli utenti inseriti nella lista amici
- tra le altre cose forse anche la tua precedente soluzione andava (quella con $amici ...): probabilmente sbagliavo la posizione delle graffe.
Citazione: | mi preme ricordarti di non aspettarti grandi cose in breve tempo |
non ti preoccupare minimamente: se non fosse per te questo modulo l'avrei abbandonato ... adesso invece mi hai riacceso la speranza
Con vera riconoscenza ... ciao Sniffer,
Dino
|
|
Inviato:
Mar Feb 10, 2009 1:26 am |
|
|
|