PDA

Visualizza la versione completa : Funzione per richiamare nome utente


ffw
04-10-2020, 13:39
Funzione per richiamare nome utente
Ho un codice dove il nome cognome o ragione sociare del cliente viene richiamate molte volte.
Mi sembrava logico scrivere una funzione che mi ritorni queste informazioni in base al ID
Solo che all'interno della funzione non riesco ad estrare i dati:

codice:

function denom($u)
{
$stmt = $indexPage->runQuery("SELECT * FROM Utenti WHERE id=:id");
$stmt->execute(array(":id"=>$u));
$usr = $stmt->fetch(PDO::FETCH_ASSOC);
$eDenom = (!empty($usr['ragione_soc'])) ? $usr['ragione_soc'] : $usr['name']." ".$usr['nome'];
return $eDenom;
}
In teoria sarebbe una cosa semplice, ma sicuramente mi scappa qualcoa.
In qualsiasi pagina la richiamassi, mi ritorna error 500.
Il problema dovrebbe essere nel connettersi al DB, perché se salto la connessione non da errore, restituendo un empty. Domanda: all'interno della funzione posso eseguire la query così come nell'esempio ?

Alhazred
04-10-2020, 14:00
Dipende da diverse cose, ad esempio se da dentro la funzione $indexPage è visibile, così come se risulta esistente una connessione.

Comunque se nella logica della tua applicazione ti serve più volte il nome dello stesso cliente e ogni volta per ottenerlo interroghi il db, potrebbe essere necessario rivedere la logica stessa perché potrebbe convenirti mettere tale nome in una qualche variabile ed evitarti tutti quegli accessi al db che rallentano.

ffw
04-10-2020, 14:43
Spiego il problema:
Gestionale di un laboratorio di assistenza; diversi clienti portano diversi dispositivi, quindi devo associare ad ogni dispositivo il suo proprietario. quindi il cliente non è quasi mai lo stesso, dipende dal numero di dispositivi che ha riparato nel laboratorio.

$stmt = $indexPage->runQuery("SELECT * FROM Riparazioni WHERE lab=:lab ORDER BY id DESC LIMIT 50");
$stmt->execute(array(":lab"=>$SESSION['lab']['id']));
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$nmCliente = $indexPage->runQuery("SELECT id, ragione_soc, name, nome FROM Utenti WHERE id=:id");
$nmCliente->execute(array(":id"=>$row['usr']));
$client = $nmCliente->fetch(PDO::FETCH_ASSOC);
$denomClient = (empty($client['ragione_soc'])) ? $client['name']." ".$client['nome'] : $client['ragione_soc'];
......................
Qui ho lo stato della riparazione, i vari interventi eseguiti
In diverse pagine (riparazione conclousa / in arrivo, in lavorazione, in attesa di ritiro) la storia si ripete con molti dispositivi e nominativi
Per adesso ho lo stesso codice per ciascuna pagina.
......................
}

Funziona tutto bene, ma lo stesso codice viene ripetuto ogni volta che ho bisogno del nome/ragione sociale del cliente.

$indexPage si connette per tutte le volte che ho bisogno, ma non nella funzione.
Per capirlo meglio: https://demo.fixhub.it
subito dopo login c'è un esempio chiaro (associazione nomi ai dispositivi) di quello che mi servirebbe.

ninja72
04-10-2020, 15:13
prova con questo approccio, poi ovviamente fai le modifiche necessarie.



function denom()
{
$eDenom = [];
// variabili d'esempio
$usr['ragione_soc'] = 'azienda1';
$usr['nome'] = 'nome1';
$usr['cognome'] = 'cognome1';

$eDenom = [
'ragione_soc' => $usr['ragione_soc'],
'nome' => $usr['nome'],
'cognome' => $usr['cognome']
];
return $eDenom;
}

echo denom()['ragione_soc'];
echo denom()['nome'];
echo denom()['cognome'];

ffw
04-10-2020, 19:01
prova con questo approccio, poi ovviamente fai le modifiche necessarie.



function denom()
{
$eDenom = [];
// variabili d'esempio
$usr['ragione_soc'] = 'azienda1';
$usr['nome'] = 'nome1';
$usr['cognome'] = 'cognome1';

$eDenom = [
'ragione_soc' => $usr['ragione_soc'],
'nome' => $usr['nome'],
'cognome' => $usr['cognome']
];
return $eDenom;
}

echo denom()['ragione_soc'];
echo denom()['nome'];
echo denom()['cognome'];

Il mio problema è che non mi trova l'utente, non la definizione in sè.
Quindi anche inviando ID utente, non riesce ad estrarlo dal DB per qualche motivo.
dove prenderei i dati nel tuo esempio ?

E' questo pezzo qui che ha problemi nella funzione:
Codice PHP:

function denom($u)
{
$nmCliente = $indexPage->runQuery("SELECT id, ragione_soc, name, nome FROM Utenti WHERE id=:id");
$nmCliente->execute(array(":id"=>$u));
$client = $nmCliente->fetch(PDO::FETCH_ASSOC);
}

Funziona tutto se lo ripeto per ogni pagina, ma se devo creare una funzione non si connette al DB.
$u arriva correttamente, togliendo l'estrazione mi ritorna ID utente senza problemi.

Loading