funzione in_array gestita diversamente

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Salve a tutti, volevo esporre il mio problema.

Ho fatto un piccolo giochino per Facebook e ogni volta che un utente supera il livello l'app del gioco scrive sulla bacheca di quest'ultimo.

Il problema sorge quando devo gestire gli errori di Facebook. Mi sono reso conto che Facebook gestisce diverse tipologie di errori con lo stesso numero. Faccio un esempio:

Per l'errore numero #200 Facebook attribuisce sia il ban dell'applicazione, sia la non autorizzazione dell'utente a scrivere sulla propria bacheca.

Ovviamente in base al tipo di errore dovrò avere un comportamento diverso, quindi non posso gestire l'errore in base al numero ma in base al messaggio che le api di Facebook restituiscono.
Per esempio:
per il messaggio "Applicazione non autorizzata" che corrisponde al numero errore 200
per il messaggio "Applicazione sospesa" che corrisponde al numero errore 400

Comportamento => elimino l'applicazione

per il messaggio "Utente bannato" che corrisponde al numero errore 100
per il messaggio "Utente non esistente" che corrisponde al numero errore 200

Comportamento => elimino l'utente

Dopo questo preambolo, la soluzione che avevo pensato era la seguente:

Aggiungere in un primo array tutti i messaggi di errore che voglio gestire per il comportamento che prevede l'eliminazione dell'app:

PHP:
$errori_da_gestire_ELIMINA_APP=array("errore A", "errore B","errore C");

Aggiungere in un secondo array tutti i messaggi di errore che voglio gestire per il comportamento che prevede l'eliminazione dell'utente:
PHP:
$errori_da_gestire_ELIMINA_USER=array("errore D", "errore E","errore F");

Confrontare adesso i due array $errori_da_gestire con l'errore che viene restituito da Facebook "$stringa_Facebook":
PHP:
if (in_array($stringa_Facebook, $errori_da_gestire_ELIMINA_APP))
{
  echo "elemento trovato: funzione per eliminare l'app";
}elseif (in_array($stringa_Facebook, $errori_da_gestire_ELIMINA_USER))
{
  echo "elemento trovato: funzione per eliminare l'user";
}

Adesso, dov'è il problema?

Il problema è che questo script si trova all'interno di un cronjob, c'è un modo per alleggerire la cosa e rendere l'esecuzione più rapida?

Anche perchè dovrei fare svariati elseif :( questo era solo un esempio e ne è presente uno solo, ma nel mio caso dovrebbero essere una decina
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, potresti usare uno switch
PHP:
switch ($stringa_Facebook) {
    case "Applicazione non autorizzata":
    case "Applicazione sospesa":
        // elimino l'applicazione
        break;
    case "Utente bannato":
        // elimino utente
        break;
    default:
        // faccio altro
        break;
}
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Avevo pensato ad una cosa del genere ma bisogna considerare che questo controllo si trova in un ciclo, non è che interrompendo questo ciclo con break; interrompono anche il ciclo superiore?

Inviato dal mio Nexus 4 con Tapatalk
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
No, all'interno dello switch il break interrompe solo la verifica dei case
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
In realtà avrei anche un'altra richiesta da farti, io ho strutturato lo script in modo che la parte variabile sia contenuta in un file chiamato config.php richiamato poi nel cron.php che è statica.

Vorrei che tali messaggi d'errore fossero inseriti nel config.php e che poi il cron.php li gestisca automaticamente. Per questo motivo avevo pensato agli array cosicché io potessi aggiungerne di nuovi all'interno del config e poin non toccare più nulla.

Non riesco a trovare una soluzione "dinamica" per il codice da te postato, idee?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Che brutta notizia!
lo switch è meno performante del if else ?
che delusione :dipser:
e se provi cosi ?
PHP:
$array = array(
    "messaggio1" => "eliminaUtente",
    "messaggio2" => "eliminaApplicazione",
    "messaggio3" => "eliminaUtente"
);

function eliminaUtente() {
    echo "elimina utente";    
}

function eliminaApplicazione() {
    echo "elimina applicazione";    
}

$stringa_Facebook = "messaggio3";

call_user_func($array[$stringa_Facebook]);
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Che brutta notizia!
lo switch è meno performante del if else ?
che delusione :dipser:
e se provi cosi ?
PHP:
$array = array(
    "messaggio1" => "eliminaUtente",
    "messaggio2" => "eliminaApplicazione",
    "messaggio3" => "eliminaUtente"
);

function eliminaUtente() {
    echo "elimina utente";    
}

function eliminaApplicazione() {
    echo "elimina applicazione";    
}

$stringa_Facebook = "messaggio3";

call_user_func($array[$stringa_Facebook]);

Ma se devo utilizzare gli array, che differenza c'è con il codice postato su?

Edit: poi un'altra cosa non ho capito del codice appena postato, i messaggi possono essere multipli, cioè a messaggio1,messaggio7 deve corrispondere eliminaApplicazione (che in realtà è proprio il nome di una funzione già creata xD)

Dovrei fare un array di un array? e non sarebbe uguale a prima?
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
differenza c'è con il codice postato sU
è un solo array anzichè due
non c'è nessauna condizione if else e nemmeno lo switch
ps:
forse non hai letto bene il codice che ti ho postato
 
Ultima modifica:

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
è un solo array anzichè due
non c'è nessauna condizione if else e nemmeno lo switch
ps:
forse non hai letto bene il codice che ti ho postato

Non ho fatto attenzione, perdonami :D
Scusa scusa scusa
0:)0:)0:):angel::angel::angel:

Adesso lo provo :D
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
WOOOOOOOOOOOOOOOOO

Mi sento come un ragazzino con un giocattolo nuovo.
Funziona :D

Almeno funziona con una prova fatta al volo. Domani la provo su grande scala. :elvis::elvis:

Grazie Grazie Grazie
:mavieni:


EDIT: NOOOO ma se devo passare una variabile alla funzione?? ad es

eliminaSingoloUtente($id)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Provo a spiegarmi meglio anche per chi leggerà in futuro :
Crei un array che potrai inserire nel tuo config.php, basta che poi lo includi
utilizzi il messaggio di facebook come chiave e il nome della tua funzione come valore
PHP:
$array = array(
    "messaggio1" => "eliminaUtente",
    "messaggio2" => "eliminaApplicazione",
    "messaggio3" => "eliminaUtente"
);
poi ultilizzi il metodo call_user_func() per richiamare la funzione associata al messaggio di facebook
PHP:
$stringa_Facebook = "messaggio3";
call_user_func($array[$stringa_Facebook]);
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
puoi passare i parametri come secondo argomento, guarda sul manuale
PHP:
call_user_func($array[$stringa_Facebook],$id);
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Provo a spiegarmi meglio anche per chi leggerà in futuro :
Crei un array che potrai inserire nel tuo config.php, basta che poi lo includi
utilizzi il messaggio di facebook come chiave e il nome della tua funzione come valore
PHP:
$array = array(
    "messaggio1" => "eliminaUtente",
    "messaggio2" => "eliminaApplicazione",
    "messaggio3" => "eliminaUtente"
);
poi ultilizzi il metodo call_user_func() per richiamare la funzione associata al messaggio di facebook
PHP:
$stringa_Facebook = "messaggio3";
call_user_func($array[$stringa_Facebook]);

Questo l'avevo capito e difatti ho fatto come hai detto. e la cosa funziona se bisogna far eseguire solo la funzione.

Il problema sorge ad esempio quando devo cancellare un utente:

PHP:
function eliminaSingoloUtente($id)
{
	$id=stripslashes($id);
	if(empty($id)) { echo "errore id vuoto!"; exit;}

	global $HOST, $DB_USER_NAME, $DB_USER_PWD, $DB;
	$link=mysql_pconnect($HOST, $DB_USER_NAME, $DB_USER_PWD); 
	mysql_select_db ($DB);

	$sql="delete from utenti where userid='".mysql_real_escape_string($id)."' limit 1";
	$result=mysql_query($sql) or die(mysql_error());
}

come vedi elimino l'utente in base all'id.

Come faccio a trasferire un ulteriore valore?

Mi spiego con un esempio:

config.php

PHP:
$array = array(
    "Massimo ha eliminato il tuo gioco" => "eliminaUtente",
    "messaggio2" => "eliminaApplicazione",
    "messaggio3" => "saltaApp"
); 

function eliminaUtente($id)
{
	$id=stripslashes($id);
	if(empty($id)) { echo "errore id vuoto!"; exit;}

	global $HOST, $DB_USER_NAME, $DB_USER_PWD, $DB;
	$link=mysql_pconnect($HOST, $DB_USER_NAME, $DB_USER_PWD); 
	mysql_select_db ($DB);

	$sql="delete from utenti where userid='".mysql_real_escape_string($id)."' limit 1";
	$result=mysql_query($sql) or die(mysql_error());
}
cron.php
PHP:
require_once "config.php";
$id="123";//sarebbe l'id di massimo
$stringa_Facebook = "Massimo ha eliminato il tuo gioco";
call_user_func($array[$stringa_Facebook]);


EDIT: postavo mentre mi avevi risposto, non me ne ero accorto lascio comunque questo codice per i posteri XD
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
A utilizzare array di una funzione in un'altra jQuery 1
asevenx Funzione strpos con l'utilizzo di array PHP 4
M funzione mysql fetch array PHP 3
L Funzione non restituisce completamente un array PHP 2
E ordinamento array multidimensionale per un valore ottenuto tramite una funzione PHP 1
C Ordinare alfabeticamente un array e ordinare un secondo array in funzione del primo. Javascript 12
nim funzione array(); e chiarimenti foreach PHP 6
M Chiamata di una funzione che contenga un array PHP 13
Monital Funzione IF in un array PHP 25
T passare una array ad una funzione PHP 2
I array php inviarli a funzione javascript PHP 1
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
R Variabile non risconosciuta dentro una funzione PHP 1
P Implementazione funzione FileReader Javascript 0
P Funzione copia multipla. Javascript 2
P Funzione jQuery Ajax invio file a php jQuery 1
A Funzione read URL PHP 6
F Funzione Glob - ricerca file contenente una parola PHP 1
A Mail con funzione mail() riconosciute come spam PHP 9
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
A funzione iconv () non mi funziona PHP 4
D Come usare funzione php PHP 6
Y verificare condizione dopo esecuzione della funzione Programmazione 0
IClaude Funzione Javascript Javascript 8
A Funzione share come modificarla Social Media Marketing 0
L funzione onclik con seno e coseno non va Javascript 3
L funzione onclick non va Javascript 26
G modifica corretta funzione da eregi() a preg_match() PHP 3
Shyson Modificare funzione php PHP 15
L pdo (stampare un valore con ritorno a funzione) PHP 0
elpirata Funzione conversione da minuti in ore Javascript 0
@ [MS Access] Funzione Iif..is null... Database 0
F Funzione deprecata in PHP7 PHP 1
G [MS Access] Funzione ARROTONDA non definita nell'espressione MS Access 1
max1974 [Javascript] Funzione Errata procedura Javascript 2
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
Domenico_Falco1 Associare una stessa funzione get a due eventi a.click con classi differenti Ajax 6
psicomia Gestione funzione in javascript in tabella richiamare"textarea" valori preimpostati in "select" Javascript 2
L Problema funzione mail() PHP PHP 3
elpirata [Javascript] Lo script alle volte funzione altre volte no Javascript 0
V [Visual Basic] Richiamare funzione su modulo per restituire list Visual Basic 0
R [Photoshop] funzione colore automatico Photoshop 0
maxnegri [PHP]Funzione di calcolo prezzo di una camera in un range di date PHP 62
L [PHP] problema count messo in una funzione. PHP 1
Monital funzione php si ripete due volte PHP 6
GiErre [PHP] [HTML] Disabilitare un link in funzione della piattaforma PHP 7
Monital Funzione php e campo database come variabile PHP 6
M Recuperare ID e usarlo in funzione jQuery 2
M PHP - Funzione non e scrive il risultato PHP 3
R [Javascript] Rendere una funzione sempre visibile Javascript 2

Discussioni simili