• Home
  • Forum
  • Fare Web
  • PHP

funzione in_array gestita diversamente

  • Creatore Discussione Creatore Discussione IImanuII
  • Data di inizio Data di inizio 18 Mar 2014

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
  • 18 Mar 2014
  • #1
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: 18 Mar 2014

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
  • 19 Mar 2014
  • #2
Nessuno ha una soluzione migliore?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.606
54
48
TN
  • 19 Mar 2014
  • #3
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
  • 19 Mar 2014
  • #4
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.606
54
48
TN
  • 19 Mar 2014
  • #5
No, all'interno dello switch il break interrompe solo la verifica dei case
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
  • 19 Mar 2014
  • #6
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?
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
  • 19 Mar 2014
  • #7
Ho trovato questo link che risponde alla mia domanda in termini di tempo, ma riguardo alla "flessibilità" che ti ho detto poc'anzi ancora nessuna idea...

http://stackoverflow.com/questions/1309728/best-way-to-do-a-php-switch-with-multiple-values-per-case
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.606
54
48
TN
  • 19 Mar 2014
  • #8
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
  • 19 Mar 2014
  • #9
criric ha scritto:
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]);
Clicca per allargare...

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: 19 Mar 2014

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.606
54
48
TN
  • 19 Mar 2014
  • #10
differenza c'è con il codice postato sU
Clicca per allargare...
è 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: 19 Mar 2014

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
  • 19 Mar 2014
  • #11
criric ha scritto:
è 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
Clicca per allargare...

Non ho fatto attenzione, perdonami
Scusa scusa scusa
000:angel::angel::angel:

Adesso lo provo
 

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
  • 19 Mar 2014
  • #12
WOOOOOOOOOOOOOOOOO

Mi sento come un ragazzino con un giocattolo nuovo.
Funziona

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.606
54
48
TN
  • 19 Mar 2014
  • #13
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.606
54
48
TN
  • 19 Mar 2014
  • #14
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
  • 19 Mar 2014
  • #15
criric ha scritto:
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]);
Clicca per allargare...

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: 19 Mar 2014
Devi accedere o registrarti per poter rispondere.

Discussioni simili

A
utilizzare array di una funzione in un'altra
  • amhal
  • 30 Ago 2016
  • jQuery
Risposte
1
Visite
1K
jQuery 30 Ago 2016
criric
Funzione strpos con l'utilizzo di array
  • asevenx
  • 18 Mar 2015
  • PHP
Risposte
4
Visite
2K
PHP 27 Mar 2015
borgo italia
M
funzione mysql fetch array
  • mteresa
  • 1 Set 2014
  • PHP
Risposte
3
Visite
2K
PHP 2 Set 2014
marino51
L
Funzione non restituisce completamente un array
  • Lighty
  • 15 Lug 2014
  • PHP
Risposte
2
Visite
1K
PHP 16 Lug 2014
Lighty
L
E
ordinamento array multidimensionale per un valore ottenuto tramite una funzione
  • ely2402
  • 3 Mag 2013
  • PHP
Risposte
1
Visite
1K
PHP 3 Mag 2013
borgo italia
C
Ordinare alfabeticamente un array e ordinare un secondo array in funzione del primo.
  • cavaliere123
  • 1 Ott 2012
  • Javascript
Risposte
12
Visite
3K
Javascript 1 Ott 2012
cavaliere123
C
funzione array(); e chiarimenti foreach
  • nim
  • 11 Nov 2011
  • PHP
Risposte
6
Visite
3K
PHP 12 Nov 2011
Longo8
M
Chiamata di una funzione che contenga un array
  • mediasteno
  • 4 Lug 2011
  • PHP
Risposte
13
Visite
2K
PHP 27 Gen 2014
borgo italia
Funzione IF in un array
  • Monital
  • 15 Gen 2010
  • PHP
  • 2
Risposte
25
Visite
7K
PHP 19 Gen 2010
Monital
T
passare una array ad una funzione
  • tecno8
  • 26 Nov 2008
  • PHP
Risposte
2
Visite
6K
PHP 29 Nov 2008
Eliox
I
array php inviarli a funzione javascript
  • itos
  • 2 Giu 2005
  • PHP
Risposte
1
Visite
2K
PHP 8 Giu 2005
Simoxxx
S
[Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress
  • Lino80
  • 9 Gen 2023
  • Offerte e Richieste di Lavoro e/o Collaborazione
Risposte
0
Visite
3K
Offerte e Richieste di Lavoro e/o Collaborazione 9 Gen 2023
Lino80
R
Variabile non risconosciuta dentro una funzione
  • robyspider77
  • 11 Nov 2022
  • PHP
Risposte
1
Visite
1K
PHP 11 Nov 2022
WmbertSea
P
Implementazione funzione FileReader
  • PaoloG
  • 12 Apr 2021
  • Javascript
Risposte
0
Visite
1K
Javascript 12 Apr 2021
PaoloG
P
P
Funzione copia multipla.
  • PaoloG
  • 8 Apr 2021
  • Javascript
Risposte
2
Visite
2K
Javascript 11 Apr 2021
PaoloG
P
P
Funzione jQuery Ajax invio file a php
  • Peterrey76
  • 9 Mar 2021
  • jQuery
Risposte
1
Visite
3K
jQuery 9 Mar 2021
Max 1
A
Funzione read URL
  • AndreaCerre
  • 18 Feb 2021
  • PHP
Risposte
6
Visite
2K
PHP 19 Feb 2021
AndreaCerre
A
F
Funzione Glob - ricerca file contenente una parola
  • francescoITA
  • 25 Gen 2021
  • PHP
Risposte
1
Visite
1K
PHP 27 Gen 2021
francescoITA
F
A
Mail con funzione mail() riconosciute come spam
  • Alex@1983
  • 6 Nov 2020
  • PHP
Risposte
9
Visite
2K
PHP 8 Nov 2020
Alex@1983
A
M
Utilizzare la funzione mysql_num_rows() in PHP 5
  • miagy
  • 16 Ago 2020
  • PHP
Risposte
3
Visite
1K
PHP 17 Ago 2020
Hormus
H
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?